From 67c73a999eb2961a0274fcfc7ccd8e5f567464e4 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Sun, 8 Dec 2024 21:11:15 +0000 Subject: [PATCH 01/45] add weather app first steps #251 --- staff/angela-bernaldez/project/.gitignore | 1 + .../angela-bernaldez/project/api/package.json | 18 + .../project/api/pnpm-lock.yaml | 737 ++++ staff/angela-bernaldez/project/app/.gitignore | 24 + staff/angela-bernaldez/project/app/README.md | 8 + .../project/app/eslint.config.js | 38 + staff/angela-bernaldez/project/app/index.html | 13 + .../angela-bernaldez/project/app/package.json | 31 + .../project/app/pnpm-lock.yaml | 3350 +++++++++++++++++ .../project/app/public/vite.svg | 1 + .../angela-bernaldez/project/app/src/App.css | 42 + .../angela-bernaldez/project/app/src/App.jsx | 28 + .../project/app/src/assets/react.svg | 1 + .../project/app/src/index.css | 68 + .../angela-bernaldez/project/app/src/main.jsx | 10 + .../project/app/vite.config.js | 7 + .../project/services/index.js | 60 + .../project/services/package.json | 17 + .../project/services/pnpm-lock.yaml | 427 +++ .../angela-bernaldez/project/services/test.js | 63 + 20 files changed, 4944 insertions(+) create mode 100644 staff/angela-bernaldez/project/.gitignore create mode 100644 staff/angela-bernaldez/project/api/package.json create mode 100644 staff/angela-bernaldez/project/api/pnpm-lock.yaml create mode 100644 staff/angela-bernaldez/project/app/.gitignore create mode 100644 staff/angela-bernaldez/project/app/README.md create mode 100644 staff/angela-bernaldez/project/app/eslint.config.js create mode 100644 staff/angela-bernaldez/project/app/index.html create mode 100644 staff/angela-bernaldez/project/app/package.json create mode 100644 staff/angela-bernaldez/project/app/pnpm-lock.yaml create mode 100644 staff/angela-bernaldez/project/app/public/vite.svg create mode 100644 staff/angela-bernaldez/project/app/src/App.css create mode 100644 staff/angela-bernaldez/project/app/src/App.jsx create mode 100644 staff/angela-bernaldez/project/app/src/assets/react.svg create mode 100644 staff/angela-bernaldez/project/app/src/index.css create mode 100644 staff/angela-bernaldez/project/app/src/main.jsx create mode 100644 staff/angela-bernaldez/project/app/vite.config.js create mode 100644 staff/angela-bernaldez/project/services/index.js create mode 100644 staff/angela-bernaldez/project/services/package.json create mode 100644 staff/angela-bernaldez/project/services/pnpm-lock.yaml create mode 100644 staff/angela-bernaldez/project/services/test.js diff --git a/staff/angela-bernaldez/project/.gitignore b/staff/angela-bernaldez/project/.gitignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/staff/angela-bernaldez/project/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/staff/angela-bernaldez/project/api/package.json b/staff/angela-bernaldez/project/api/package.json new file mode 100644 index 000000000..658ba5989 --- /dev/null +++ b/staff/angela-bernaldez/project/api/package.json @@ -0,0 +1,18 @@ +{ + "name": "api", + "version": "1.0.0", + "type": "module", + "description": "", + "main": "index.js", + "scripts": { + "start": "node index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.21.2", + "mongoose": "^8.8.4" + } +} diff --git a/staff/angela-bernaldez/project/api/pnpm-lock.yaml b/staff/angela-bernaldez/project/api/pnpm-lock.yaml new file mode 100644 index 000000000..78c6df4fc --- /dev/null +++ b/staff/angela-bernaldez/project/api/pnpm-lock.yaml @@ -0,0 +1,737 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + express: + specifier: ^4.21.2 + version: 4.21.2 + mongoose: + specifier: ^8.8.4 + version: 8.8.4 + +packages: + + '@mongodb-js/saslprep@1.1.9': + resolution: {integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==} + + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + + '@types/whatwg-url@11.0.5': + resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bson@6.10.1: + resolution: {integrity: sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==} + engines: {node: '>=16.20.1'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.0: + resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + dunder-proto@1.0.0: + resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + engines: {node: '>= 0.4'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + kareem@2.6.3: + resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} + engines: {node: '>=12.0.0'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mongodb-connection-string-url@3.0.1: + resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==} + + mongodb@6.10.0: + resolution: {integrity: sha512-gP9vduuYWb9ZkDM546M+MP2qKVk5ZG2wPF63OvSRuUbqCR+11ZCAE1mOfllhlAG0wcoJY5yDL/rV3OmYEwXIzg==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + mongoose@8.8.4: + resolution: {integrity: sha512-yJbn695qCsqDO+xyPII29x2R7flzXhxCDv09mMZPSGllf0sm4jKw3E9s9uvQ9hjO6bL2xjU8KKowYqcY9eSTMQ==} + engines: {node: '>=16.20.1'} + + mpath@0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + + mquery@5.0.0: + resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} + engines: {node: '>=14.0.0'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + sift@17.1.3: + resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} + + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@4.1.1: + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} + engines: {node: '>=14'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-url@13.0.0: + resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} + engines: {node: '>=16'} + +snapshots: + + '@mongodb-js/saslprep@1.1.9': + dependencies: + sparse-bitfield: 3.0.3 + + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + array-flatten@1.1.1: {} + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bson@6.10.1: {} + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.0: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-define-property: 1.0.1 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + depd@2.0.0: {} + + destroy@1.2.0: {} + + dunder-proto@1.0.0: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-errors: 1.3.0 + gopd: 1.2.0 + + ee-first@1.1.1: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + escape-html@1.0.3: {} + + etag@1.8.1: {} + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + function-bind@1.1.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + + gopd@1.2.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.0 + + has-symbols@1.1.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + + kareem@2.6.3: {} + + media-typer@0.3.0: {} + + memory-pager@1.5.0: {} + + merge-descriptors@1.0.3: {} + + methods@1.1.2: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mongodb-connection-string-url@3.0.1: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 13.0.0 + + mongodb@6.10.0: + dependencies: + '@mongodb-js/saslprep': 1.1.9 + bson: 6.10.1 + mongodb-connection-string-url: 3.0.1 + + mongoose@8.8.4: + dependencies: + bson: 6.10.1 + kareem: 2.6.3 + mongodb: 6.10.0 + mpath: 0.9.0 + mquery: 5.0.0 + ms: 2.1.3 + sift: 17.1.3 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + + mpath@0.9.0: {} + + mquery@5.0.0: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + ms@2.0.0: {} + + ms@2.1.3: {} + + negotiator@0.6.3: {} + + object-inspect@1.13.3: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + parseurl@1.3.3: {} + + path-to-regexp@0.1.12: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + punycode@2.3.1: {} + + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.3 + + sift@17.1.3: {} + + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + + statuses@2.0.1: {} + + toidentifier@1.0.1: {} + + tr46@4.1.1: + dependencies: + punycode: 2.3.1 + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + unpipe@1.0.0: {} + + utils-merge@1.0.1: {} + + vary@1.1.2: {} + + webidl-conversions@7.0.0: {} + + whatwg-url@13.0.0: + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 diff --git a/staff/angela-bernaldez/project/app/.gitignore b/staff/angela-bernaldez/project/app/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/staff/angela-bernaldez/project/app/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/staff/angela-bernaldez/project/app/README.md b/staff/angela-bernaldez/project/app/README.md new file mode 100644 index 000000000..f768e33fc --- /dev/null +++ b/staff/angela-bernaldez/project/app/README.md @@ -0,0 +1,8 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh diff --git a/staff/angela-bernaldez/project/app/eslint.config.js b/staff/angela-bernaldez/project/app/eslint.config.js new file mode 100644 index 000000000..238d2e4e6 --- /dev/null +++ b/staff/angela-bernaldez/project/app/eslint.config.js @@ -0,0 +1,38 @@ +import js from '@eslint/js' +import globals from 'globals' +import react from 'eslint-plugin-react' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' + +export default [ + { ignores: ['dist'] }, + { + files: ['**/*.{js,jsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + settings: { react: { version: '18.3' } }, + plugins: { + react, + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + ...reactHooks.configs.recommended.rules, + 'react/jsx-no-target-blank': 'off', + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/staff/angela-bernaldez/project/app/index.html b/staff/angela-bernaldez/project/app/index.html new file mode 100644 index 000000000..0c589eccd --- /dev/null +++ b/staff/angela-bernaldez/project/app/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
+ + + diff --git a/staff/angela-bernaldez/project/app/package.json b/staff/angela-bernaldez/project/app/package.json new file mode 100644 index 000000000..6301485d4 --- /dev/null +++ b/staff/angela-bernaldez/project/app/package.json @@ -0,0 +1,31 @@ +{ + "name": "app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "start": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.15.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "eslint": "^9.15.0", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.12.0", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.16", + "vite": "^6.0.1" + } +} diff --git a/staff/angela-bernaldez/project/app/pnpm-lock.yaml b/staff/angela-bernaldez/project/app/pnpm-lock.yaml new file mode 100644 index 000000000..c19e64a63 --- /dev/null +++ b/staff/angela-bernaldez/project/app/pnpm-lock.yaml @@ -0,0 +1,3350 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@eslint/js': + specifier: ^9.15.0 + version: 9.16.0 + '@types/react': + specifier: ^18.3.12 + version: 18.3.14 + '@types/react-dom': + specifier: ^18.3.1 + version: 18.3.2 + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@6.0.3(jiti@1.21.6)(yaml@2.6.1)) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + eslint: + specifier: ^9.15.0 + version: 9.16.0(jiti@1.21.6) + eslint-plugin-react: + specifier: ^7.37.2 + version: 7.37.2(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-react-hooks: + specifier: ^5.0.0 + version: 5.1.0(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-react-refresh: + specifier: ^0.4.14 + version: 0.4.16(eslint@9.16.0(jiti@1.21.6)) + globals: + specifier: ^15.12.0 + version: 15.13.0 + postcss: + specifier: ^8.4.49 + version: 8.4.49 + tailwindcss: + specifier: ^3.4.16 + version: 3.4.16 + vite: + specifier: ^6.0.1 + version: 6.0.3(jiti@1.21.6)(yaml@2.6.1) + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.16.0': + resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} + cpu: [x64] + os: [win32] + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/react-dom@18.3.2': + resolution: {integrity: sha512-Fqp+rcvem9wEnGr3RY8dYNvSQ8PoLqjZ9HLgaPUOjJJD120uDyOxOjc/39M4Kddp9JQCxpGQbnhVQF0C0ncYVg==} + + '@types/react@18.3.14': + resolution: {integrity: sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + call-bind-apply-helpers@1.0.0: + resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + caniuse-lite@1.0.30001687: + resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dunder-proto@1.0.0: + resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.71: + resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + es-abstract@1.23.5: + resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.0: + resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.16: + resolution: {integrity: sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==} + peerDependencies: + eslint: '>=8.40' + + eslint-plugin-react@7.37.2: + resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.16.0: + resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.13.0: + resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.0: + resolution: {integrity: sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.0: + resolution: {integrity: sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.0: + resolution: {integrity: sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-regex@1.2.0: + resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.1.0: + resolution: {integrity: sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.0: + resolution: {integrity: sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.3: + resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + engines: {node: '>= 0.4'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + reflect.getprototypeof@1.0.7: + resolution: {integrity: sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwindcss@3.4.16: + resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} + engines: {node: '>=14.0.0'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.3: + resolution: {integrity: sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite@6.0.3: + resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + which-boxed-primitive@1.1.0: + resolution: {integrity: sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.0: + resolution: {integrity: sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.16: + resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.3': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.3': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + + '@babel/parser@7.26.3': + dependencies: + '@babel/types': 7.26.3 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@babel/traverse@7.26.4': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.3': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@esbuild/aix-ppc64@0.24.0': + optional: true + + '@esbuild/android-arm64@0.24.0': + optional: true + + '@esbuild/android-arm@0.24.0': + optional: true + + '@esbuild/android-x64@0.24.0': + optional: true + + '@esbuild/darwin-arm64@0.24.0': + optional: true + + '@esbuild/darwin-x64@0.24.0': + optional: true + + '@esbuild/freebsd-arm64@0.24.0': + optional: true + + '@esbuild/freebsd-x64@0.24.0': + optional: true + + '@esbuild/linux-arm64@0.24.0': + optional: true + + '@esbuild/linux-arm@0.24.0': + optional: true + + '@esbuild/linux-ia32@0.24.0': + optional: true + + '@esbuild/linux-loong64@0.24.0': + optional: true + + '@esbuild/linux-mips64el@0.24.0': + optional: true + + '@esbuild/linux-ppc64@0.24.0': + optional: true + + '@esbuild/linux-riscv64@0.24.0': + optional: true + + '@esbuild/linux-s390x@0.24.0': + optional: true + + '@esbuild/linux-x64@0.24.0': + optional: true + + '@esbuild/netbsd-x64@0.24.0': + optional: true + + '@esbuild/openbsd-arm64@0.24.0': + optional: true + + '@esbuild/openbsd-x64@0.24.0': + optional: true + + '@esbuild/sunos-x64@0.24.0': + optional: true + + '@esbuild/win32-arm64@0.24.0': + optional: true + + '@esbuild/win32-ia32@0.24.0': + optional: true + + '@esbuild/win32-x64@0.24.0': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@1.21.6))': + dependencies: + eslint: 9.16.0(jiti@1.21.6) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.16.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.4': + dependencies: + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/rollup-android-arm-eabi@4.28.1': + optional: true + + '@rollup/rollup-android-arm64@4.28.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.28.1': + optional: true + + '@rollup/rollup-darwin-x64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.28.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.28.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.28.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.28.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.28.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.28.1': + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.3 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.3 + + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/prop-types@15.7.14': {} + + '@types/react-dom@18.3.2': + dependencies: + '@types/react': 18.3.14 + + '@types/react@18.3.14': + dependencies: + '@types/prop-types': 15.7.14 + csstype: 3.1.3 + + '@vitejs/plugin-react@4.3.4(vite@6.0.3(jiti@1.21.6)(yaml@2.6.1))': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.0.3(jiti@1.21.6)(yaml@2.6.1) + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.8 + is-array-buffer: 3.0.4 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001687 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001687 + electron-to-chromium: 1.5.71 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + call-bind-apply-helpers@1.0.0: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-define-property: 1.0.1 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + caniuse-lite@1.0.30001687: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@4.1.1: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + didyoumean@1.2.2: {} + + dlv@1.1.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dunder-proto@1.0.0: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.71: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + es-abstract@1.23.5: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.2.0 + is-shared-array-buffer: 1.0.3 + is-string: 1.1.0 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.3 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.3 + typed-array-length: 1.0.7 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.16 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.0: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.0.7 + iterator.prototype: 1.1.3 + safe-array-concat: 1.1.2 + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.1.0 + + esbuild@0.24.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@5.1.0(eslint@9.16.0(jiti@1.21.6)): + dependencies: + eslint: 9.16.0(jiti@1.21.6) + + eslint-plugin-react-refresh@0.4.16(eslint@9.16.0(jiti@1.21.6)): + dependencies: + eslint: 9.16.0(jiti@1.21.6) + + eslint-plugin-react@7.37.2(eslint@9.16.0(jiti@1.21.6)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.0 + eslint: 9.16.0(jiti@1.21.6) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.16.0(jiti@1.21.6): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.16.0 + '@eslint/plugin-kit': 0.2.4 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.6 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + + flatted@3.3.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fraction.js@4.3.7: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@15.13.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + has-bigints@1.0.2: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.0 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + ignore@5.3.2: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.2.4 + + is-async-function@2.0.0: + dependencies: + has-tostringtag: 1.0.2 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.0: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.0: + dependencies: + call-bind: 1.0.8 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.0: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-regex@1.2.0: + dependencies: + call-bind: 1.0.8 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.8 + + is-string@1.1.0: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + + is-symbol@1.1.0: + dependencies: + call-bind: 1.0.8 + has-symbols: 1.1.0 + safe-regex-test: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.16 + + is-weakmap@2.0.2: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.8 + + is-weakset@2.0.3: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.2.4 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.3: + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.1.0 + reflect.getprototypeof: 1.0.7 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.6: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.0.2: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.8: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.18: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.3: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pirates@4.0.6: {} + + possible-typed-array-names@1.0.0: {} + + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.3 + yaml: 2.6.1 + optionalDependencies: + postcss: 8.4.49 + + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-is@16.13.1: {} + + react-refresh@0.14.2: {} + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + reflect.getprototypeof@1.0.7: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + gopd: 1.2.0 + which-builtin-type: 1.2.0 + + regexp.prototype.flags@1.5.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + resolve-from@4.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rollup@4.28.1: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.28.1 + '@rollup/rollup-android-arm64': 4.28.1 + '@rollup/rollup-darwin-arm64': 4.28.1 + '@rollup/rollup-darwin-x64': 4.28.1 + '@rollup/rollup-freebsd-arm64': 4.28.1 + '@rollup/rollup-freebsd-x64': 4.28.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 + '@rollup/rollup-linux-arm-musleabihf': 4.28.1 + '@rollup/rollup-linux-arm64-gnu': 4.28.1 + '@rollup/rollup-linux-arm64-musl': 4.28.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 + '@rollup/rollup-linux-riscv64-gnu': 4.28.1 + '@rollup/rollup-linux-s390x-gnu': 4.28.1 + '@rollup/rollup-linux-x64-gnu': 4.28.1 + '@rollup/rollup-linux-x64-musl': 4.28.1 + '@rollup/rollup-win32-arm64-msvc': 4.28.1 + '@rollup/rollup-win32-ia32-msvc': 4.28.1 + '@rollup/rollup-win32-x64-msvc': 4.28.1 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.2.4 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-regex: 1.2.0 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.1: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.3 + + signal-exit@4.1.0: {} + + source-map-js@1.2.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.3 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.5 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-json-comments@3.1.1: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwindcss@3.4.16: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-interface-checker@0.1.13: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.3: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.13 + reflect.getprototypeof: 1.0.7 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.7 + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.8 + has-bigints: 1.0.2 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.0 + + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vite@6.0.3(jiti@1.21.6)(yaml@2.6.1): + dependencies: + esbuild: 0.24.0 + postcss: 8.4.49 + rollup: 4.28.1 + optionalDependencies: + fsevents: 2.3.3 + jiti: 1.21.6 + yaml: 2.6.1 + + which-boxed-primitive@1.1.0: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.0 + is-number-object: 1.1.0 + is-string: 1.1.0 + is-symbol: 1.1.0 + + which-builtin-type@1.2.0: + dependencies: + call-bind: 1.0.8 + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.1.0 + is-generator-function: 1.0.10 + is-regex: 1.2.0 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.1.0 + which-collection: 1.0.2 + which-typed-array: 1.1.16 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + + which-typed-array@1.1.16: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + yallist@3.1.1: {} + + yaml@2.6.1: {} + + yocto-queue@0.1.0: {} diff --git a/staff/angela-bernaldez/project/app/public/vite.svg b/staff/angela-bernaldez/project/app/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/staff/angela-bernaldez/project/app/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/App.css b/staff/angela-bernaldez/project/app/src/App.css new file mode 100644 index 000000000..b9d355df2 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/staff/angela-bernaldez/project/app/src/App.jsx b/staff/angela-bernaldez/project/app/src/App.jsx new file mode 100644 index 000000000..294334c73 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/App.jsx @@ -0,0 +1,28 @@ +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + + return ( + <> +
+ + Vite logo + + + React logo + +
+

Vite + React

+

My Weather App

+
+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/staff/angela-bernaldez/project/app/src/assets/react.svg b/staff/angela-bernaldez/project/app/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/index.css b/staff/angela-bernaldez/project/app/src/index.css new file mode 100644 index 000000000..6119ad9a8 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/staff/angela-bernaldez/project/app/src/main.jsx b/staff/angela-bernaldez/project/app/src/main.jsx new file mode 100644 index 000000000..b9a1a6dea --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/staff/angela-bernaldez/project/app/vite.config.js b/staff/angela-bernaldez/project/app/vite.config.js new file mode 100644 index 000000000..8b0f57b91 --- /dev/null +++ b/staff/angela-bernaldez/project/app/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/staff/angela-bernaldez/project/services/index.js b/staff/angela-bernaldez/project/services/index.js new file mode 100644 index 000000000..8216cd444 --- /dev/null +++ b/staff/angela-bernaldez/project/services/index.js @@ -0,0 +1,60 @@ +import { fetchWeatherApi } from 'openmeteo' + +// URL for the OpenMeteo weather API +const url = "https://api.open-meteo.com/v1/forecast" + +// Function to fetch weather data from the API (assuming a `fetchWeatherApi` implementation) + +async function getWeatherData(url, params) { + const responses = await fetchWeatherApi(url, params) + + // Function to create time ranges (assuming Array.from is available) + function range(start, stop, step) { + return Array.from({ length: Math.ceil((stop - start) / step) }, (_, i) => start + i * step); + } + + // Assuming only the first location needs processing (adjust for multiple locations) + const response = responses[0] + + // Extract timezone and location information + const utcOffsetSeconds = response.utcOffsetSeconds() + const timezone = response.timezone() + const timezoneAbbreviation = response.timezoneAbbreviation() + const latitude = response.latitude() + const longitude = response.longitude() + + console.log('latitude', latitude) + console.log('longitude', longitude) + + + // Extract current weather data (assuming response structure and `current` method are valid) + const current = response.current() + const hourly = response.hourly() + + console.log(hourly) + + // Ensure compatibility with JavaScript variable naming and indexing + const weatherData = { + current: { + time: new Date((Number(current.time()) + (utcOffsetSeconds)) * 1000), + temperature2m: current.variables[0].value, // Access variables directly by index + precipitation: current.variables[1].value, // Access variables directly by index + }, + }; + + return weatherData +} + + +// Example usage: +(async () => { + const params = { + "latitude": 40.4165, + "longitude": -3.7026, + "current": ["temperature_2m", "precipitation"], + "forecast_days": 14 + }; + const weatherData = await getWeatherData(url, params) + console.log(weatherData); +})() + diff --git a/staff/angela-bernaldez/project/services/package.json b/staff/angela-bernaldez/project/services/package.json new file mode 100644 index 000000000..cba7688bb --- /dev/null +++ b/staff/angela-bernaldez/project/services/package.json @@ -0,0 +1,17 @@ +{ + "name": "services", + "version": "1.0.0", + "type": "module", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^1.7.9", + "recharts": "^2.14.1" + } +} diff --git a/staff/angela-bernaldez/project/services/pnpm-lock.yaml b/staff/angela-bernaldez/project/services/pnpm-lock.yaml new file mode 100644 index 000000000..63dabb0ce --- /dev/null +++ b/staff/angela-bernaldez/project/services/pnpm-lock.yaml @@ -0,0 +1,427 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + axios: + specifier: ^1.7.9 + version: 1.7.9 + recharts: + specifier: ^2.14.1 + version: 2.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + +packages: + + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + + '@types/d3-array@3.2.1': + resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.0': + resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} + + '@types/d3-scale@4.0.8': + resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} + + '@types/d3-shape@3.1.6': + resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + fast-equals@5.0.1: + resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + engines: {node: '>=6.0.0'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-smooth@4.0.3: + resolution: {integrity: sha512-PyxIrra8WZWrMRFcCiJsZ+JqFaxEINAt+v/w++wQKQlmO99Eh3+JTLeKApdTsLX2roBdWYXqPsaS8sO4UmdzIg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + recharts-scale@0.4.5: + resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} + + recharts@2.14.1: + resolution: {integrity: sha512-xtWulflkA+/xu4/QClBdtZYN30dbvTHjxjkh5XTMrH/CQ3WGDDPHHa/LLKCbgoqz0z3UaSH2/blV1i6VNMeh1g==} + engines: {node: '>=14'} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + victory-vendor@36.9.2: + resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} + +snapshots: + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@types/d3-array@3.2.1': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.0': {} + + '@types/d3-scale@4.0.8': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-shape@3.1.6': + dependencies: + '@types/d3-path': 3.1.0 + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + asynckit@0.4.0: {} + + axios@1.7.9: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + clsx@2.1.1: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + csstype@3.1.3: {} + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-color@3.1.0: {} + + d3-ease@3.0.1: {} + + d3-format@3.1.0: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@3.1.0: {} + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + decimal.js-light@2.5.1: {} + + delayed-stream@1.0.0: {} + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.26.0 + csstype: 3.1.3 + + eventemitter3@4.0.7: {} + + fast-equals@5.0.1: {} + + follow-redirects@1.15.9: {} + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + internmap@2.0.3: {} + + js-tokens@4.0.0: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + object-assign@4.1.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proxy-from-env@1.1.0: {} + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-is@16.13.1: {} + + react-is@18.3.1: {} + + react-smooth@4.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + fast-equals: 5.0.1 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + recharts-scale@0.4.5: + dependencies: + decimal.js-light: 2.5.1 + + recharts@2.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + clsx: 2.1.1 + eventemitter3: 4.0.7 + lodash: 4.17.21 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-is: 18.3.1 + react-smooth: 4.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + recharts-scale: 0.4.5 + tiny-invariant: 1.3.3 + victory-vendor: 36.9.2 + + regenerator-runtime@0.14.1: {} + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + tiny-invariant@1.3.3: {} + + victory-vendor@36.9.2: + dependencies: + '@types/d3-array': 3.2.1 + '@types/d3-ease': 3.0.2 + '@types/d3-interpolate': 3.0.4 + '@types/d3-scale': 4.0.8 + '@types/d3-shape': 3.1.6 + '@types/d3-time': 3.0.4 + '@types/d3-timer': 3.0.2 + d3-array: 3.2.4 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-scale: 4.0.2 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-timer: 3.0.1 diff --git a/staff/angela-bernaldez/project/services/test.js b/staff/angela-bernaldez/project/services/test.js new file mode 100644 index 000000000..6b709198d --- /dev/null +++ b/staff/angela-bernaldez/project/services/test.js @@ -0,0 +1,63 @@ +import axios from 'axios' + +// vamos a usar la libreria axios para hacer llamadas a una api externa + +// JSON Return Object +// On success a JSON object will be returned. + + +function fetchWeatherData(longitude, latitude, variables) { + const url = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=temperature_2m,precipitation` + axios.get(url) + .then(response => { + const data = response.data + if (typeof response.data !== 'object') { + console.error('La respuesta de la API no es un objeto JSON'); + return + } + console.log(data) + }) + .catch((error) => { + console.log('Error fetching weather data:', error) + }) +} + +async function fetchCityCoordinates(city) { + const url = `https://geocoding-api.open-meteo.com/v1/search?name=${city}&count=1&language=en&format=json` + return axios.get(url) + .then(response => { + const data = response.data.results[0] + const { longitude, latitude } = data + // add validators + console.log('Coordinates obtained successfully') + // console.log('longitude', longitude) + // console.log('latitude', latitude) + return { longitude, latitude } + }) + .catch((error) => { + console.log('Error fetching city coordinates:', error) + }) +} + +// try to call the function +// it is working now!!!! +//fetchWeatherData(40.4165, -3.7026) + +fetchCityCoordinates('Ciudad Rodrigo') + .then(coordinates => { + if (coordinates) { + console.log('Latitude:', coordinates.latitude) + console.log('Longitude:', coordinates.longitude) + fetchWeatherData(coordinates.longitude, coordinates.latitude); + } else { + console.log('No se pudieron obtener las coordenadas') + } + }); + +//fetchWeatherData(lat, lon) + +// IDEAS: +/* +- SHOW COORDINATES OF THE CITY IN THE FRONT +- SHOW ALTITUDE OF THE CITY IN THE FRONT +*/ \ No newline at end of file From 2374b935cf4389916f83219d08b46e095cb79959 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Tue, 10 Dec 2024 18:22:18 +0000 Subject: [PATCH 02/45] add landing and login page, loginform, errors and more #251 --- .../angela-bernaldez/project/app/package.json | 8 +- .../project/app/pnpm-lock.yaml | 1218 ++++++++++++++++- .../angela-bernaldez/project/app/src/App.css | 21 - .../angela-bernaldez/project/app/src/App.jsx | 30 +- .../app/src/components/FormErrorsSection.jsx | 31 + .../project/app/src/components/LogInForm.jsx | 138 ++ .../project/app/src/components/SignUpForm.jsx | 0 .../project/app/src/components/icons.jsx | 124 ++ .../project/app/src/components/index.jsx | 5 + .../project/app/src/locals/en.json | 67 + .../angela-bernaldez/project/app/src/main.jsx | 7 +- .../project/app/src/pages/Landing.jsx | 33 + .../project/app/src/pages/LogIn.jsx | 19 + .../project/app/src/pages/SignUp.jsx | 7 + .../project/app/src/pages/index.jsx | 7 + .../angela-bernaldez/project/common/errors.js | 129 ++ .../angela-bernaldez/project/common/index.js | 1 + .../project/common/package.json | 12 + .../project/common/pnpm-lock.yaml | 9 + .../angela-bernaldez/project/services/test.js | 16 +- 20 files changed, 1829 insertions(+), 53 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/components/FormErrorsSection.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/LogInForm.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/index.jsx create mode 100644 staff/angela-bernaldez/project/app/src/locals/en.json create mode 100644 staff/angela-bernaldez/project/app/src/pages/Landing.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/LogIn.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/SignUp.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/index.jsx create mode 100644 staff/angela-bernaldez/project/common/errors.js create mode 100644 staff/angela-bernaldez/project/common/index.js create mode 100644 staff/angela-bernaldez/project/common/package.json create mode 100644 staff/angela-bernaldez/project/common/pnpm-lock.yaml diff --git a/staff/angela-bernaldez/project/app/package.json b/staff/angela-bernaldez/project/app/package.json index 6301485d4..cb6d4aac4 100644 --- a/staff/angela-bernaldez/project/app/package.json +++ b/staff/angela-bernaldez/project/app/package.json @@ -10,8 +10,12 @@ "preview": "vite preview" }, "dependencies": { + "classnames": "^2.5.1", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "react-router-dom": "^7.0.2", + "common": "file:../common", + "tailwind": "^4.0.0" }, "devDependencies": { "@eslint/js": "^9.15.0", @@ -25,7 +29,7 @@ "eslint-plugin-react-refresh": "^0.4.14", "globals": "^15.12.0", "postcss": "^8.4.49", - "tailwindcss": "^3.4.16", + "tailwindcss": "^3.4.12", "vite": "^6.0.1" } } diff --git a/staff/angela-bernaldez/project/app/pnpm-lock.yaml b/staff/angela-bernaldez/project/app/pnpm-lock.yaml index c19e64a63..ebe88dbbc 100644 --- a/staff/angela-bernaldez/project/app/pnpm-lock.yaml +++ b/staff/angela-bernaldez/project/app/pnpm-lock.yaml @@ -8,12 +8,24 @@ importers: .: dependencies: + classnames: + specifier: ^2.5.1 + version: 2.5.1 + common: + specifier: file:../common + version: file:../common react: specifier: ^18.3.1 version: 18.3.1 react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: ^7.0.2 + version: 7.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tailwind: + specifier: ^4.0.0 + version: 4.0.0 devDependencies: '@eslint/js': specifier: ^9.15.0 @@ -49,8 +61,8 @@ importers: specifier: ^8.4.49 version: 8.4.49 tailwindcss: - specifier: ^3.4.16 - version: 3.4.16 + specifier: ^3.4.12 + version: 3.4.12 vite: specifier: ^6.0.1 version: 6.0.3(jiti@1.21.6)(yaml@2.6.1) @@ -132,6 +144,15 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@7.1.2': + resolution: {integrity: sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==} + + '@babel/runtime@7.2.0': + resolution: {integrity: sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==} + + '@babel/runtime@7.3.4': + resolution: {integrity: sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==} + '@babel/template@7.25.9': resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} @@ -487,6 +508,9 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -508,6 +532,10 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -518,9 +546,16 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ajv@6.10.0: + resolution: {integrity: sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==} + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + amqplib@0.5.2: + resolution: {integrity: sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==} + engines: {node: '>=0.8 <=9'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -529,6 +564,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -544,6 +583,10 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + app-root-path@2.1.0: + resolution: {integrity: sha512-z5BqVjscbjmJBybKlICogJR2jCr2q/Ixu7Pvui5D4y97i7FLsJlvEG9XOR/KJRlkxxZz7UaaS2TMwQh1dRJ2dA==} + engines: {node: '>= 4.0.0'} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -554,6 +597,9 @@ packages: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-includes@3.1.8: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} @@ -570,6 +616,10 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} + array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -578,6 +628,15 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} + asn1@0.2.3: + resolution: {integrity: sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w==} + + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + async-retry@1.2.3: + resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==} + autoprefixer@10.4.20: resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} @@ -589,13 +648,31 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + babel-runtime@6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bitsyntax@0.0.4: + resolution: {integrity: sha512-Pav3HSZXD2NLQOWfJldY3bpJLt8+HS2nUo5Z1bLLmHg2vCE/cM1qfEvNjlYo7GgYQPneNr715Bh42i01ZHZPvw==} + engines: {node: '>=0.6'} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + body-parser@1.18.3: + resolution: {integrity: sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==} + engines: {node: '>= 0.8'} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -611,6 +688,16 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-more-ints@0.0.2: + resolution: {integrity: sha512-PDgX2QJgUc5+Jb2xAoBFP5MxhtVUmZHR33ak+m/SDxRdCrbnX1BggRIaxiW7ImwfmO4iJeCQKN18ToSXWGjYkA==} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + call-bind-apply-helpers@1.0.0: resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} engines: {node: '>= 0.4'} @@ -630,6 +717,10 @@ packages: caniuse-lite@1.0.30001687: resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} + chalk@2.4.1: + resolution: {integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -638,10 +729,19 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -649,16 +749,69 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commands-events@1.0.4: + resolution: {integrity: sha512-HdP/+1Anoc7z+6L2h7nd4Imz54+LW+BjMGt30riBZrZ3ZeP/8el93wD8Jj8ltAaqVslqNgjX6qlhSBJwuDSmpg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + common@file:../common: + resolution: {directory: ../common, type: directory} + + comparejs@1.0.0: + resolution: {integrity: sha512-Ue/Zd9aOucHzHXwaCe4yeHR7jypp7TKrIBZ5yls35nPNiVXlW14npmNVKM1ZaLlQTKZ6/4ewA//gYKHHIwCpOw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.3: + resolution: {integrity: sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==} + engines: {node: '>= 0.8.0'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + + content-type@1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.3.1: + resolution: {integrity: sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==} + engines: {node: '>= 0.6'} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crypto2@2.0.0: + resolution: {integrity: sha512-jdXdAgdILldLOF53md25FiQ6ybj2kUFTiRjs7msKTUoZrzgT/M1FPX5dYGJjbbwFls+RJIiZxNTC02DE/8y0ZQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -679,6 +832,18 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} + datasette@1.0.1: + resolution: {integrity: sha512-aJdlCBToEJUP4M57r67r4V6tltwGKa3qetnjpBtXYIlqbX9tM9jsoDMxb4xd9AGjpp3282oHRmqI5Z8TVAU0Mg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -699,6 +864,13 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + destroy@1.0.4: + resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -709,6 +881,10 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + draht@1.0.1: + resolution: {integrity: sha512-yNNHL864dniNmIE9ZKD++mKypiAUAvVZtyV0QrbXH/ak3ebzFqo5xsmRBRqV8pZVhImOSBiyq500Wcmrf44zAg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dunder-proto@1.0.0: resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} engines: {node: '>= 0.4'} @@ -716,6 +892,12 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.71: resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} @@ -725,10 +907,17 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + es-abstract@1.23.5: resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} engines: {node: '>= 0.4'} + es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -765,6 +954,13 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -828,6 +1024,20 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter2@5.0.1: + resolution: {integrity: sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==} + + express@4.16.4: + resolution: {integrity: sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==} + engines: {node: '>= 0.10.0'} + + fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -852,10 +1062,22 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.1.1: + resolution: {integrity: sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==} + engines: {node: '>= 0.8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + flaschenpost@1.1.3: + resolution: {integrity: sha512-1VAYPvDsVBGFJyUrOa/6clnJwZYC3qVq9nJLcypy6lvaaNbo1wOQiH8HQ+4Fw/k51pVG7JHzSf5epb8lmIW86g==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + hasBin: true + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -870,9 +1092,21 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} + formats@1.0.0: + resolution: {integrity: sha512-For0Y8egwEK96JgJo4NONErPhtl7H2QzeB2NYGmzeGeJ8a1JZqPgLYOtM3oJRCYhmgsdDFd6KGRYyfe37XY4Yg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -896,6 +1130,9 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -935,6 +1172,10 @@ packages: has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -954,10 +1195,22 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hase@2.0.0: + resolution: {integrity: sha512-L83pBR/oZvQQNjv4kw9aUpTqBxERPiY7B42jsmkt1VDeUaRVhYkEIKzkCqrppjtxHe2EZqzZJzuhMXsWsxYIsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + iconv-lite@0.4.23: + resolution: {integrity: sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -970,10 +1223,20 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -1046,10 +1309,18 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + is-regex@1.2.0: resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} engines: {node: '>= 0.4'} + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -1081,6 +1352,9 @@ packages: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} engines: {node: '>= 0.4'} + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -1113,6 +1387,10 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-lines@1.0.0: + resolution: {integrity: sha512-ytuLZb4RBQb3bTRsG/QBenyIo5oHLpjeCVph3s2NnoAsZE9K6h+uR+OWpEOWV1UeHdX63tYctGppBpGAc+JNMA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -1124,10 +1402,20 @@ packages: engines: {node: '>=6'} hasBin: true + jsonwebtoken@8.5.0: + resolution: {integrity: sha512-IqEycp0znWHNA11TpYi77bVgyBO/pGESDh7Ajhas+u0ttkGkKYIIAjniL4Bw5+oVejVF+SYkaI7XKfwCCyeTuA==} + engines: {node: '>=4', npm: '>=1.4.28'} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -1135,10 +1423,18 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} + limes@2.0.0: + resolution: {integrity: sha512-evWD0pnTgPX7QueaSoJl5JBUL30T1ZVzo34ke97tIKmeagqhBTYK/JkKL0vtG3MpNApw8ZY9TlbybfwEz9knBA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -1146,9 +1442,36 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash@4.17.11: + resolution: {integrity: sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==} + + lodash@4.17.5: + resolution: {integrity: sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -1159,14 +1482,45 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lusca@1.6.1: + resolution: {integrity: sha512-+JzvUMH/rsE/4XfHdDOl70bip0beRcHSviYATQM0vtls59uVtdn1JMu4iD7ZShBpAmFG8EnaA+PrYG9sECMIOQ==} + engines: {node: '>=0.8.x'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.4.1: + resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==} + hasBin: true + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1178,6 +1532,16 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + moment@2.22.2: + resolution: {integrity: sha512-LRvkBHaJGnrcWvqsElsOhHCzj8mU39wLx5pQ0pc6s153GynCTsPdGdqsVNKAQD9sKnWj11iF7TZx9fpLwdD3fw==} + + morgan@1.9.1: + resolution: {integrity: sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==} + engines: {node: '>= 0.8.0'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1192,9 +1556,23 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + nocache@2.0.0: + resolution: {integrity: sha512-YdKcy2x0dDwOh+8BEuHvA+mnOKAhmMQDgKBOCUGaLpewdmsRYguYZSom3yA+/OrE61O/q+NMQANnun65xpI1Hw==} + node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-rsa@0.4.2: + resolution: {integrity: sha512-Bvso6Zi9LY4otIZefYrscsUpo2mUpiAVIEmSZV2q41sP8tHZoert3Yu6zv4f/RXJqMNZQKCtnhDugIuCma23YA==} + + node-statsd@0.1.1: + resolution: {integrity: sha512-QDf6R8VXF56QVe1boek8an/Rb3rSNaxoFWb7Elpsv2m1+Noua1yy0F1FpKpK5VluF8oymWM4w764A4KsYL4pDg==} + engines: {node: '>=0.1.97'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -1231,10 +1609,22 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} + object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} + object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1254,6 +1644,14 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + partof@1.0.0: + resolution: {integrity: sha512-+TXdhKCySpJDynCxgAPoGVyAkiK3QPusQ63/BdU5t68QcYzyU6zkP/T7F3gkMQBVUYqdWEADKa6Kx5zg8QIKrg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1269,6 +1667,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1333,16 +1734,36 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + processenv@1.1.0: + resolution: {integrity: sha512-SymqIsn8GjEUy8nG7HiyEjgbfk1xFosRIakUX1NHLpriq3vVpKniGrr9RdMWCaGYWByIovbRt2f/WvmP/IOApQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qs@6.5.2: + resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} + engines: {node: '>=0.6'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.3.3: + resolution: {integrity: sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==} + engines: {node: '>= 0.8'} + react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -1355,6 +1776,23 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} + react-router-dom@7.0.2: + resolution: {integrity: sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.0.2: + resolution: {integrity: sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -1362,6 +1800,13 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -1370,6 +1815,12 @@ packages: resolution: {integrity: sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==} engines: {node: '>= 0.4'} + regenerator-runtime@0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + + regenerator-runtime@0.12.1: + resolution: {integrity: sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==} + regexp.prototype.flags@1.5.3: resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} @@ -1386,6 +1837,10 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -1402,17 +1857,41 @@ packages: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + send@0.16.2: + resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.13.2: + resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==} + engines: {node: '>= 0.8.0'} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -1421,6 +1900,12 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + sha-1@0.1.1: + resolution: {integrity: sha512-dexizf3hB7d4Jq6Cd0d/NYQiqgEqIfZIpuMfwPfvSb6h06DZKmHyUe55jYwpHC12R42wpqXO6ouhiBpRzIcD/g==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1441,6 +1926,24 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + split2@3.0.0: + resolution: {integrity: sha512-Cp7G+nUfKJyHCrAI8kze3Q00PFGEG1pMgrAlTFlDbn+GW24evSZHJuMl+iUJx1w/NTRDeBiTgvwnf6YOt94FMw==} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + statuses@1.4.0: + resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==} + engines: {node: '>= 0.6'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + stethoskop@1.0.0: + resolution: {integrity: sha512-4JnZ+UmTs9SFfDjSHFlD/EoXcb1bfwntkt4h1ipNGrpxtRzmHTxOmdquCJvIrVu608Um7a09cGX0ZSOSllWJNQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1467,6 +1970,16 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1484,6 +1997,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1492,8 +2009,12 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@3.4.16: - resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} + tailwind@4.0.0: + resolution: {integrity: sha512-LlUNoD/5maFG1h5kQ6/hXfFPdcnYw+1Z7z+kUD/W/E71CUMwcnrskxiBM8c3G8wmPsD1VvCuqGYMHviI8+yrmg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + tailwindcss@3.4.12: + resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} engines: {node: '>=14.0.0'} hasBin: true @@ -1504,6 +2025,10 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + timer2@1.0.0: + resolution: {integrity: sha512-UOZql+P2ET0da+B7V3/RImN3IhC5ghb+9cpecfUhmYGIm0z73dDr3A781nBLnFYmRzeT1AmoT4w9Lgr8n7n7xg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1511,10 +2036,21 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -1534,6 +2070,14 @@ packages: unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + untildify@3.0.3: + resolution: {integrity: sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==} + engines: {node: '>=4'} + update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -1546,6 +2090,34 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util.promisify@1.0.0: + resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@3.3.2: + resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + uuidv4@2.0.0: + resolution: {integrity: sha512-sAUlwUVepcVk6bwnaW/oi6LCwMdueako5QQzRr90ioAVVcms6p1mV0PaSxK8gyAC4CRvKddsk217uUpZUbKd2Q==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + uuidv4@3.0.1: + resolution: {integrity: sha512-PPzksdWRl2a5C9hrs3OOYrArTeyoR0ftJ3jtOy+BnVHkT2UlrrzPNt9nTdiGuxmQItHM/AcTXahwZZC57Njojg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + varname@2.0.3: + resolution: {integrity: sha512-+DofT9mJAUALhnr9ipZ5Z2icwaEZ7DAajOZT4ffXy3MQqnXtG3b7atItLQEJCkfcJTOf9WcsywneOEibD4eqJg==} + engines: {node: '>=0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + vite@6.0.3: resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -1619,6 +2191,17 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + ws@6.2.0: + resolution: {integrity: sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -1727,6 +2310,18 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/runtime@7.1.2': + dependencies: + regenerator-runtime: 0.12.1 + + '@babel/runtime@7.2.0': + dependencies: + regenerator-runtime: 0.12.1 + + '@babel/runtime@7.3.4': + dependencies: + regenerator-runtime: 0.12.1 + '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 @@ -1995,6 +2590,8 @@ snapshots: dependencies: '@babel/types': 7.26.3 + '@types/cookie@0.6.0': {} + '@types/estree@1.0.6': {} '@types/json-schema@7.0.15': {} @@ -2021,12 +2618,24 @@ snapshots: transitivePeerDependencies: - supports-color + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 acorn@8.14.0: {} + ajv@6.10.0: + dependencies: + fast-deep-equal: 2.0.1 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -2034,10 +2643,22 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + amqplib@0.5.2: + dependencies: + bitsyntax: 0.0.4 + bluebird: 3.7.2 + buffer-more-ints: 0.0.2 + readable-stream: 1.1.14 + safe-buffer: 5.2.1 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -2051,6 +2672,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + app-root-path@2.1.0: {} + arg@5.0.2: {} argparse@2.0.1: {} @@ -2060,6 +2683,8 @@ snapshots: call-bind: 1.0.8 is-array-buffer: 3.0.4 + array-flatten@1.1.1: {} + array-includes@3.1.8: dependencies: call-bind: 1.0.8 @@ -2092,6 +2717,16 @@ snapshots: es-abstract: 1.23.5 es-shim-unscopables: 1.0.2 + array.prototype.reduce@1.0.7: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + is-string: 1.1.0 + array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 @@ -2111,6 +2746,14 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + asn1@0.2.3: {} + + async-limiter@1.0.1: {} + + async-retry@1.2.3: + dependencies: + retry: 0.12.0 + autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.2 @@ -2125,10 +2768,40 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 + babel-runtime@6.26.0: + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + balanced-match@1.0.2: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + binary-extensions@2.3.0: {} + bitsyntax@0.0.4: + dependencies: + buffer-more-ints: 0.0.2 + + bluebird@3.7.2: {} + + body-parser@1.18.3: + dependencies: + bytes: 3.0.0 + content-type: 1.0.4 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.6.3 + iconv-lite: 0.4.23 + on-finished: 2.3.0 + qs: 6.5.2 + raw-body: 2.3.3 + type-is: 1.6.18 + transitivePeerDependencies: + - supports-color + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -2149,6 +2822,12 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) + buffer-equal-constant-time@1.0.1: {} + + buffer-more-ints@0.0.2: {} + + bytes@3.0.0: {} + call-bind-apply-helpers@1.0.0: dependencies: es-errors: 1.3.0 @@ -2167,6 +2846,12 @@ snapshots: caniuse-lite@1.0.30001687: {} + chalk@2.4.1: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -2184,24 +2869,83 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + classnames@2.5.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} commander@4.1.1: {} + commands-events@1.0.4: + dependencies: + '@babel/runtime': 7.2.0 + formats: 1.0.0 + uuidv4: 2.0.0 + + common@file:../common: {} + + comparejs@1.0.0: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.53.0 + + compression@1.7.3: + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + concat-map@0.0.1: {} + content-disposition@0.5.2: {} + + content-type@1.0.4: {} + convert-source-map@2.0.0: {} + cookie-signature@1.0.6: {} + + cookie@0.3.1: {} + + cookie@1.0.2: {} + + core-js@2.6.12: {} + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + crypto2@2.0.0: + dependencies: + babel-runtime: 6.26.0 + node-rsa: 0.4.2 + util.promisify: 1.0.0 + cssesc@3.0.0: {} csstype@3.1.3: {} @@ -2224,6 +2968,16 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 + datasette@1.0.1: + dependencies: + comparejs: 1.0.0 + eventemitter2: 5.0.1 + lodash: 4.17.5 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + debug@4.4.0: dependencies: ms: 2.1.3 @@ -2242,6 +2996,10 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + depd@1.1.2: {} + + destroy@1.0.4: {} + didyoumean@1.2.2: {} dlv@1.1.3: {} @@ -2250,6 +3008,10 @@ snapshots: dependencies: esutils: 2.0.3 + draht@1.0.1: + dependencies: + eventemitter2: 5.0.1 + dunder-proto@1.0.0: dependencies: call-bind-apply-helpers: 1.0.0 @@ -2258,12 +3020,20 @@ snapshots: eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + electron-to-chromium@1.5.71: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + encodeurl@1.0.2: {} + es-abstract@1.23.5: dependencies: array-buffer-byte-length: 1.0.1 @@ -2313,6 +3083,8 @@ snapshots: unbox-primitive: 1.0.2 which-typed-array: 1.1.16 + es-array-method-boxes-properly@1.0.0: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -2384,6 +3156,10 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + escape-string-regexp@4.0.0: {} eslint-plugin-react-hooks@5.1.0(eslint@9.16.0(jiti@1.21.6)): @@ -2484,6 +3260,47 @@ snapshots: esutils@2.0.3: {} + etag@1.8.1: {} + + eventemitter2@5.0.1: {} + + express@4.16.4: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.18.3 + content-disposition: 0.5.2 + content-type: 1.0.4 + cookie: 0.3.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 1.1.2 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.1.1 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.5.2 + range-parser: 1.2.1 + safe-buffer: 5.1.2 + send: 0.16.2 + serve-static: 1.13.2 + setprototypeof: 1.1.0 + statuses: 1.4.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -2510,11 +3327,42 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@1.1.1: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.4.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-root@1.1.0: {} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + flaschenpost@1.1.3: + dependencies: + '@babel/runtime': 7.2.0 + app-root-path: 2.1.0 + babel-runtime: 6.26.0 + chalk: 2.4.1 + find-root: 1.1.0 + lodash: 4.17.11 + moment: 2.22.2 + processenv: 1.1.0 + split2: 3.0.0 + stack-trace: 0.0.10 + stringify-object: 3.3.0 + untildify: 3.0.3 + util.promisify: 1.0.0 + varname: 2.0.3 + flat-cache@4.0.1: dependencies: flatted: 3.3.2 @@ -2531,8 +3379,14 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + formats@1.0.0: {} + + forwarded@0.2.0: {} + fraction.js@4.3.7: {} + fresh@0.5.2: {} + fsevents@2.3.3: optional: true @@ -2557,6 +3411,8 @@ snapshots: has-symbols: 1.1.0 hasown: 2.0.2 + get-own-enumerable-property-symbols@3.0.2: {} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.8 @@ -2595,6 +3451,8 @@ snapshots: has-bigints@1.0.2: {} + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -2611,10 +3469,26 @@ snapshots: dependencies: has-symbols: 1.1.0 + hase@2.0.0: + dependencies: + '@babel/runtime': 7.1.2 + amqplib: 0.5.2 + hasown@2.0.2: dependencies: function-bind: 1.1.2 + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + + iconv-lite@0.4.23: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} import-fresh@3.3.0: @@ -2624,12 +3498,18 @@ snapshots: imurmurhash@0.1.4: {} + inherits@2.0.3: {} + + inherits@2.0.4: {} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 + ipaddr.js@1.9.1: {} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.8 @@ -2693,6 +3573,8 @@ snapshots: is-number@7.0.0: {} + is-obj@1.0.1: {} + is-regex@1.2.0: dependencies: call-bind: 1.0.8 @@ -2700,6 +3582,8 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + is-regexp@1.0.0: {} + is-set@2.0.3: {} is-shared-array-buffer@1.0.3: @@ -2732,6 +3616,8 @@ snapshots: call-bind: 1.0.8 get-intrinsic: 1.2.4 + isarray@0.0.1: {} + isarray@2.0.5: {} isexe@2.0.0: {} @@ -2762,12 +3648,29 @@ snapshots: json-buffer@3.0.1: {} + json-lines@1.0.0: + dependencies: + timer2: 1.0.0 + json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} + jsonwebtoken@8.5.0: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.2 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -2775,6 +3678,17 @@ snapshots: object.assign: 4.1.5 object.values: 1.2.0 + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -2784,16 +3698,41 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lilconfig@2.1.0: {} + lilconfig@3.1.3: {} + limes@2.0.0: + dependencies: + '@babel/runtime': 7.3.4 + jsonwebtoken: 8.5.0 + lines-and-columns@1.2.4: {} locate-path@6.0.0: dependencies: p-locate: 5.0.0 + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + lodash.merge@4.6.2: {} + lodash.once@4.1.1: {} + + lodash@4.17.11: {} + + lodash@4.17.5: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -2804,13 +3743,33 @@ snapshots: dependencies: yallist: 3.1.1 + lusca@1.6.1: + dependencies: + tsscmp: 1.0.6 + + media-typer@0.3.0: {} + + merge-descriptors@1.0.1: {} + merge2@1.4.1: {} + methods@1.1.2: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-db@1.53.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.4.1: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -2821,6 +3780,20 @@ snapshots: minipass@7.1.2: {} + moment@2.22.2: {} + + morgan@1.9.1: + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 1.1.2 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color + + ms@2.0.0: {} + ms@2.1.3: {} mz@2.7.0: @@ -2833,8 +3806,18 @@ snapshots: natural-compare@1.4.0: {} + negotiator@0.6.3: {} + + nocache@2.0.0: {} + node-releases@2.0.18: {} + node-rsa@0.4.2: + dependencies: + asn1: 0.2.3 + + node-statsd@0.1.1: {} + normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -2867,12 +3850,28 @@ snapshots: es-abstract: 1.23.5 es-object-atoms: 1.0.0 + object.getownpropertydescriptors@2.1.8: + dependencies: + array.prototype.reduce: 1.0.7 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + gopd: 1.2.0 + safe-array-concat: 1.1.2 + object.values@1.2.0: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + + on-headers@1.0.2: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -2896,6 +3895,10 @@ snapshots: dependencies: callsites: 3.1.0 + parseurl@1.3.3: {} + + partof@1.0.0: {} + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -2907,6 +3910,8 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-to-regexp@0.1.7: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -2956,16 +3961,36 @@ snapshots: prelude-ls@1.2.1: {} + processenv@1.1.0: + dependencies: + babel-runtime: 6.26.0 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + punycode@2.3.1: {} + qs@6.5.2: {} + queue-microtask@1.2.3: {} + range-parser@1.2.1: {} + + raw-body@2.3.3: + dependencies: + bytes: 3.0.0 + http-errors: 1.6.3 + iconv-lite: 0.4.23 + unpipe: 1.0.0 + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -2976,6 +4001,22 @@ snapshots: react-refresh@0.14.2: {} + react-router-dom@7.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 7.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + + react-router@7.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@types/cookie': 0.6.0 + cookie: 1.0.2 + react: 18.3.1 + set-cookie-parser: 2.7.1 + turbo-stream: 2.4.0 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -2984,6 +4025,19 @@ snapshots: dependencies: pify: 2.3.0 + readable-stream@1.1.14: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -2998,6 +4052,10 @@ snapshots: gopd: 1.2.0 which-builtin-type: 1.2.0 + regenerator-runtime@0.11.1: {} + + regenerator-runtime@0.12.1: {} + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.8 @@ -3019,6 +4077,8 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + retry@0.12.0: {} + reusify@1.0.4: {} rollup@4.28.1: @@ -3057,18 +4117,55 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.8 es-errors: 1.3.0 is-regex: 1.2.0 + safer-buffer@2.1.2: {} + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 + semver@5.7.2: {} + semver@6.3.1: {} + send@0.16.2: + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.6.3 + mime: 1.4.1 + ms: 2.0.0 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.4.0 + transitivePeerDependencies: + - supports-color + + serve-static@1.13.2: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.16.2 + transitivePeerDependencies: + - supports-color + + set-cookie-parser@2.7.1: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -3085,6 +4182,10 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + setprototypeof@1.1.0: {} + + sha-1@0.1.1: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -3102,6 +4203,20 @@ snapshots: source-map-js@1.2.1: {} + split2@3.0.0: + dependencies: + readable-stream: 3.6.2 + + stack-trace@0.0.10: {} + + statuses@1.4.0: {} + + statuses@1.5.0: {} + + stethoskop@1.0.0: + dependencies: + node-statsd: 0.1.1 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -3153,6 +4268,18 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + string_decoder@0.10.31: {} + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -3173,13 +4300,51 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@3.4.16: + tailwind@4.0.0: + dependencies: + '@babel/runtime': 7.3.4 + ajv: 6.10.0 + app-root-path: 2.1.0 + async-retry: 1.2.3 + body-parser: 1.18.3 + commands-events: 1.0.4 + compression: 1.7.3 + content-type: 1.0.4 + cors: 2.8.5 + crypto2: 2.0.0 + datasette: 1.0.1 + draht: 1.0.1 + express: 4.16.4 + flaschenpost: 1.1.3 + hase: 2.0.0 + json-lines: 1.0.0 + limes: 2.0.0 + lodash: 4.17.11 + lusca: 1.6.1 + morgan: 1.9.1 + nocache: 2.0.0 + partof: 1.0.0 + processenv: 1.1.0 + stethoskop: 1.0.0 + timer2: 1.0.0 + uuidv4: 3.0.1 + ws: 6.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + tailwindcss@3.4.12: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -3190,7 +4355,7 @@ snapshots: glob-parent: 6.0.2 is-glob: 4.0.3 jiti: 1.21.6 - lilconfig: 3.1.3 + lilconfig: 2.1.0 micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 @@ -3214,16 +4379,27 @@ snapshots: dependencies: any-promise: 1.3.0 + timer2@1.0.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 ts-interface-checker@0.1.13: {} + tsscmp@1.0.6: {} + + turbo-stream@2.4.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.8 @@ -3264,6 +4440,10 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.0 + unpipe@1.0.0: {} + + untildify@3.0.3: {} + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: browserslist: 4.24.2 @@ -3276,6 +4456,28 @@ snapshots: util-deprecate@1.0.2: {} + util.promisify@1.0.0: + dependencies: + define-properties: 1.2.1 + object.getownpropertydescriptors: 2.1.8 + + utils-merge@1.0.1: {} + + uuid@3.3.2: {} + + uuidv4@2.0.0: + dependencies: + sha-1: 0.1.1 + uuid: 3.3.2 + + uuidv4@3.0.1: + dependencies: + uuid: 3.3.2 + + varname@2.0.3: {} + + vary@1.1.2: {} + vite@6.0.3(jiti@1.21.6)(yaml@2.6.1): dependencies: esbuild: 0.24.0 @@ -3343,6 +4545,10 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + ws@6.2.0: + dependencies: + async-limiter: 1.0.1 + yallist@3.1.1: {} yaml@2.6.1: {} diff --git a/staff/angela-bernaldez/project/app/src/App.css b/staff/angela-bernaldez/project/app/src/App.css index b9d355df2..4b0f9e52a 100644 --- a/staff/angela-bernaldez/project/app/src/App.css +++ b/staff/angela-bernaldez/project/app/src/App.css @@ -5,27 +5,6 @@ text-align: center; } -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} @media (prefers-reduced-motion: no-preference) { a:nth-of-type(2) .logo { diff --git a/staff/angela-bernaldez/project/app/src/App.jsx b/staff/angela-bernaldez/project/app/src/App.jsx index 294334c73..ee5210d53 100644 --- a/staff/angela-bernaldez/project/app/src/App.jsx +++ b/staff/angela-bernaldez/project/app/src/App.jsx @@ -1,28 +1,20 @@ -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' import './App.css' +import { Landing, LogIn, SignUp } from './pages' +import { Route, Routes } from 'react-router-dom' function App() { return ( - <> -
- - Vite logo - - - React logo - -
-

Vite + React

-

My Weather App

-
-
-

- Click on the Vite and React logos to learn more -

- +
+ + }/> + }/> + }/> + +
) } export default App + + diff --git a/staff/angela-bernaldez/project/app/src/components/FormErrorsSection.jsx b/staff/angela-bernaldez/project/app/src/components/FormErrorsSection.jsx new file mode 100644 index 000000000..af8c9c5aa --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/FormErrorsSection.jsx @@ -0,0 +1,31 @@ +import classNames from 'classnames' +import EN from '../locals/en.json' + + +function FormErrorsSection({ className, errors }) { + errors?.sort((a, b) => a.order - b.order); + + return ( + <> + {errors instanceof Array && ( + + )} + + ); +} + +export default FormErrorsSection \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx new file mode 100644 index 000000000..f013f8300 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx @@ -0,0 +1,138 @@ +import { Link } from "react-router-dom" +import classNames from 'classnames' +import { useState } from 'react' +import { IconEmail, + IconHidePassword, + IconLogIn, + IconPassword, + IconShowPassword } from './icons.jsx' +import { Errors } from 'common' +import { FormErrorsSection } from '.' + +// Replace ES locales with corresponding text. + +function LogInForm({ className, onSubmit }) { + const [errors, setErrors] = useState(null) + + const submit = (event) => { + event.preventDefault() + + const { email: inputEmail, password: inputPassword } = event.target + + // TODO: add validators for email and password + + try { + onSubmit({ + email: inputEmail.value, + password: inputPassword.value + }) + } catch(error) { + console.log(error) + } + } + return ( + <> +
+
+
+ +
+

Welcome back

+
+ Introduce tus datos de inicio de sesión + + +
+ +
+ +
+
+ + Forgot your password? + + + Sign Up Form + +
+ +
+ + ) + +} + +export default LogInForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx b/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/app/src/components/icons.jsx b/staff/angela-bernaldez/project/app/src/components/icons.jsx new file mode 100644 index 000000000..c6eed083b --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons.jsx @@ -0,0 +1,124 @@ +export function IconLogIn(props) { + return ( + + + + + ) +} + +export function IconEmail(props) { + return ( + + + + + ) +} + + export function IconPassword(props) { + return ( + + + + ); + } + + export function IconSignup(props) { + return ( + + + + ); + } + +export function IconUsername(props) { + return ( + + + + ) +} + +export function IconDateOfBirth(props) { + return ( + + + + + ) +} + +export function IconHidePassword(props) { + return ( + + + + + ) +} + +export function IconShowPassword(props) { + return ( + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/index.jsx b/staff/angela-bernaldez/project/app/src/components/index.jsx new file mode 100644 index 000000000..b97944eba --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/index.jsx @@ -0,0 +1,5 @@ +import _FormErrorsSection from './FormErrorsSection.jsx' +import _LogInForm from './LogInForm.jsx' + +export const FormErrorsSection = _FormErrorsSection +export const LogInForm = _LogInForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/locals/en.json b/staff/angela-bernaldez/project/app/src/locals/en.json new file mode 100644 index 000000000..3979d40bf --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/locals/en.json @@ -0,0 +1,67 @@ +{ + "header": { "title": "Social App" }, + "formsErrors": { + "default": "Revisa todos los campos", + "EmailNotValidError": "El email introducido no es válido", + "PasswordNotValidError": "La contraseña introducida no es válida", + "CredentialsError": "No existe ningún usuario con la contraseña introducida", + "BadRequestError": "Los datos introducidos no son correctos", + "ServerError": "Ha habido un problema inesperado, prueba de nuevo más tarde", + "UnexpectedError": "Ha ocurrido un error inesperado, por favor, póngase en contacto con el equipo de soporte", + "UsernameNotValidError": "El nombre de usuario no es válido", + "DateOfBirthNotValidError": "La fecha de nacimiento no es válida" + }, + "modalErrors": { + "default": { + "title": "Algo anda mal...", + "paragraph": "No toques por qué tocas." + }, + "ServerError": { + "title": "Error de servidor", + "paragraph": "Tenemos huelga de oompa loompas vuelva más tarde" + }, + "UnexpectedError": { + "title": "Error inesperado", + "paragraph": "Nosotros tampoco sabemos que ha pasado, buenas tardes" + }, + "BadRequestError": { + "title": "Datos incorrectos", + "paragraph": "Esperamos que al menos sepas como te llamas para registrarte en la app." + } + }, + "loginForm": { + "title": "Bienvenido de vuelta", + "subtitle": "Introduce tus datos de inicio de sesión", + "inputEmail": { "placeholder": "Email" }, + "inputPassword": { "placeholder": "Contraseña" }, + "submitButton": "Iniciar sesión", + "linkToForgotPasswordPage": "¿Has olvidado la contraseña?", + "linkToSignupPage": "Formulario de registro" + }, + "signupForm": { + "title": "Únete a nuestra comunidad", + "subtitle": "Introduce tus datos para crear tu usuario", + "inputUsername": { "placeholder": "Nombre de usuario" }, + "inputDateOfBirth": { "placeholder": "Fecha de nacimiento" }, + "inputEmail": { "placeholder": "Email" }, + "inputPassword": { + "placeholder": "Contraseña", + "helpText": "La contraseña debe tener números letras, mayúsculas y símbolos" + }, + "inputRepeatPassword": { "placeholder": "Repita la contraseña" }, + "submitButton": "Registrarse", + "linkToLoginPage": "Formulario de entrada" + }, + "pages": { + "landing": { + "title": "Bienvenido a mi Social App", + "signupButton": "Ir al formulario de registro", + "loginButton": "Ir al formulario de entrada" + }, + "notFound": { + "title": "404", + "subtitle": "Parece que alguien anda algo perdido...", + "mainButton": "Volver a la página principal" + } + } + } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/main.jsx b/staff/angela-bernaldez/project/app/src/main.jsx index b9a1a6dea..cbdff15ab 100644 --- a/staff/angela-bernaldez/project/app/src/main.jsx +++ b/staff/angela-bernaldez/project/app/src/main.jsx @@ -2,9 +2,12 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import './index.css' import App from './App.jsx' +import { BrowserRouter } from "react-router-dom" createRoot(document.getElementById('root')).render( - - , + + + + ) diff --git a/staff/angela-bernaldez/project/app/src/pages/Landing.jsx b/staff/angela-bernaldez/project/app/src/pages/Landing.jsx new file mode 100644 index 000000000..9077f8991 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/Landing.jsx @@ -0,0 +1,33 @@ +import { Link } from "react-router-dom" + +function Landing() { + return ( +
+
+
+

Bienvenido a mi Weather App

+
+
+
+ + Go to Sign Up Form + + + Go to Log In Form + +
+
+ ) +} + +export default Landing \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx b/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx new file mode 100644 index 000000000..0369e0d43 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx @@ -0,0 +1,19 @@ +import { LogInForm } from '../components' + +function LogIn() { + return ( +
+ { + // llamar a la api en busca del usuario con contraseña y correo + // si el auth no sale bien avisa al compo LoginForm para que lance errores + // si el auth sale bien redirige al usuario a la home + console.log(event) + }} + /> +
+ ) +} + +export default LogIn \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx b/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx new file mode 100644 index 000000000..c6a9bc645 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx @@ -0,0 +1,7 @@ +function SignUp() { + return ( + <>Soy el SignUp + ) +} + +export default SignUp \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/index.jsx b/staff/angela-bernaldez/project/app/src/pages/index.jsx new file mode 100644 index 000000000..7a69db8c4 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/index.jsx @@ -0,0 +1,7 @@ +import _Landing from './Landing.jsx' +import _LogIn from './LogIn.jsx' +import _SignUp from './SignUp.jsx' + +export const Landing = _Landing +export const LogIn = _LogIn +export const SignUp = _SignUp \ No newline at end of file diff --git a/staff/angela-bernaldez/project/common/errors.js b/staff/angela-bernaldez/project/common/errors.js new file mode 100644 index 000000000..c097314ee --- /dev/null +++ b/staff/angela-bernaldez/project/common/errors.js @@ -0,0 +1,129 @@ +/*FORMAT ERRORS*/ +export class EmailNotValidError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, EmailNotValidError); + } + } +} + +export class PasswordNotValidError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, PasswordNotValidError); + } + } +} + +/* +export class UsernameNotValidError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, UsernameNotValidError); + } + } +} + +export class DateOfBirthNotValidError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, DateOfBirthNotValidError); + } + } +} +*/ + +/*SERVER ERRORS (on client side)*/ +/* +export class BadRequestError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, BadRequestError); + } + } +} + +export class ServerError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, ServerError); + } + } +} +*/ + + +/*SERVER ERRORS (on server side)*/ +/* +export class CredentialsError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, CredentialsError); + } + } +} + +export class DuplicityError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, DuplicityError); + } + } +} + +export class ExistenceError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, ExistenceError); + } + } +} + +export class AuthError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, AuthError); + } + } +} +*/ + +/*OTHER ERRORS*/ +/* +export class UnexpectedError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, UnexpectedError); + } + } +} + +export class ContentError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, ContentError); + } + } +} + +export class ConfirmationError extends Error { + constructor(message) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, ConfirmationError); + } + } +} +*/ diff --git a/staff/angela-bernaldez/project/common/index.js b/staff/angela-bernaldez/project/common/index.js new file mode 100644 index 000000000..a98a26cd0 --- /dev/null +++ b/staff/angela-bernaldez/project/common/index.js @@ -0,0 +1 @@ +export * as Errors from './errors.js' \ No newline at end of file diff --git a/staff/angela-bernaldez/project/common/package.json b/staff/angela-bernaldez/project/common/package.json new file mode 100644 index 000000000..6f27b4eed --- /dev/null +++ b/staff/angela-bernaldez/project/common/package.json @@ -0,0 +1,12 @@ +{ + "name": "common", + "version": "1.0.0", + "description": "Esta carpeta se instala como dependencia y contiene valdiadores y errores utilizables tanto en api como en app.", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" + } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/common/pnpm-lock.yaml b/staff/angela-bernaldez/project/common/pnpm-lock.yaml new file mode 100644 index 000000000..9b60ae178 --- /dev/null +++ b/staff/angela-bernaldez/project/common/pnpm-lock.yaml @@ -0,0 +1,9 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: {} diff --git a/staff/angela-bernaldez/project/services/test.js b/staff/angela-bernaldez/project/services/test.js index 6b709198d..020394f6b 100644 --- a/staff/angela-bernaldez/project/services/test.js +++ b/staff/angela-bernaldez/project/services/test.js @@ -43,7 +43,7 @@ async function fetchCityCoordinates(city) { // it is working now!!!! //fetchWeatherData(40.4165, -3.7026) -fetchCityCoordinates('Ciudad Rodrigo') +fetchCityCoordinates('Brighton') .then(coordinates => { if (coordinates) { console.log('Latitude:', coordinates.latitude) @@ -52,7 +52,7 @@ fetchCityCoordinates('Ciudad Rodrigo') } else { console.log('No se pudieron obtener las coordenadas') } - }); +}); //fetchWeatherData(lat, lon) @@ -60,4 +60,14 @@ fetchCityCoordinates('Ciudad Rodrigo') /* - SHOW COORDINATES OF THE CITY IN THE FRONT - SHOW ALTITUDE OF THE CITY IN THE FRONT -*/ \ No newline at end of file +*/ + +// formas de hacer llamadas a APIs +// fetch nativa de javascript +// axios que es una libreria -> deberiamos añadir al README q la estamos usando +// xmlhttprequest + + + +// poner todo dentro de api +// separar en diferentes carpetas dentro de api From 6104a0e0e1aba77111d082e961653344ab53e584 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Wed, 11 Dec 2024 20:50:19 +0000 Subject: [PATCH 03/45] add loginform, signupform, modals, data models and css #251 --- .../project/api/data/models.js | 53 +++++ staff/angela-bernaldez/project/app/index.html | 2 +- .../angela-bernaldez/project/app/package.json | 6 +- .../project/app/pnpm-lock.yaml | 65 ++++++ .../project/app/postcss.config.js | 6 + .../angela-bernaldez/project/app/src/App.css | 21 -- .../angela-bernaldez/project/app/src/App.jsx | 18 +- .../project/app/src/components/LogInForm.jsx | 14 +- .../project/app/src/components/SignUpForm.jsx | 198 ++++++++++++++++++ .../project/app/src/components/icons.jsx | 19 +- .../project/app/src/components/index.jsx | 4 +- .../project/app/src/context/ModalContext.jsx | 61 ++++++ .../project/app/src/context/index.jsx | 3 + .../project/app/src/index.css | 75 ++----- .../project/app/src/pages/LogIn.jsx | 32 ++- .../project/app/src/pages/SignUp.jsx | 34 ++- .../project/app/tailwind.config.js | 66 ++++++ 17 files changed, 556 insertions(+), 121 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/data/models.js create mode 100644 staff/angela-bernaldez/project/app/postcss.config.js delete mode 100644 staff/angela-bernaldez/project/app/src/App.css create mode 100644 staff/angela-bernaldez/project/app/src/context/ModalContext.jsx create mode 100644 staff/angela-bernaldez/project/app/src/context/index.jsx create mode 100644 staff/angela-bernaldez/project/app/tailwind.config.js diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js new file mode 100644 index 000000000..3cc3b8b5d --- /dev/null +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -0,0 +1,53 @@ +import mongoose from 'mongoose' + +const { Schema, Types } = mongoose + +const { ObjectId } = Types + +const LocationSchema = new Schema({ + locationName: { + type: String, + required: true + }, + latitude: { + type: Number, + required: true + }, + longitude: { + type: Number, + required: true + }, + altitude: { + type: Number, + required: true + }, + timeLastUpdated: { + type: Date, + required: true + }, + variables: [{ + precipitation: [Number], + temperature: [Number] + }] +}) + +const Location = mongoose.model('Location', LocationSchema) + +const UserSchema = new Schema({ + email: { + type: String, + required: true, + unique: true, + }, + password: { + type: String, + required: true + }, + favLocations: [{ + type: ObjectId, + ref: 'Location' + }] +}) + +const User = mongoose.model('User', UserSchema) + diff --git a/staff/angela-bernaldez/project/app/index.html b/staff/angela-bernaldez/project/app/index.html index 0c589eccd..c757095f0 100644 --- a/staff/angela-bernaldez/project/app/index.html +++ b/staff/angela-bernaldez/project/app/index.html @@ -4,7 +4,7 @@ - Vite + React + My Weather App
diff --git a/staff/angela-bernaldez/project/app/package.json b/staff/angela-bernaldez/project/app/package.json index cb6d4aac4..1ab40102c 100644 --- a/staff/angela-bernaldez/project/app/package.json +++ b/staff/angela-bernaldez/project/app/package.json @@ -11,11 +11,10 @@ }, "dependencies": { "classnames": "^2.5.1", + "common": "file:../common", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-router-dom": "^7.0.2", - "common": "file:../common", - "tailwind": "^4.0.0" + "react-router-dom": "^7.0.2" }, "devDependencies": { "@eslint/js": "^9.15.0", @@ -23,6 +22,7 @@ "@types/react-dom": "^18.3.1", "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", + "daisyui": "^4.12.20", "eslint": "^9.15.0", "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^5.0.0", diff --git a/staff/angela-bernaldez/project/app/pnpm-lock.yaml b/staff/angela-bernaldez/project/app/pnpm-lock.yaml index ebe88dbbc..3735cc52f 100644 --- a/staff/angela-bernaldez/project/app/pnpm-lock.yaml +++ b/staff/angela-bernaldez/project/app/pnpm-lock.yaml @@ -30,6 +30,9 @@ importers: '@eslint/js': specifier: ^9.15.0 version: 9.16.0 + '@tailwindcss/typography': + specifier: ^0.5.15 + version: 0.5.15(tailwindcss@3.4.12) '@types/react': specifier: ^18.3.12 version: 18.3.14 @@ -42,6 +45,9 @@ importers: autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) + daisyui: + specifier: ^4.12.20 + version: 4.12.20(postcss@8.4.49) eslint: specifier: ^9.15.0 version: 9.16.0(jiti@1.21.6) @@ -496,6 +502,11 @@ packages: cpu: [x64] os: [win32] + '@tailwindcss/typography@0.5.15': + resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -812,6 +823,9 @@ packages: resolution: {integrity: sha512-jdXdAgdILldLOF53md25FiQ6ybj2kUFTiRjs7msKTUoZrzgT/M1FPX5dYGJjbbwFls+RJIiZxNTC02DE/8y0ZQ==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + css-selector-tokenizer@0.8.0: + resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -820,6 +834,14 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + culori@3.3.0: + resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + daisyui@4.12.20: + resolution: {integrity: sha512-uHr3SQsd2yTjRdVuswTiqGFvZTxX0sGSBRa8JJdbKgmZCk/kRFh4B7Z2jg9vLIdwsHTHPyPgCkZadQo1ce0tAw==} + engines: {node: '>=16.9.0'} + data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -1051,6 +1073,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fastparse@1.1.2: + resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -1442,6 +1467,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} @@ -1719,6 +1747,10 @@ packages: peerDependencies: postcss: ^8.2.14 + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} @@ -2569,6 +2601,14 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.28.1': optional: true + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.12)': + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.12 + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.3 @@ -2946,10 +2986,26 @@ snapshots: node-rsa: 0.4.2 util.promisify: 1.0.0 + css-selector-tokenizer@0.8.0: + dependencies: + cssesc: 3.0.0 + fastparse: 1.1.2 + cssesc@3.0.0: {} csstype@3.1.3: {} + culori@3.3.0: {} + + daisyui@4.12.20(postcss@8.4.49): + dependencies: + css-selector-tokenizer: 0.8.0 + culori: 3.3.0 + picocolors: 1.1.1 + postcss-js: 4.0.1(postcss@8.4.49) + transitivePeerDependencies: + - postcss + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.8 @@ -3315,6 +3371,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fastparse@1.1.2: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -3713,6 +3771,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.castarray@4.4.0: {} + lodash.includes@4.3.0: {} lodash.isboolean@3.0.3: {} @@ -3946,6 +4006,11 @@ snapshots: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 diff --git a/staff/angela-bernaldez/project/app/postcss.config.js b/staff/angela-bernaldez/project/app/postcss.config.js new file mode 100644 index 000000000..2e7af2b7f --- /dev/null +++ b/staff/angela-bernaldez/project/app/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/staff/angela-bernaldez/project/app/src/App.css b/staff/angela-bernaldez/project/app/src/App.css deleted file mode 100644 index 4b0f9e52a..000000000 --- a/staff/angela-bernaldez/project/app/src/App.css +++ /dev/null @@ -1,21 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/staff/angela-bernaldez/project/app/src/App.jsx b/staff/angela-bernaldez/project/app/src/App.jsx index ee5210d53..d59ff6897 100644 --- a/staff/angela-bernaldez/project/app/src/App.jsx +++ b/staff/angela-bernaldez/project/app/src/App.jsx @@ -1,17 +1,19 @@ -import './App.css' import { Landing, LogIn, SignUp } from './pages' import { Route, Routes } from 'react-router-dom' +import { ModalContext } from './context' function App() { return ( -
- - }/> - }/> - }/> - -
+ +
+ + }/> + }/> + }/> + +
+
) } diff --git a/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx index f013f8300..0a5d241f4 100644 --- a/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx @@ -1,6 +1,6 @@ import { Link } from "react-router-dom" import classNames from 'classnames' -import { useState } from 'react' +import { memo, useState } from 'react' import { IconEmail, IconHidePassword, IconLogIn, @@ -30,6 +30,14 @@ function LogInForm({ className, onSubmit }) { console.log(error) } } + + const showPassword = (buttonSelector, inputSelector) => { + document + .querySelectorAll(`[data-${buttonSelector}="true"]`)[0] + .classList.toggle("swap-active"); + const element = document.getElementById(inputSelector) + element.type = element.type === "text" ? "password" : "text" + } return ( <>
@@ -135,4 +143,4 @@ function LogInForm({ className, onSubmit }) { } -export default LogInForm \ No newline at end of file +export default memo(LogInForm) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx b/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx index e69de29bb..897411f67 100644 --- a/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx @@ -0,0 +1,198 @@ +import { Link } from 'react-router-dom' +import { + IconEmail, + IconHidePassword, + IconPassword, + IconShowPassword, + IconSignUp, + IconUsername, +} from './icons' +import classNames from 'classnames' +import { useState } from 'react' +import EN from '../locals/en.json' +import { FormErrorsSection } from '.' + + +function SignUpForm({ className, onSubmit }) { + const [errors, setErrors] = useState(null); + + const submit = (event) => { + event.preventDefault() + + const { + name: inputUsername, + email: inputEmail, + password: inputPassword, + repeatPassword: inputRepeatPassword, + } = event.target + + /* + const newErrors = [] + + if (!(inputPassword.value === inputRepeatPassword.value)) { + newErrors.push( + new Errors.PasswordNotValidError("Password and repeatPassword do not match") + ); + newErrors[newErrors.length - 1].order = 4 + inputPassword.value = "" + inputRepeatPassword.value = "" + inputPassword.focus() + } + + if ( + inputPassword.value === inputRepeatPassword.value && + !Validator.password(inputPassword.value) + ) { + newErrors.push(new Errors.PasswordNotValidError("Password is not valid")) + newErrors[newErrors.length - 1].order = 4 + inputPassword.focus() + } + + if (!Validator.email(inputEmail.value)) { + newErrors.push(new Errors.EmailNotValidError("Email is not valid")) + newErrors[newErrors.length - 1].order = 3 + inputEmail.focus() + } + + if (!Validator.username(inputUsername.value)) { + newErrors.push(new Errors.UsernameNotValidError("Username is not valid")) + newErrors[newErrors.length - 1].order = 1 + inputUsername.focus(); + } + + setErrors(newErrors.length > 0 ? newErrors : null) + + if (newErrors.length === 0) { + try { + onSubmit({ + username: inputUsername.value, + dateOfBirth: date, + email: inputEmail.value, + password: inputPassword.value, + repeatPassword: inputRepeatPassword.value, + }).catch((err) => { + if (err instanceof Errors.BadRequestError) return setErrors([err]) + if (err instanceof Errors.ServerError) return setErrors([err]) + setErrors([new Errors.UnexpectedError()]) + }); + } catch (err) { + err.order = 1; + setErrors([err]) + } + } + */ + } + + + const showPassword = (buttonSelector, inputSelector) => { + document + .querySelectorAll(`[data-${buttonSelector}="true"]`)[0] + .classList.toggle("swap-active"); + const element = document.getElementById(inputSelector); + element.type = element.type === "text" ? "password" : "text"; + } + + return ( + <> +
+
+
+ +
+

{EN.signupForm.title}

+
+ {EN.signupForm.subtitle} + + +
+ +
+ + {EN.signupForm.inputPassword.helpText} + +
+
+ +
+ +
+ +
+
+ + {EN.signupForm.linkToLoginPage} + +
+ +
+ + ) +} + +export default SignUpForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons.jsx b/staff/angela-bernaldez/project/app/src/components/icons.jsx index c6eed083b..c00a21955 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons.jsx +++ b/staff/angela-bernaldez/project/app/src/components/icons.jsx @@ -46,7 +46,7 @@ export function IconEmail(props) { ); } - export function IconSignup(props) { + export function IconSignUp(props) { return ( ) } - -export function IconDateOfBirth(props) { - return ( - - - - - ) -} export function IconHidePassword(props) { return ( diff --git a/staff/angela-bernaldez/project/app/src/components/index.jsx b/staff/angela-bernaldez/project/app/src/components/index.jsx index b97944eba..60221f68b 100644 --- a/staff/angela-bernaldez/project/app/src/components/index.jsx +++ b/staff/angela-bernaldez/project/app/src/components/index.jsx @@ -1,5 +1,7 @@ import _FormErrorsSection from './FormErrorsSection.jsx' import _LogInForm from './LogInForm.jsx' +import _SignUpForm from './SignUpForm.jsx' export const FormErrorsSection = _FormErrorsSection -export const LogInForm = _LogInForm \ No newline at end of file +export const LogInForm = _LogInForm +export const SignUpForm = _SignUpForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/context/ModalContext.jsx b/staff/angela-bernaldez/project/app/src/context/ModalContext.jsx new file mode 100644 index 000000000..bbeda4b4d --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/context/ModalContext.jsx @@ -0,0 +1,61 @@ +import { createContext, useContext, useState } from 'react' +import EN from '../locals/en.json' + +const Context = createContext(null) + +function Provider({ children }) { + const [data, setData] = useState({ + title: 'hola', + paragraph: 'que tal todo', + }) + + const openModalError = (error) => { + setData({ + title: + EN.modalErrors[error.constructor.name]?.title ?? + EN.modalErrors.default.title, + paragraph: + EN.modalErrors[error.constructor.name]?.paragraph ?? + EN.modalErrors.default.paragraph, + }) + setTimeout(() => document.getElementById('modalError').showModal(), 0) + } + + return ( + <> + + {children} + +
+
+ +
+

{data.title}

+
+

{data.paragraph}

+
+
+
+ +
+ + + + ) +} + +const useModalError = () => { + const { openModalError } = useContext(Context) + + return openModalError +} + +const ModalContext = { + Context, + Provider, + useModalError, +} + +export default ModalContext \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/context/index.jsx b/staff/angela-bernaldez/project/app/src/context/index.jsx new file mode 100644 index 000000000..9fce708bc --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/context/index.jsx @@ -0,0 +1,3 @@ +import _ModalContext from './ModalContext.jsx' + +export const ModalContext = _ModalContext \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/index.css b/staff/angela-bernaldez/project/app/src/index.css index 6119ad9a8..d904acc09 100644 --- a/staff/angela-bernaldez/project/app/src/index.css +++ b/staff/angela-bernaldez/project/app/src/index.css @@ -1,68 +1,25 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; +@tailwind base; +@tailwind components; +@tailwind utilities; - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; +@layer components { + .prose { + @apply text-white; + } } -@media (prefers-color-scheme: light) { +@layer base { :root { - color: #213547; - background-color: #ffffff; + --header-heigth: 64px; } - a:hover { - color: #747bff; + + body { + @apply bg-black w-screen min-h-screen h-full max-w-full text-white font-mono; } - button { - background-color: #f9f9f9; + + html { + @apply !bg-black; } } + diff --git a/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx b/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx index 0369e0d43..6d8a2aaf5 100644 --- a/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx @@ -1,16 +1,36 @@ import { LogInForm } from '../components' +import ModalContext from '../context/ModalContext' +import { useNavigate } from 'react-router-dom' function LogIn() { + + const { useModalError } = ModalContext + const navigate = useNavigate() + const openModalError = useModalError() + + const onSubmit = ({ email, password }) => { + try { + console.log(email, password) + /* + return userAuth(email, password) + .then(() => { + updateFather() + navigate("/home") + }) + .catch((err) => { + openModalError(err) + }) + */ + } catch (error) { + throw error + } + } + return (
{ - // llamar a la api en busca del usuario con contraseña y correo - // si el auth no sale bien avisa al compo LoginForm para que lance errores - // si el auth sale bien redirige al usuario a la home - console.log(event) - }} + onSubmit={onSubmit} />
) diff --git a/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx b/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx index c6a9bc645..0fbb0c23f 100644 --- a/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx @@ -1,6 +1,38 @@ +import { useMemo } from 'react' +import { SignUpForm } from '../components' +import ModalContext from '../context/ModalContext' +// import registerUser from '../logic/registerUser' +import { useNavigate } from 'react-router-dom' + function SignUp() { + + const { useModalError } = ModalContext + const navigate = useNavigate() + const openModalError = useModalError() + + const onSubmit = (data) => { + try { + /* + return registerUser(data) + .then(() => { + navigate("/login") + }) + .catch((err) => { + openModalError(err) + }) + */ + } catch (error) { + throw error + } + } + return ( - <>Soy el SignUp +
+ +
) } diff --git a/staff/angela-bernaldez/project/app/tailwind.config.js b/staff/angela-bernaldez/project/app/tailwind.config.js new file mode 100644 index 000000000..4ccd0398b --- /dev/null +++ b/staff/angela-bernaldez/project/app/tailwind.config.js @@ -0,0 +1,66 @@ +const { dracula } = require("daisyui/src/theming/themes"); +const { + fontFamily, + screens, + animation, + keyframes, +} = require("tailwindcss/defaultTheme"); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + mode: "jit", + content: [ + "./src/**/*.{jsx,js}", + ], + theme: { + keyframes: { + ...keyframes, + wiggle: { + "0%, 100%": { transform: "rotate(-3deg)" }, + "50%": { transform: "rotate(3deg)" }, + }, + buzzing: { + "0%, 50%, 72%, 85%, 95%": { filter: "opacity(1)" }, + "30%, 90%, 100%": { filter: "opacity(0)" }, + "65%": { filter: "opacity(60%)" }, + "80%": { filter: "opacity(40%)" }, + }, + }, + animation: { + ...animation, + "spin-slow": "spin 10s linear infinite", + wiggle: "wiggle 2s ease-in-out infinite", + "low-pulse": "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite", + buzzing: "buzzing 2s ease-in-out infinite", + }, + fontFamily: fontFamily, + screens: { + "3xs": { min: "320px" }, + "2xs": { min: "380px" }, + xs: { min: "475px" }, + ...screens, + "max-xl": { max: "1279px" }, + "max-lg": { max: "1023px" }, + "max-md": { max: "767px" }, + "max-sm": { max: "639px" }, + "max-xs": { max: "474px" }, + "max-2xs": { max: "379px" }, + "max-3xs": { max: "319px" }, + }, + aspectRatio: { + "1/1": "1 / 1", + "3/4": "3 / 4", + }, + }, + daisyui: { + themes: [ + { + dracula: { + ...require("daisyui/src/theming/themes")["dracula"], + + }, + } + ], + }, + plugins: [require("@tailwindcss/typography"), require("daisyui")], +}; From 8570cbc51dc23ea99259c1be45789e6f5d1e0867 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Thu, 12 Dec 2024 19:31:11 +0000 Subject: [PATCH 04/45] add register user logic api #251 --- staff/angela-bernaldez/project/api/.env | 3 + .../project/api/data/models.js | 11 + .../project/api/handlers/index.js | 5 + .../project/api/handlers/registerUser.js | 14 + staff/angela-bernaldez/project/api/index.js | 21 + .../project/api/logic/index.js | 6 + .../project/api/logic/registerUser.js | 27 + .../project/api/logic/registerUser.spec.js | 36 + .../angela-bernaldez/project/api/package.json | 7 +- .../project/api/pnpm-lock.yaml | 1110 ++++++++++++++++- .../project/api/tests/register-user.sh | 3 + .../angela-bernaldez/project/common/errors.js | 13 +- 12 files changed, 1243 insertions(+), 13 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/.env create mode 100644 staff/angela-bernaldez/project/api/handlers/index.js create mode 100644 staff/angela-bernaldez/project/api/handlers/registerUser.js create mode 100644 staff/angela-bernaldez/project/api/index.js create mode 100644 staff/angela-bernaldez/project/api/logic/index.js create mode 100644 staff/angela-bernaldez/project/api/logic/registerUser.js create mode 100644 staff/angela-bernaldez/project/api/logic/registerUser.spec.js create mode 100644 staff/angela-bernaldez/project/api/tests/register-user.sh diff --git a/staff/angela-bernaldez/project/api/.env b/staff/angela-bernaldez/project/api/.env new file mode 100644 index 000000000..b7a1be326 --- /dev/null +++ b/staff/angela-bernaldez/project/api/.env @@ -0,0 +1,3 @@ +MONGO_URI= mongodb://127.0.0.1:27017/weather +MONGO_URI_TEST= mongodb://127.0.0.1:27017/weather-test +PORT=4321 \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js index 3cc3b8b5d..75d9b957a 100644 --- a/staff/angela-bernaldez/project/api/data/models.js +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -34,6 +34,10 @@ const LocationSchema = new Schema({ const Location = mongoose.model('Location', LocationSchema) const UserSchema = new Schema({ + username: { + type: String, + required: true + }, email: { type: String, required: true, @@ -51,3 +55,10 @@ const UserSchema = new Schema({ const User = mongoose.model('User', UserSchema) +export default { + Location, + User +} + +// si quiero añadir cuantas personas x ejemplo tienen como fav una ciudad +// tengo que hacer referencia en el esquema de localizaciones a los users tb \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/index.js b/staff/angela-bernaldez/project/api/handlers/index.js new file mode 100644 index 000000000..3b61bcf4c --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers/index.js @@ -0,0 +1,5 @@ +import registerUser from './registerUser.js' + +export default { + registerUser +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/registerUser.js b/staff/angela-bernaldez/project/api/handlers/registerUser.js new file mode 100644 index 000000000..ca29c7ed1 --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers/registerUser.js @@ -0,0 +1,14 @@ +import logic from '../logic/index.js' + +export default(req, res, next) => { + const { username, email, password } = req.body + + try { + logic.registerUser(username, email, password) + .then(() => res.status(201).send()) + .catch(error => next(error)) + } catch(error) { + next(error) + } + +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js new file mode 100644 index 000000000..0d4bd6ae1 --- /dev/null +++ b/staff/angela-bernaldez/project/api/index.js @@ -0,0 +1,21 @@ +import express, { json } from 'express' +import mongoose from 'mongoose' +import handlers from './handlers/index.js' +import 'dotenv/config' + + +mongoose.connect(process.env.MONGO_URI) +.then(() => { + console.info(`connected to db: ${process.env.MONGO_URI}`) + + const server = express() + const jsonBodyParser = json() + + server.post('/users', jsonBodyParser, handlers.registerUser) + + server.listen(process.env.PORT, () => { + console.info(`Server running on port: ${process.env.PORT}`) + }) + +}) + diff --git a/staff/angela-bernaldez/project/api/logic/index.js b/staff/angela-bernaldez/project/api/logic/index.js new file mode 100644 index 000000000..6ef48c1c0 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/index.js @@ -0,0 +1,6 @@ +import registerUser from './registerUser.js' + +export default { + registerUser +} + diff --git a/staff/angela-bernaldez/project/api/logic/registerUser.js b/staff/angela-bernaldez/project/api/logic/registerUser.js new file mode 100644 index 000000000..3811d5cac --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/registerUser.js @@ -0,0 +1,27 @@ +import { Errors } from 'common' +import bcrypt from 'bcrypt' +import models from '../data/models.js' + +const { User } = models + +export default (username, email, password) => { + + // TODO: add validators + + return User.findOne({ email: email }) + .then((user) => { + if (user) throw new Errors.DuplicityError('Email already in use') + return bcrypt.hash(password, 15) + .then((cryptPassword) => { + const user = { + username, + email, + password: cryptPassword + } + + return User.create(user) + }) + .catch((error) => { throw new Errors.UnexpectedError(error.message) }) + }) +} + diff --git a/staff/angela-bernaldez/project/api/logic/registerUser.spec.js b/staff/angela-bernaldez/project/api/logic/registerUser.spec.js new file mode 100644 index 000000000..63314efe6 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/registerUser.spec.js @@ -0,0 +1,36 @@ +import 'dotenv/config' +import registerUser from './registerUser.js' +import { describe, it } from 'mocha' +import models from '../data/models.js' +import mongoose, { Types } from 'mongoose' +import { expect } from 'chai' + +const { User } = models +const { ObjectId } = Types + +describe('registerUser', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + it('creates an user', () => { + return registerUser('example', 'mail@mail.com', 'contraseña!2') + .then(() => { + return User.findOne({ email: 'mail@mail.com' }) + .then((user) => { + expect(user.username).to.equal('example') + expect(user.email).to.equal('mail@mail.com') + expect(user._id).to.be.instanceOf(ObjectId) + }) + }) + }) + + // añadir intentar usuario ya registrado + // no puedo llamar a la logica dos veces + // User.create() hago esto al principio + // lo cojo en el .catch() + + // añadir intentar registrar usuario con email formato invalido + // añadir intentar registrar usuario con username formato invalido +}) diff --git a/staff/angela-bernaldez/project/api/package.json b/staff/angela-bernaldez/project/api/package.json index 658ba5989..a4dbf4282 100644 --- a/staff/angela-bernaldez/project/api/package.json +++ b/staff/angela-bernaldez/project/api/package.json @@ -6,13 +6,18 @@ "main": "index.js", "scripts": { "start": "node index.js", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "mocha --timeout 10000 ./logic/*.spec.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { + "bcrypt": "^5.1.1", + "chai": "^5.1.2", + "common": "file:../common", + "dotenv": "^16.4.7", "express": "^4.21.2", + "mocha": "^11.0.1", "mongoose": "^8.8.4" } } diff --git a/staff/angela-bernaldez/project/api/pnpm-lock.yaml b/staff/angela-bernaldez/project/api/pnpm-lock.yaml index 78c6df4fc..10133b484 100644 --- a/staff/angela-bernaldez/project/api/pnpm-lock.yaml +++ b/staff/angela-bernaldez/project/api/pnpm-lock.yaml @@ -8,35 +8,132 @@ importers: .: dependencies: + bcrypt: + specifier: ^5.1.1 + version: 5.1.1 + chai: + specifier: ^5.1.2 + version: 5.1.2 + common: + specifier: file:../common + version: file:../common + dotenv: + specifier: ^16.4.7 + version: 16.4.7 express: specifier: ^4.21.2 version: 4.21.2 + mocha: + specifier: ^11.0.1 + version: 11.0.1 mongoose: specifier: ^8.8.4 version: 8.8.4 packages: + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@mapbox/node-pre-gyp@1.0.11': + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + '@mongodb-js/saslprep@1.1.9': resolution: {integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@types/webidl-conversions@7.0.3': resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bcrypt@5.1.1: + resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} + engines: {node: '>= 10.0.0'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + bson@6.10.1: resolution: {integrity: sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==} engines: {node: '>=16.20.1'} @@ -53,6 +150,53 @@ packages: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + common@file:../common: + resolution: {directory: ../common, type: directory} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -68,6 +212,10 @@ packages: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -85,10 +233,21 @@ packages: supports-color: optional: true + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -97,13 +256,34 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + dunder-proto@1.0.0: resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -120,9 +300,17 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -131,10 +319,26 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + finalhandler@1.3.1: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -143,17 +347,54 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -165,18 +406,33 @@ packages: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -184,10 +440,66 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + kareem@2.6.3: resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} engines: {node: '>=12.0.0'} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -215,6 +527,43 @@ packages: engines: {node: '>=4'} hasBin: true + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mocha@11.0.1: + resolution: {integrity: sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + mongodb-connection-string-url@3.0.1: resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==} @@ -267,6 +616,35 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + object-inspect@1.13.3: resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} @@ -275,13 +653,51 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -294,6 +710,9 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -302,20 +721,52 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -323,6 +774,14 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -330,6 +789,13 @@ packages: sift@17.1.3: resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + sparse-bitfield@3.0.3: resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} @@ -337,10 +803,52 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@4.1.1: resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} engines: {node: '>=14'} @@ -353,6 +861,9 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -361,6 +872,9 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -369,25 +883,148 @@ packages: resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} engines: {node: '>=16'} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + snapshots: + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@mapbox/node-pre-gyp@1.0.11': + dependencies: + detect-libc: 2.0.3 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.6.3 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + '@mongodb-js/saslprep@1.1.9': dependencies: sparse-bitfield: 3.0.3 + '@pkgjs/parseargs@0.11.0': + optional: true + '@types/webidl-conversions@7.0.3': {} '@types/whatwg-url@11.0.5': dependencies: '@types/webidl-conversions': 7.0.3 + abbrev@1.1.1: {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 + agent-base@6.0.2: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + ansi-colors@4.1.3: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + aproba@2.0.0: {} + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + + argparse@2.0.1: {} + array-flatten@1.1.1: {} + assertion-error@2.0.1: {} + + balanced-match@1.0.2: {} + + bcrypt@5.1.1: + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + node-addon-api: 5.1.0 + transitivePeerDependencies: + - encoding + - supports-color + + binary-extensions@2.3.0: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -405,6 +1042,21 @@ snapshots: transitivePeerDependencies: - supports-color + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + bson@6.10.1: {} bytes@3.1.2: {} @@ -421,6 +1073,57 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + camelcase@6.3.0: {} + + chai@5.1.2: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@2.1.1: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@2.0.0: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-support@1.1.3: {} + + common@file:../common: {} + + concat-map@0.0.1: {} + + console-control-strings@1.1.0: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -431,13 +1134,25 @@ snapshots: cookie@0.7.1: {} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + debug@2.6.9: dependencies: ms: 2.0.0 - debug@4.4.0: + debug@4.4.0(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-eql@5.0.2: {} define-data-property@1.1.4: dependencies: @@ -445,18 +1160,32 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + delegates@1.0.0: {} + depd@2.0.0: {} destroy@1.2.0: {} + detect-libc@2.0.3: {} + + diff@5.2.0: {} + + dotenv@16.4.7: {} + dunder-proto@1.0.0: dependencies: call-bind-apply-helpers: 1.0.0 es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + ee-first@1.1.1: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -465,8 +1194,12 @@ snapshots: es-errors@1.3.0: {} + escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@4.0.0: {} + etag@1.8.1: {} express@4.21.2: @@ -505,6 +1238,10 @@ snapshots: transitivePeerDependencies: - supports-color + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + finalhandler@1.3.1: dependencies: debug: 2.6.9 @@ -517,12 +1254,47 @@ snapshots: transitivePeerDependencies: - supports-color + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + forwarded@0.2.0: {} fresh@0.5.2: {} + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} + gauge@3.0.2: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + + get-caller-file@2.0.5: {} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -531,8 +1303,32 @@ snapshots: has-symbols: 1.1.0 hasown: 2.0.2 + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + gopd@1.2.0: {} + has-flag@4.0.0: {} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -543,10 +1339,14 @@ snapshots: has-symbols@1.1.0: {} + has-unicode@2.0.1: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 + he@1.2.0: {} + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -555,16 +1355,75 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.4: {} ipaddr.js@1.9.1: {} + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + kareem@2.6.3: {} + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@3.1.2: {} + + lru-cache@10.4.3: {} + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + media-typer@0.3.0: {} memory-pager@1.5.0: {} @@ -581,6 +1440,56 @@ snapshots: mime@1.6.0: {} + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@1.0.4: {} + + mocha@11.0.1: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.4.0(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 10.4.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + mongodb-connection-string-url@3.0.1: dependencies: '@types/whatwg-url': 11.0.5 @@ -615,7 +1524,7 @@ snapshots: mquery@5.0.0: dependencies: - debug: 4.4.0 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -625,16 +1534,66 @@ snapshots: negotiator@0.6.3: {} + node-addon-api@5.1.0: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-path@3.0.0: {} + + npmlog@5.0.1: + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + + object-assign@4.1.1: {} + object-inspect@1.13.3: {} on-finished@2.4.1: dependencies: ee-first: 1.1.1 + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + parseurl@1.3.3: {} + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + path-to-regexp@0.1.12: {} + pathval@2.0.0: {} + + picomatch@2.3.1: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -646,6 +1605,10 @@ snapshots: dependencies: side-channel: 1.0.6 + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + range-parser@1.2.1: {} raw-body@2.5.2: @@ -655,10 +1618,30 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + require-directory@2.1.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} + semver@6.3.1: {} + + semver@7.6.3: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -677,6 +1660,10 @@ snapshots: transitivePeerDependencies: - supports-color + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -686,6 +1673,8 @@ snapshots: transitivePeerDependencies: - supports-color + set-blocking@2.0.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -697,6 +1686,12 @@ snapshots: setprototypeof@1.2.0: {} + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + side-channel@1.0.6: dependencies: call-bind: 1.0.8 @@ -706,14 +1701,67 @@ snapshots: sift@17.1.3: {} + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + sparse-bitfield@3.0.3: dependencies: memory-pager: 1.5.0 statuses@2.0.1: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + toidentifier@1.0.1: {} + tr46@0.0.3: {} + tr46@4.1.1: dependencies: punycode: 2.3.1 @@ -725,13 +1773,71 @@ snapshots: unpipe@1.0.0: {} + util-deprecate@1.0.2: {} + utils-merge@1.0.1: {} vary@1.1.2: {} + webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} whatwg-url@13.0.0: dependencies: tr46: 4.1.1 webidl-conversions: 7.0.0 + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + + workerpool@6.5.1: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + y18n@5.0.8: {} + + yallist@4.0.0: {} + + yargs-parser@20.2.9: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yocto-queue@0.1.0: {} diff --git a/staff/angela-bernaldez/project/api/tests/register-user.sh b/staff/angela-bernaldez/project/api/tests/register-user.sh new file mode 100644 index 000000000..14ebbb75a --- /dev/null +++ b/staff/angela-bernaldez/project/api/tests/register-user.sh @@ -0,0 +1,3 @@ +curl -X POST http://localhost:4321/users \ + -H "Content-Type: application/json" \ + -d '{"username":"maria", "email":"maria@gmail.com","password":"123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/common/errors.js b/staff/angela-bernaldez/project/common/errors.js index c097314ee..a234f6510 100644 --- a/staff/angela-bernaldez/project/common/errors.js +++ b/staff/angela-bernaldez/project/common/errors.js @@ -27,14 +27,7 @@ export class UsernameNotValidError extends Error { } } -export class DateOfBirthNotValidError extends Error { - constructor(message) { - super(message); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, DateOfBirthNotValidError); - } - } -} + */ /*SERVER ERRORS (on client side)*/ @@ -69,7 +62,7 @@ export class CredentialsError extends Error { } } } - +*/ export class DuplicityError extends Error { constructor(message) { super(message); @@ -78,7 +71,7 @@ export class DuplicityError extends Error { } } } - +/* export class ExistenceError extends Error { constructor(message) { super(message); From 3a73e76761d36723505e1cca9fab998a9fcc4956 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Thu, 12 Dec 2024 19:40:29 +0000 Subject: [PATCH 05/45] add env variables to .gitignore #251 --- staff/angela-bernaldez/project/.gitignore | 1 + staff/angela-bernaldez/project/api/.gitignore | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 staff/angela-bernaldez/project/api/.gitignore diff --git a/staff/angela-bernaldez/project/.gitignore b/staff/angela-bernaldez/project/.gitignore index 3c3629e64..3351af419 100644 --- a/staff/angela-bernaldez/project/.gitignore +++ b/staff/angela-bernaldez/project/.gitignore @@ -1 +1,2 @@ node_modules +.env \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/.gitignore b/staff/angela-bernaldez/project/api/.gitignore new file mode 100644 index 000000000..3351af419 --- /dev/null +++ b/staff/angela-bernaldez/project/api/.gitignore @@ -0,0 +1,2 @@ +node_modules +.env \ No newline at end of file From 1ffe0df3caf282ef733fbb89dced3044f1d51ce6 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Thu, 12 Dec 2024 19:48:33 +0000 Subject: [PATCH 06/45] Stopped tracking .env File --- staff/angela-bernaldez/project/api/.env | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 staff/angela-bernaldez/project/api/.env diff --git a/staff/angela-bernaldez/project/api/.env b/staff/angela-bernaldez/project/api/.env deleted file mode 100644 index b7a1be326..000000000 --- a/staff/angela-bernaldez/project/api/.env +++ /dev/null @@ -1,3 +0,0 @@ -MONGO_URI= mongodb://127.0.0.1:27017/weather -MONGO_URI_TEST= mongodb://127.0.0.1:27017/weather-test -PORT=4321 \ No newline at end of file From a38a31f0baad07dca27222ada0030c60481f619a Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Thu, 12 Dec 2024 19:49:34 +0000 Subject: [PATCH 07/45] remove gitignore from api #251 --- staff/angela-bernaldez/project/api/.gitignore | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 staff/angela-bernaldez/project/api/.gitignore diff --git a/staff/angela-bernaldez/project/api/.gitignore b/staff/angela-bernaldez/project/api/.gitignore deleted file mode 100644 index 3351af419..000000000 --- a/staff/angela-bernaldez/project/api/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.env \ No newline at end of file From bcfb19cd698885f45bd499c2b8e35736d48df485 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Fri, 13 Dec 2024 19:12:42 +0000 Subject: [PATCH 08/45] add authenticate user api #251 --- .../project/api/handlers/authenticateUser.js | 20 +++++ .../project/api/handlers/index.js | 2 + .../project/api/logic/authenticateUser.js | 23 +++++ .../api/logic/authenticateUser.spec.js | 53 ++++++++++++ .../project/api/logic/index.js | 2 + .../angela-bernaldez/project/api/package.json | 3 +- .../project/api/pnpm-lock.yaml | 84 +++++++++++++++++++ .../angela-bernaldez/project/app/src/App.jsx | 3 + .../angela-bernaldez/project/common/errors.js | 8 +- 9 files changed, 193 insertions(+), 5 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers/authenticateUser.js create mode 100644 staff/angela-bernaldez/project/api/logic/authenticateUser.js create mode 100644 staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js diff --git a/staff/angela-bernaldez/project/api/handlers/authenticateUser.js b/staff/angela-bernaldez/project/api/handlers/authenticateUser.js new file mode 100644 index 000000000..d21cf3cb1 --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers/authenticateUser.js @@ -0,0 +1,20 @@ +import logic from '../logic/index.js' +import jwt from 'jsonwebtoken' + + +export default (req, res, next) => { + const { email, password } = req.body + + try { + logic.authenticateUser(email, password) + .then((id) => { + const token = jwt.sign({ + id: id.toString() + }, process.env.JWT_SECRET) + + res.status(200).json({ token: token })}) + .catch((error) => next(error)) + } catch (error) { + next(error); + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/index.js b/staff/angela-bernaldez/project/api/handlers/index.js index 3b61bcf4c..5227fc978 100644 --- a/staff/angela-bernaldez/project/api/handlers/index.js +++ b/staff/angela-bernaldez/project/api/handlers/index.js @@ -1,5 +1,7 @@ +import authenticateUser from './authenticateUser.js' import registerUser from './registerUser.js' export default { + authenticateUser, registerUser } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/authenticateUser.js b/staff/angela-bernaldez/project/api/logic/authenticateUser.js new file mode 100644 index 000000000..daf4b104f --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/authenticateUser.js @@ -0,0 +1,23 @@ +import { Errors } from 'common' +import bcrypt from 'bcrypt' +import models from '../data/models.js' + +const { User } = models + +export default (email, password) => { + + // TODO: add validators + + return User.findOne({ email: email }) + .then((user) => { + if (!user) throw new Errors.ExistenceError('No user with this email') + return bcrypt.compare(password, user.password) + .then((isPasswordValid) => { + + if (!isPasswordValid) throw new Errors.CredentialsError('Wrong Password') + + return (user._id).toString() + + }).catch((error) => { throw new Errors.UnexpectedError(error.message) }) + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js b/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js new file mode 100644 index 000000000..d0bd45b28 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js @@ -0,0 +1,53 @@ +import 'dotenv/config' +import authenticateUser from './authenticateUser.js' +import { describe, it } from 'mocha' +import models from '../data/models.js' +import mongoose from 'mongoose' +import bcrypt from 'bcrypt' +import { expect } from 'chai' + +const { User } = models + +describe('authenticateUser', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)); + afterEach(() => User.deleteMany()); + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + it('returns id if user exists and password is correct', () => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'angelines', + email: 'angela-test@mail.com', + password: cryptPassword + } + return User.create(user) + .then((user) => { + return authenticateUser('angela-test@mail.com', '123456789') + .then((id) => { + expect(id).to.equal(user._id.toString()) + }) + }) + }) + }) + + it('throws error "Wrong password" if password wrong', () => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'angelines', + email: 'angela-test@mail.com', + password: cryptPassword + } + return User.create(user) + .then((user) => { + return authenticateUser('angela-test@mail.com', '123') + .then(() => {}) + .catch((error => { + expect(error.message).to.equal('Wrong Password') + })) + }) + }) + }) +}) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/index.js b/staff/angela-bernaldez/project/api/logic/index.js index 6ef48c1c0..b3ce25597 100644 --- a/staff/angela-bernaldez/project/api/logic/index.js +++ b/staff/angela-bernaldez/project/api/logic/index.js @@ -1,6 +1,8 @@ +import authenticateUser from './authenticateUser.js' import registerUser from './registerUser.js' export default { + authenticateUser, registerUser } diff --git a/staff/angela-bernaldez/project/api/package.json b/staff/angela-bernaldez/project/api/package.json index a4dbf4282..31d538bdf 100644 --- a/staff/angela-bernaldez/project/api/package.json +++ b/staff/angela-bernaldez/project/api/package.json @@ -6,7 +6,7 @@ "main": "index.js", "scripts": { "start": "node index.js", - "test": "mocha --timeout 10000 ./logic/*.spec.js" + "test": "mocha --timeout 50000 ./logic/*.spec.js" }, "keywords": [], "author": "", @@ -17,6 +17,7 @@ "common": "file:../common", "dotenv": "^16.4.7", "express": "^4.21.2", + "jsonwebtoken": "^9.0.2", "mocha": "^11.0.1", "mongoose": "^8.8.4" } diff --git a/staff/angela-bernaldez/project/api/pnpm-lock.yaml b/staff/angela-bernaldez/project/api/pnpm-lock.yaml index 10133b484..2f0a1da01 100644 --- a/staff/angela-bernaldez/project/api/pnpm-lock.yaml +++ b/staff/angela-bernaldez/project/api/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: express: specifier: ^4.21.2 version: 4.21.2 + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 mocha: specifier: ^11.0.1 version: 11.0.1 @@ -138,6 +141,9 @@ packages: resolution: {integrity: sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==} engines: {node: '>=16.20.1'} + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -275,6 +281,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -478,6 +487,16 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + kareem@2.6.3: resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} engines: {node: '>=12.0.0'} @@ -486,6 +505,27 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -1059,6 +1099,8 @@ snapshots: bson@6.10.1: {} + buffer-equal-constant-time@1.0.1: {} + bytes@3.1.2: {} call-bind-apply-helpers@1.0.0: @@ -1180,6 +1222,10 @@ snapshots: eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + ee-first@1.1.1: {} emoji-regex@8.0.0: {} @@ -1405,12 +1451,50 @@ snapshots: dependencies: argparse: 2.0.1 + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.6.3 + + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + kareem@2.6.3: {} locate-path@6.0.0: dependencies: p-locate: 5.0.0 + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.once@4.1.1: {} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 diff --git a/staff/angela-bernaldez/project/app/src/App.jsx b/staff/angela-bernaldez/project/app/src/App.jsx index d59ff6897..793b49259 100644 --- a/staff/angela-bernaldez/project/app/src/App.jsx +++ b/staff/angela-bernaldez/project/app/src/App.jsx @@ -2,6 +2,9 @@ import { Landing, LogIn, SignUp } from './pages' import { Route, Routes } from 'react-router-dom' import { ModalContext } from './context' +// import.meta.env. when using env variables +// env variables need to start with VITE_ + function App() { return ( diff --git a/staff/angela-bernaldez/project/common/errors.js b/staff/angela-bernaldez/project/common/errors.js index a234f6510..5622975d5 100644 --- a/staff/angela-bernaldez/project/common/errors.js +++ b/staff/angela-bernaldez/project/common/errors.js @@ -53,7 +53,7 @@ export class ServerError extends Error { /*SERVER ERRORS (on server side)*/ -/* + export class CredentialsError extends Error { constructor(message) { super(message); @@ -62,7 +62,7 @@ export class CredentialsError extends Error { } } } -*/ + export class DuplicityError extends Error { constructor(message) { super(message); @@ -92,7 +92,7 @@ export class AuthError extends Error { */ /*OTHER ERRORS*/ -/* + export class UnexpectedError extends Error { constructor(message) { super(message); @@ -101,7 +101,7 @@ export class UnexpectedError extends Error { } } } - +/* export class ContentError extends Error { constructor(message) { super(message); From 58e2f91cf0f3acf7dd43efa2da7f119f36d727eb Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Fri, 13 Dec 2024 19:53:41 +0000 Subject: [PATCH 09/45] add delete user api, delete user tests and authenticate user tests #251 --- .../project/api/handlers/authenticateUser.js | 12 +++--- .../project/api/handlers/deleteUser.js | 17 +++++++++ .../project/api/handlers/index.js | 2 + staff/angela-bernaldez/project/api/index.js | 5 +++ .../project/api/logic/deleteUser.js | 21 +++++++++++ .../project/api/logic/deleteUser.spec.js | 37 +++++++++++++++++++ .../project/api/logic/index.js | 2 + .../project/api/middlewares/errorHandler.js | 22 +++++++++++ .../project/api/middlewares/index.js | 5 +++ .../project/api/middlewares/verifyToken.js | 12 ++++++ .../project/api/tests/authenticate-user.sh | 3 ++ .../project/api/tests/delete-user.sh | 4 ++ .../angela-bernaldez/project/common/errors.js | 20 ++++------ 13 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers/deleteUser.js create mode 100644 staff/angela-bernaldez/project/api/logic/deleteUser.js create mode 100644 staff/angela-bernaldez/project/api/logic/deleteUser.spec.js create mode 100644 staff/angela-bernaldez/project/api/middlewares/errorHandler.js create mode 100644 staff/angela-bernaldez/project/api/middlewares/index.js create mode 100644 staff/angela-bernaldez/project/api/middlewares/verifyToken.js create mode 100644 staff/angela-bernaldez/project/api/tests/authenticate-user.sh create mode 100644 staff/angela-bernaldez/project/api/tests/delete-user.sh diff --git a/staff/angela-bernaldez/project/api/handlers/authenticateUser.js b/staff/angela-bernaldez/project/api/handlers/authenticateUser.js index d21cf3cb1..dc05219ea 100644 --- a/staff/angela-bernaldez/project/api/handlers/authenticateUser.js +++ b/staff/angela-bernaldez/project/api/handlers/authenticateUser.js @@ -7,13 +7,13 @@ export default (req, res, next) => { try { logic.authenticateUser(email, password) - .then((id) => { - const token = jwt.sign({ - id: id.toString() - }, process.env.JWT_SECRET) + .then((id) => { + const token = jwt.sign({ + id: id.toString() + }, process.env.JWT_SECRET) - res.status(200).json({ token: token })}) - .catch((error) => next(error)) + res.status(200).json({ token: token })}) + .catch((error) => next(error)) } catch (error) { next(error); } diff --git a/staff/angela-bernaldez/project/api/handlers/deleteUser.js b/staff/angela-bernaldez/project/api/handlers/deleteUser.js new file mode 100644 index 000000000..f0e59bdae --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers/deleteUser.js @@ -0,0 +1,17 @@ +import logic from '../logic/index.js' +import jwt from 'jsonwebtoken' + +export default(req, res, next) => { + + const id = req.id + const { password } = req.body + + try { + logic.deleteUser(id, password) + .then(() => { + res.status(200).send() + }).catch(error => next(error)) + } catch(error) { + next(error) + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/index.js b/staff/angela-bernaldez/project/api/handlers/index.js index 5227fc978..79da0cc18 100644 --- a/staff/angela-bernaldez/project/api/handlers/index.js +++ b/staff/angela-bernaldez/project/api/handlers/index.js @@ -1,7 +1,9 @@ import authenticateUser from './authenticateUser.js' +import deleteUser from './deleteUser.js' import registerUser from './registerUser.js' export default { authenticateUser, + deleteUser, registerUser } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index 0d4bd6ae1..202437093 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -1,6 +1,7 @@ import express, { json } from 'express' import mongoose from 'mongoose' import handlers from './handlers/index.js' +import { verifyToken } from './middlewares/index.js' import 'dotenv/config' @@ -13,6 +14,10 @@ mongoose.connect(process.env.MONGO_URI) server.post('/users', jsonBodyParser, handlers.registerUser) + server.post('/users/auth', jsonBodyParser, handlers.authenticateUser) + + server.delete('/users', verifyToken, jsonBodyParser, handlers.deleteUser) + server.listen(process.env.PORT, () => { console.info(`Server running on port: ${process.env.PORT}`) }) diff --git a/staff/angela-bernaldez/project/api/logic/deleteUser.js b/staff/angela-bernaldez/project/api/logic/deleteUser.js new file mode 100644 index 000000000..68d0c85d2 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/deleteUser.js @@ -0,0 +1,21 @@ +import { Errors } from 'common' +import bcrypt from 'bcrypt' +import models from '../data/models.js' + +const { User } = models + +export default (id, password) => { + + // TODO: add validators + + return User.findById(id) + .then(user => { + if (!user) throw new Errors.AuthError("User id don't belong to anyone") + return bcrypt.compare(password, user.password) + .then(isPasswordValid => { + if (!isPasswordValid) throw new Errors.CredentialsError("Wrong credentials") + return User.findByIdAndDelete(id) + .catch((error) => { throw new Errors.UnexpectedError(error.message) }) + }) + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/deleteUser.spec.js b/staff/angela-bernaldez/project/api/logic/deleteUser.spec.js new file mode 100644 index 000000000..b35a323bf --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/deleteUser.spec.js @@ -0,0 +1,37 @@ +import 'dotenv/config' +import deleteUser from './deleteUser.js' +import { describe, it } from 'mocha' +import models from '../data/models.js' +import mongoose from 'mongoose' +import bcrypt from 'bcrypt' +import { expect } from 'chai' + +const { User } = models + +describe('deleteUser', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + it('deletes user if exists and password is correct', () => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'NameTest', + email: 'nametest@mail.com', + password: cryptPassword + } + return User.create(user) + .then((user) => { + const id = user._id.toString() + return deleteUser(id, '123456789') + .then(() => { + User.findById(id).then((user) => { + expect(user).to.be(null) + }) + }) + }) + }) + }) +}) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/index.js b/staff/angela-bernaldez/project/api/logic/index.js index b3ce25597..8d8b07f2f 100644 --- a/staff/angela-bernaldez/project/api/logic/index.js +++ b/staff/angela-bernaldez/project/api/logic/index.js @@ -1,8 +1,10 @@ import authenticateUser from './authenticateUser.js' +import deleteUser from './deleteUser.js' import registerUser from './registerUser.js' export default { authenticateUser, + deleteUser, registerUser } diff --git a/staff/angela-bernaldez/project/api/middlewares/errorHandler.js b/staff/angela-bernaldez/project/api/middlewares/errorHandler.js new file mode 100644 index 000000000..204d41ab6 --- /dev/null +++ b/staff/angela-bernaldez/project/api/middlewares/errorHandler.js @@ -0,0 +1,22 @@ +import { Errors } from 'common' + +export default (error, req, res, next) => { + let code = 500 + + if (error instanceof Errors.EmailNotValidError || error instanceof Errors.UsernameNotValidError || error instanceof Errors.PasswordNotValidError || error instanceof Errors.ContentError) { + code = 400 + } + if (error instanceof Errors.CredentialsError || error instanceof Errors.AuthError) { + code = 401 + } + if (error instanceof Errors.DuplicityError) { + code = 409 + } + if (error instanceof Errors.ExistenceError) { + code = 404 + } + + console.error(error) + + res.status(code).json({ name: error.constructor.name, message: error.message }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/middlewares/index.js b/staff/angela-bernaldez/project/api/middlewares/index.js new file mode 100644 index 000000000..149adcdef --- /dev/null +++ b/staff/angela-bernaldez/project/api/middlewares/index.js @@ -0,0 +1,5 @@ +import verifyToken from './verifyToken.js' + +export { + verifyToken +} diff --git a/staff/angela-bernaldez/project/api/middlewares/verifyToken.js b/staff/angela-bernaldez/project/api/middlewares/verifyToken.js new file mode 100644 index 000000000..dc1eb6ac9 --- /dev/null +++ b/staff/angela-bernaldez/project/api/middlewares/verifyToken.js @@ -0,0 +1,12 @@ +import jwt from 'jsonwebtoken' + +export default (req, res, next) => { + const token = req.headers.authorization + + const { id } = jwt.verify(token.split(" ")[1], process.env.JWT_SECRET) + + req.id = id + + next() +} + diff --git a/staff/angela-bernaldez/project/api/tests/authenticate-user.sh b/staff/angela-bernaldez/project/api/tests/authenticate-user.sh new file mode 100644 index 000000000..bfcb604df --- /dev/null +++ b/staff/angela-bernaldez/project/api/tests/authenticate-user.sh @@ -0,0 +1,3 @@ +curl -X POST http://localhost:4321/users/auth \ + -H "Content-Type: application/json" \ + -d '{"email":"maria@gmail.com", "password": "123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/delete-user.sh b/staff/angela-bernaldez/project/api/tests/delete-user.sh new file mode 100644 index 000000000..226a0a75e --- /dev/null +++ b/staff/angela-bernaldez/project/api/tests/delete-user.sh @@ -0,0 +1,4 @@ +curl -X DELETE http://localhost:4321/users \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NWIzOTZlNTQxMDBhNGMwMGFjODU5NSIsImlhdCI6MTczNDExOTMwMn0.h9HUcTFf6bAH2XRMvkSwAlxeWRfjVA3pP2tsNB0sJRo" \ + -d '{"password":"123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/common/errors.js b/staff/angela-bernaldez/project/common/errors.js index 5622975d5..2528ae3c9 100644 --- a/staff/angela-bernaldez/project/common/errors.js +++ b/staff/angela-bernaldez/project/common/errors.js @@ -1,3 +1,7 @@ + +// REVIEW if ContentError is needed +// May need to add/create aditional errors + /*FORMAT ERRORS*/ export class EmailNotValidError extends Error { constructor(message) { @@ -17,7 +21,7 @@ export class PasswordNotValidError extends Error { } } -/* + export class UsernameNotValidError extends Error { constructor(message) { super(message); @@ -28,10 +32,8 @@ export class UsernameNotValidError extends Error { } -*/ - /*SERVER ERRORS (on client side)*/ -/* + export class BadRequestError extends Error { constructor(message) { super(message); @@ -49,11 +51,8 @@ export class ServerError extends Error { } } } -*/ - /*SERVER ERRORS (on server side)*/ - export class CredentialsError extends Error { constructor(message) { super(message); @@ -71,7 +70,6 @@ export class DuplicityError extends Error { } } } -/* export class ExistenceError extends Error { constructor(message) { super(message); @@ -89,10 +87,8 @@ export class AuthError extends Error { } } } -*/ /*OTHER ERRORS*/ - export class UnexpectedError extends Error { constructor(message) { super(message); @@ -101,7 +97,7 @@ export class UnexpectedError extends Error { } } } -/* + export class ContentError extends Error { constructor(message) { super(message); @@ -119,4 +115,4 @@ export class ConfirmationError extends Error { } } } -*/ + From dbac065c3756e3bd1072a6ad7b2212d03d908b8f Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Fri, 13 Dec 2024 20:16:04 +0000 Subject: [PATCH 10/45] add registerUser logic app #251 --- .../project/app/src/assets/react.svg | 1 - .../project/app/src/logic/index.js | 5 +++ .../project/app/src/logic/registerUser.js | 32 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) delete mode 100644 staff/angela-bernaldez/project/app/src/assets/react.svg create mode 100644 staff/angela-bernaldez/project/app/src/logic/index.js create mode 100644 staff/angela-bernaldez/project/app/src/logic/registerUser.js diff --git a/staff/angela-bernaldez/project/app/src/assets/react.svg b/staff/angela-bernaldez/project/app/src/assets/react.svg deleted file mode 100644 index 6c87de9bb..000000000 --- a/staff/angela-bernaldez/project/app/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic/index.js b/staff/angela-bernaldez/project/app/src/logic/index.js new file mode 100644 index 000000000..3b61bcf4c --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic/index.js @@ -0,0 +1,5 @@ +import registerUser from './registerUser.js' + +export default { + registerUser +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic/registerUser.js b/staff/angela-bernaldez/project/app/src/logic/registerUser.js new file mode 100644 index 000000000..7486b8f8b --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic/registerUser.js @@ -0,0 +1,32 @@ +import { Errors } from 'common' + +const registerUser = ({ username, email, password, repeatPassword}) => { + // TODO: add validators + + const user = { + username, + email, + password + } + + return fetch(`${process.env.VITE_API_URL}users`, { + method: 'POST', + headers: { + 'Content-type': 'application/json' + }, + body: JSON.stringify(user) + }) + .then((res) => { + if (res.status === 201) return + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) + }) + .catch((error) => { + if (error instanceof TypeError) + throw new Errors.ServerError('Server in not connected') + throw error + }) +} \ No newline at end of file From 89c5cd3c4c9bad9ce6bb7014c374fd5ad791b6d6 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Wed, 18 Dec 2024 19:29:59 +0100 Subject: [PATCH 11/45] fix issues and add pages new structure #251 --- .../project/api/handlers/registerUser.js | 3 +- staff/angela-bernaldez/project/api/index.js | 6 +- .../project/api/middlewares/index.js | 2 + .../angela-bernaldez/project/api/package.json | 1 + .../project/api/pnpm-lock.yaml | 12 + .../project/api/tests/register-user.sh | 2 +- .../angela-bernaldez/project/app/package.json | 6 +- .../project/app/pnpm-lock.yaml | 13813 ++++++++++++---- .../angela-bernaldez/project/app/src/App.jsx | 20 +- .../{ => Forms}/FormErrorsSection.jsx | 2 +- .../app/src/components/Forms/LogInForm.jsx | 46 + .../app/src/components/Forms/SignUpForm.jsx | 38 + .../app/src/components/{ => Forms}/index.jsx | 0 .../project/app/src/components/LogInForm.jsx | 146 - .../project/app/src/components/SignUpForm.jsx | 198 - .../app/src/components/{ => icons}/icons.jsx | 0 .../project/app/src/logic/authenticateUser.js | 31 + .../project/app/src/logic/index.js | 10 +- .../project/app/src/logic/isUserLoggedIn.js | 4 + .../project/app/src/logic/registerUser.js | 14 +- .../project/app/src/pages/Authenticated.jsx | 0 .../project/app/src/pages/LogIn.jsx | 39 - .../project/app/src/pages/Public.jsx | 17 + .../project/app/src/pages/SignUp.jsx | 39 - .../src/pages/{ => publicPages}/Landing.jsx | 0 .../app/src/pages/publicPages/LogIn.jsx | 12 + .../app/src/pages/publicPages/SignUp.jsx | 13 + .../app/src/pages/{ => publicPages}/index.jsx | 0 .../angela-bernaldez/project/common/index.js | 5 +- .../project/common/validator.js | 51 + 30 files changed, 11274 insertions(+), 3256 deletions(-) rename staff/angela-bernaldez/project/app/src/components/{ => Forms}/FormErrorsSection.jsx (94%) create mode 100644 staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx rename staff/angela-bernaldez/project/app/src/components/{ => Forms}/index.jsx (100%) delete mode 100644 staff/angela-bernaldez/project/app/src/components/LogInForm.jsx delete mode 100644 staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx rename staff/angela-bernaldez/project/app/src/components/{ => icons}/icons.jsx (100%) create mode 100644 staff/angela-bernaldez/project/app/src/logic/authenticateUser.js create mode 100644 staff/angela-bernaldez/project/app/src/logic/isUserLoggedIn.js create mode 100644 staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx delete mode 100644 staff/angela-bernaldez/project/app/src/pages/LogIn.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/Public.jsx delete mode 100644 staff/angela-bernaldez/project/app/src/pages/SignUp.jsx rename staff/angela-bernaldez/project/app/src/pages/{ => publicPages}/Landing.jsx (100%) create mode 100644 staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/publicPages/SignUp.jsx rename staff/angela-bernaldez/project/app/src/pages/{ => publicPages}/index.jsx (100%) create mode 100644 staff/angela-bernaldez/project/common/validator.js diff --git a/staff/angela-bernaldez/project/api/handlers/registerUser.js b/staff/angela-bernaldez/project/api/handlers/registerUser.js index ca29c7ed1..0c8bdb251 100644 --- a/staff/angela-bernaldez/project/api/handlers/registerUser.js +++ b/staff/angela-bernaldez/project/api/handlers/registerUser.js @@ -3,6 +3,8 @@ import logic from '../logic/index.js' export default(req, res, next) => { const { username, email, password } = req.body + console.log(username, email, password) + try { logic.registerUser(username, email, password) .then(() => res.status(201).send()) @@ -10,5 +12,4 @@ export default(req, res, next) => { } catch(error) { next(error) } - } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index 202437093..e56629067 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -1,7 +1,8 @@ +import cors from 'cors' import express, { json } from 'express' import mongoose from 'mongoose' import handlers from './handlers/index.js' -import { verifyToken } from './middlewares/index.js' +import { errorHandler, verifyToken } from './middlewares/index.js' import 'dotenv/config' @@ -11,6 +12,7 @@ mongoose.connect(process.env.MONGO_URI) const server = express() const jsonBodyParser = json() + server.use(cors()) server.post('/users', jsonBodyParser, handlers.registerUser) @@ -18,6 +20,8 @@ mongoose.connect(process.env.MONGO_URI) server.delete('/users', verifyToken, jsonBodyParser, handlers.deleteUser) + server.use(errorHandler) + server.listen(process.env.PORT, () => { console.info(`Server running on port: ${process.env.PORT}`) }) diff --git a/staff/angela-bernaldez/project/api/middlewares/index.js b/staff/angela-bernaldez/project/api/middlewares/index.js index 149adcdef..265342215 100644 --- a/staff/angela-bernaldez/project/api/middlewares/index.js +++ b/staff/angela-bernaldez/project/api/middlewares/index.js @@ -1,5 +1,7 @@ +import errorHandler from './errorHandler.js' import verifyToken from './verifyToken.js' export { + errorHandler, verifyToken } diff --git a/staff/angela-bernaldez/project/api/package.json b/staff/angela-bernaldez/project/api/package.json index 31d538bdf..5de8a8428 100644 --- a/staff/angela-bernaldez/project/api/package.json +++ b/staff/angela-bernaldez/project/api/package.json @@ -15,6 +15,7 @@ "bcrypt": "^5.1.1", "chai": "^5.1.2", "common": "file:../common", + "cors": "^2.8.5", "dotenv": "^16.4.7", "express": "^4.21.2", "jsonwebtoken": "^9.0.2", diff --git a/staff/angela-bernaldez/project/api/pnpm-lock.yaml b/staff/angela-bernaldez/project/api/pnpm-lock.yaml index 2f0a1da01..f05d3f482 100644 --- a/staff/angela-bernaldez/project/api/pnpm-lock.yaml +++ b/staff/angela-bernaldez/project/api/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: common: specifier: file:../common version: file:../common + cors: + specifier: ^2.8.5 + version: 2.8.5 dotenv: specifier: ^16.4.7 version: 16.4.7 @@ -218,6 +221,10 @@ packages: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1176,6 +1183,11 @@ snapshots: cookie@0.7.1: {} + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 diff --git a/staff/angela-bernaldez/project/api/tests/register-user.sh b/staff/angela-bernaldez/project/api/tests/register-user.sh index 14ebbb75a..91f88a97e 100644 --- a/staff/angela-bernaldez/project/api/tests/register-user.sh +++ b/staff/angela-bernaldez/project/api/tests/register-user.sh @@ -1,3 +1,3 @@ curl -X POST http://localhost:4321/users \ -H "Content-Type: application/json" \ - -d '{"username":"maria", "email":"maria@gmail.com","password":"123456789"}' -v \ No newline at end of file + -d '{"username":"maria", "email":"mariabb@gmail.com","password":"123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/package.json b/staff/angela-bernaldez/project/app/package.json index 1ab40102c..cc07f20a2 100644 --- a/staff/angela-bernaldez/project/app/package.json +++ b/staff/angela-bernaldez/project/app/package.json @@ -14,10 +14,14 @@ "common": "file:../common", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-router-dom": "^7.0.2" + "react-router": "^7.0.2", + "react-router-dom": "^7.0.2", + "react-scripts": "^5.0.1", + "react-use": "^17.6.0" }, "devDependencies": { "@eslint/js": "^9.15.0", + "@tailwindcss/typography": "0.5.15", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "@vitejs/plugin-react": "^4.3.4", diff --git a/staff/angela-bernaldez/project/app/pnpm-lock.yaml b/staff/angela-bernaldez/project/app/pnpm-lock.yaml index 3735cc52f..1b9f1a8bb 100644 --- a/staff/angela-bernaldez/project/app/pnpm-lock.yaml +++ b/staff/angela-bernaldez/project/app/pnpm-lock.yaml @@ -20,18 +20,24 @@ importers: react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + react-router: + specifier: ^7.0.2 + version: 7.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-router-dom: specifier: ^7.0.2 version: 7.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - tailwind: - specifier: ^4.0.0 - version: 4.0.0 + react-scripts: + specifier: ^5.0.1 + version: 5.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0))(@types/babel__core@7.20.5)(eslint@9.16.0(jiti@1.21.6))(react@18.3.1)(type-fest@0.21.3)(typescript@4.9.5) + react-use: + specifier: ^17.6.0 + version: 17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@eslint/js': specifier: ^9.15.0 version: 9.16.0 '@tailwindcss/typography': - specifier: ^0.5.15 + specifier: 0.5.15 version: 0.5.15(tailwindcss@3.4.12) '@types/react': specifier: ^18.3.12 @@ -41,7 +47,7 @@ importers: version: 18.3.2 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.0.3(jiti@1.21.6)(yaml@2.6.1)) + version: 4.3.4(vite@6.0.3(@types/node@22.10.2)(jiti@1.21.6)(terser@5.37.0)(yaml@2.6.1)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) @@ -71,7 +77,7 @@ importers: version: 3.4.12 vite: specifier: ^6.0.1 - version: 6.0.3(jiti@1.21.6)(yaml@2.6.1) + version: 6.0.3(@types/node@22.10.2)(jiti@1.21.6)(terser@5.37.0)(yaml@2.6.1) packages: @@ -83,6 +89,12 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@apideck/better-ajv-errors@0.3.6': + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -95,14 +107,46 @@ packages: resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} + '@babel/eslint-parser@7.25.9': + resolution: {integrity: sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + '@babel/generator@7.26.3': resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.9': resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.26.3': + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.3': + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} @@ -113,10 +157,30 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.25.9': resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} @@ -129,6 +193,10 @@ packages: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.26.0': resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} @@ -138,3870 +206,11034 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.1.2': - resolution: {integrity: sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==} + '@babel/core': ^7.0.0 - '@babel/runtime@7.2.0': - resolution: {integrity: sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@babel/runtime@7.3.4': - resolution: {integrity: sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + '@babel/plugin-proposal-class-properties@7.18.6': + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/types@7.26.3': - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + '@babel/plugin-proposal-decorators@7.25.9': + resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/aix-ppc64@0.24.0': - resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/android-arm64@0.24.0': - resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] + '@babel/plugin-proposal-numeric-separator@7.18.6': + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/android-arm@0.24.0': - resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] + '@babel/plugin-proposal-optional-chaining@7.21.0': + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/android-x64@0.24.0': - resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/darwin-arm64@0.24.0': - resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/darwin-x64@0.24.0': - resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] + '@babel/plugin-proposal-private-property-in-object@7.21.11': + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/freebsd-arm64@0.24.0': - resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/freebsd-x64@0.24.0': - resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-arm64@0.24.0': - resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-arm@0.24.0': - resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-ia32@0.24.0': - resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] + '@babel/plugin-syntax-decorators@7.25.9': + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-loong64@0.24.0': - resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] + '@babel/plugin-syntax-flow@7.26.0': + resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-mips64el@0.24.0': - resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-ppc64@0.24.0': - resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-riscv64@0.24.0': - resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-s390x@0.24.0': - resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/linux-x64@0.24.0': - resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/netbsd-x64@0.24.0': - resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/openbsd-arm64@0.24.0': - resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/openbsd-x64@0.24.0': - resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/sunos-x64@0.24.0': - resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/win32-arm64@0.24.0': - resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/win32-ia32@0.24.0': - resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@esbuild/win32-x64@0.24.0': - resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@babel/core': ^7.0.0-0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint/config-array@0.19.1': - resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@eslint/core@0.9.1': - resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@babel/plugin-transform-async-generator-functions@7.25.9': + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint/js@9.16.0': - resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint/object-schema@2.1.5': - resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@babel/plugin-transform-block-scoped-functions@7.25.9': + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint/plugin-kit@0.2.4': - resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} - engines: {node: '>=18.18'} + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@babel/plugin-transform-exponentiation-operator@7.26.3': + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@babel/plugin-transform-flow-strip-types@7.25.9': + resolution: {integrity: sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@babel/plugin-transform-for-of@7.25.9': + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-android-arm-eabi@4.28.1': - resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} - cpu: [arm] - os: [android] + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-android-arm64@4.28.1': - resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} - cpu: [arm64] - os: [android] + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-darwin-arm64@4.28.1': - resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} - cpu: [arm64] - os: [darwin] + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-darwin-x64@4.28.1': - resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} - cpu: [x64] - os: [darwin] + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-freebsd-arm64@4.28.1': - resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} - cpu: [arm64] - os: [freebsd] + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-freebsd-x64@4.28.1': - resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} - cpu: [x64] - os: [freebsd] + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-arm-gnueabihf@4.28.1': - resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} - cpu: [arm] - os: [linux] + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-arm-musleabihf@4.28.1': - resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} - cpu: [arm] - os: [linux] + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@rollup/rollup-linux-arm64-gnu@4.28.1': - resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} - cpu: [arm64] - os: [linux] + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-arm64-musl@4.28.1': - resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} - cpu: [arm64] - os: [linux] + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-loongarch64-gnu@4.28.1': - resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} - cpu: [loong64] - os: [linux] + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': - resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} - cpu: [ppc64] - os: [linux] + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-riscv64-gnu@4.28.1': - resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} - cpu: [riscv64] - os: [linux] + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-s390x-gnu@4.28.1': - resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} - cpu: [s390x] - os: [linux] + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-x64-gnu@4.28.1': - resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} - cpu: [x64] - os: [linux] + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-linux-x64-musl@4.28.1': - resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} - cpu: [x64] - os: [linux] + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-win32-arm64-msvc@4.28.1': - resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} - cpu: [arm64] - os: [win32] + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-win32-ia32-msvc@4.28.1': - resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} - cpu: [ia32] - os: [win32] + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@rollup/rollup-win32-x64-msvc@4.28.1': - resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} - cpu: [x64] - os: [win32] + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@tailwindcss/typography@0.5.15': - resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} + '@babel/plugin-transform-react-constant-elements@7.25.9': + resolution: {integrity: sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==} + engines: {node: '>=6.9.0'} peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@babel/core': ^7.0.0-0 - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@babel/plugin-transform-react-display-name@7.25.9': + resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@babel/plugin-transform-react-jsx-development@7.25.9': + resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@babel/plugin-transform-react-jsx@7.25.9': + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@babel/plugin-transform-react-pure-annotations@7.25.9': + resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@types/react-dom@18.3.2': - resolution: {integrity: sha512-Fqp+rcvem9wEnGr3RY8dYNvSQ8PoLqjZ9HLgaPUOjJJD120uDyOxOjc/39M4Kddp9JQCxpGQbnhVQF0C0ncYVg==} + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@types/react@18.3.14': - resolution: {integrity: sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==} + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@vitejs/plugin-react@4.3.4': - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} - engines: {node: ^14.18.0 || >=16.0.0} + '@babel/plugin-transform-runtime@7.25.9': + resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} + engines: {node: '>=6.9.0'} peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + '@babel/core': ^7.0.0-0 - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@babel/core': ^7.0.0-0 - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - ajv@6.10.0: - resolution: {integrity: sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==} + '@babel/plugin-transform-template-literals@7.25.9': + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + '@babel/plugin-transform-typeof-symbol@7.25.9': + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - amqplib@0.5.2: - resolution: {integrity: sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==} - engines: {node: '>=0.8 <=9'} + '@babel/plugin-transform-typescript@7.26.3': + resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + '@babel/preset-env@7.26.0': + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + '@babel/preset-react@7.26.3': + resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - app-root-path@2.1.0: - resolution: {integrity: sha512-z5BqVjscbjmJBybKlICogJR2jCr2q/Ixu7Pvui5D4y97i7FLsJlvEG9XOR/KJRlkxxZz7UaaS2TMwQh1dRJ2dA==} - engines: {node: '>= 4.0.0'} + '@babel/preset-typescript@7.26.0': + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + '@babel/runtime@7.3.4': + resolution: {integrity: sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + engines: {node: '>=6.9.0'} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + engines: {node: '>=6.9.0'} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + '@csstools/normalize.css@12.1.1': + resolution: {integrity: sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + '@csstools/postcss-cascade-layers@1.1.1': + resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - array.prototype.reduce@1.0.7: - resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} - engines: {node: '>= 0.4'} + '@csstools/postcss-color-function@1.1.1': + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + '@csstools/postcss-font-format-keywords@1.0.1': + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + '@csstools/postcss-hwb-function@1.0.2': + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - asn1@0.2.3: - resolution: {integrity: sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w==} + '@csstools/postcss-ic-unit@1.0.1': + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + '@csstools/postcss-is-pseudo-class@2.0.7': + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - async-retry@1.2.3: - resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==} + '@csstools/postcss-nested-calc@1.0.0': + resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true + '@csstools/postcss-normalize-display-values@1.0.1': + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} peerDependencies: - postcss: ^8.1.0 + postcss: ^8.2 - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + '@csstools/postcss-oklab-function@1.1.1': + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - babel-runtime@6.26.0: - resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + '@csstools/postcss-progressive-custom-properties@1.3.0': + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + '@csstools/postcss-stepped-value-functions@1.0.1': + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - basic-auth@2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} + '@csstools/postcss-text-decoration-shorthand@1.0.0': + resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} + '@csstools/postcss-trigonometric-functions@1.0.2': + resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} + engines: {node: ^14 || >=16} + peerDependencies: + postcss: ^8.2 - bitsyntax@0.0.4: - resolution: {integrity: sha512-Pav3HSZXD2NLQOWfJldY3bpJLt8+HS2nUo5Z1bLLmHg2vCE/cM1qfEvNjlYo7GgYQPneNr715Bh42i01ZHZPvw==} - engines: {node: '>=0.6'} + '@csstools/postcss-unset-value@1.0.2': + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 - bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + '@csstools/selector-specificity@2.2.0': + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 - body-parser@1.18.3: - resolution: {integrity: sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==} - engines: {node: '>= 0.8'} + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - buffer-more-ints@0.0.2: - resolution: {integrity: sha512-PDgX2QJgUc5+Jb2xAoBFP5MxhtVUmZHR33ak+m/SDxRdCrbnX1BggRIaxiW7ImwfmO4iJeCQKN18ToSXWGjYkA==} + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - - call-bind-apply-helpers@1.0.0: - resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - caniuse-lite@1.0.30001687: - resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - chalk@2.4.1: - resolution: {integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==} - engines: {node: '>=4'} + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] - commands-events@1.0.4: - resolution: {integrity: sha512-HdP/+1Anoc7z+6L2h7nd4Imz54+LW+BjMGt30riBZrZ3ZeP/8el93wD8Jj8ltAaqVslqNgjX6qlhSBJwuDSmpg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] - common@file:../common: - resolution: {directory: ../common, type: directory} + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] - comparejs@1.0.0: - resolution: {integrity: sha512-Ue/Zd9aOucHzHXwaCe4yeHR7jypp7TKrIBZ5yls35nPNiVXlW14npmNVKM1ZaLlQTKZ6/4ewA//gYKHHIwCpOw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] - compression@1.7.3: - resolution: {integrity: sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==} - engines: {node: '>= 0.8.0'} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - content-disposition@0.5.2: - resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} - engines: {node: '>= 0.6'} + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - content-type@1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + '@eslint/js@9.16.0': + resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - cookie@0.3.1: - resolution: {integrity: sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==} - engines: {node: '>= 0.6'} + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} - engines: {node: '>=18'} + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - core-js@2.6.12: - resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} - deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} - crypto2@2.0.0: - resolution: {integrity: sha512-jdXdAgdILldLOF53md25FiQ6ybj2kUFTiRjs7msKTUoZrzgT/M1FPX5dYGJjbbwFls+RJIiZxNTC02DE/8y0ZQ==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} - css-selector-tokenizer@0.8.0: - resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} - culori@3.3.0: - resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + '@jest/console@27.5.1': + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - daisyui@4.12.20: - resolution: {integrity: sha512-uHr3SQsd2yTjRdVuswTiqGFvZTxX0sGSBRa8JJdbKgmZCk/kRFh4B7Z2jg9vLIdwsHTHPyPgCkZadQo1ce0tAw==} - engines: {node: '>=16.9.0'} + '@jest/console@28.1.3': + resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + '@jest/core@27.5.1': + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + '@jest/environment@27.5.1': + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + '@jest/fake-timers@27.5.1': + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - datasette@1.0.1: - resolution: {integrity: sha512-aJdlCBToEJUP4M57r67r4V6tltwGKa3qetnjpBtXYIlqbX9tM9jsoDMxb4xd9AGjpp3282oHRmqI5Z8TVAU0Mg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@jest/globals@27.5.1': + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + '@jest/reporters@27.5.1': + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: - supports-color: '*' + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: - supports-color: + node-notifier: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + '@jest/schemas@28.1.3': + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + '@jest/source-map@27.5.1': + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + '@jest/test-result@27.5.1': + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + '@jest/test-result@28.1.3': + resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} + '@jest/test-sequencer@27.5.1': + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - destroy@1.0.4: - resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} + '@jest/transform@27.5.1': + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + '@jest/types@27.5.1': + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + '@jest/types@28.1.3': + resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} - draht@1.0.1: - resolution: {integrity: sha512-yNNHL864dniNmIE9ZKD++mKypiAUAvVZtyV0QrbXH/ak3ebzFqo5xsmRBRqV8pZVhImOSBiyq500Wcmrf44zAg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - dunder-proto@1.0.0: - resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} - engines: {node: '>= 0.4'} + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - electron-to-chromium@1.5.71: - resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} - es-abstract@1.23.5: - resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} - engines: {node: '>= 0.4'} + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} - es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + '@pmmmwh/react-refresh-webpack-plugin@0.5.15': + resolution: {integrity: sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x || 5.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true - es-iterator-helpers@1.2.0: - resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} - engines: {node: '>= 0.4'} + '@rollup/plugin-node-resolve@11.2.1': + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} + cpu: [arm] + os: [android] - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} + cpu: [arm64] + os: [android] - esbuild@0.24.0: - resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} - engines: {node: '>=18'} - hasBin: true + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} + cpu: [arm64] + os: [darwin] - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} + cpu: [x64] + os: [darwin] - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} + cpu: [arm64] + os: [freebsd] - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} + cpu: [x64] + os: [freebsd] - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} + cpu: [arm] + os: [linux] - eslint-plugin-react-hooks@5.1.0: - resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} + cpu: [arm] + os: [linux] - eslint-plugin-react-refresh@0.4.16: - resolution: {integrity: sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==} - peerDependencies: - eslint: '>=8.40' + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} + cpu: [arm64] + os: [linux] - eslint-plugin-react@7.37.2: - resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} + cpu: [arm64] + os: [linux] - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} + cpu: [ppc64] + os: [linux] - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} + cpu: [riscv64] + os: [linux] - eslint@9.16.0: - resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} + cpu: [s390x] + os: [linux] - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} + cpu: [x64] + os: [linux] - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} + cpu: [x64] + os: [linux] - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} + cpu: [arm64] + os: [win32] - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} + cpu: [ia32] + os: [win32] - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} + cpu: [x64] + os: [win32] - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - eventemitter2@5.0.1: - resolution: {integrity: sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==} + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} - express@4.16.4: - resolution: {integrity: sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==} - engines: {node: '>= 0.10.0'} + '@sinclair/typebox@0.24.51': + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - fast-deep-equal@2.0.1: - resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + '@sinonjs/commons@1.8.6': + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + '@sinonjs/fake-timers@8.1.0': + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + '@svgr/babel-plugin-add-jsx-attribute@5.4.0': + resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} + engines: {node: '>=10'} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + '@svgr/babel-plugin-remove-jsx-attribute@5.4.0': + resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} + engines: {node: '>=10'} - fastparse@1.1.2: - resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} + '@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1': + resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} + engines: {node: '>=10'} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + '@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1': + resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} + engines: {node: '>=10'} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + '@svgr/babel-plugin-svg-dynamic-title@5.4.0': + resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} + engines: {node: '>=10'} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + '@svgr/babel-plugin-svg-em-dimensions@5.4.0': + resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} + engines: {node: '>=10'} - finalhandler@1.1.1: - resolution: {integrity: sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==} - engines: {node: '>= 0.8'} + '@svgr/babel-plugin-transform-react-native-svg@5.4.0': + resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} + engines: {node: '>=10'} - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + '@svgr/babel-plugin-transform-svg-component@5.5.0': + resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} + engines: {node: '>=10'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + '@svgr/babel-preset@5.5.0': + resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} engines: {node: '>=10'} - flaschenpost@1.1.3: - resolution: {integrity: sha512-1VAYPvDsVBGFJyUrOa/6clnJwZYC3qVq9nJLcypy6lvaaNbo1wOQiH8HQ+4Fw/k51pVG7JHzSf5epb8lmIW86g==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - hasBin: true + '@svgr/core@5.5.0': + resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} + engines: {node: '>=10'} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + '@svgr/hast-util-to-babel-ast@5.5.0': + resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} + engines: {node: '>=10'} - flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + '@svgr/plugin-jsx@5.5.0': + resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} + engines: {node: '>=10'} - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + '@svgr/plugin-svgo@5.5.0': + resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} + engines: {node: '>=10'} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} + '@svgr/webpack@5.5.0': + resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} + engines: {node: '>=10'} - formats@1.0.0: - resolution: {integrity: sha512-For0Y8egwEK96JgJo4NONErPhtl7H2QzeB2NYGmzeGeJ8a1JZqPgLYOtM3oJRCYhmgsdDFd6KGRYyfe37XY4Yg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@tailwindcss/typography@0.5.15': + resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + '@types/bonjour@3.5.13': + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + '@types/connect-history-api-fallback@1.5.4': + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + '@types/eslint@8.56.12': + resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - globals@15.13.0: - resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} - engines: {node: '>=18'} + '@types/express-serve-static-core@4.19.6': + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + '@types/express-serve-static-core@5.0.2': + resolution: {integrity: sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==} - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + '@types/html-minifier-terser@6.1.0': + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + '@types/http-proxy@1.17.15': + resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - hase@2.0.0: - resolution: {integrity: sha512-L83pBR/oZvQQNjv4kw9aUpTqBxERPiY7B42jsmkt1VDeUaRVhYkEIKzkCqrppjtxHe2EZqzZJzuhMXsWsxYIsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@types/js-cookie@2.2.7': + resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - iconv-lite@0.4.23: - resolution: {integrity: sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==} - engines: {node: '>=0.10.0'} + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + '@types/node@22.10.2': + resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + '@types/prettier@2.7.3': + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + '@types/q@1.5.8': + resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} + '@types/qs@6.9.17': + resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + '@types/react-dom@18.3.2': + resolution: {integrity: sha512-Fqp+rcvem9wEnGr3RY8dYNvSQ8PoLqjZ9HLgaPUOjJJD120uDyOxOjc/39M4Kddp9JQCxpGQbnhVQF0C0ncYVg==} - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} + '@types/react@18.3.14': + resolution: {integrity: sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - is-boolean-object@1.2.0: - resolution: {integrity: sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==} - engines: {node: '>= 0.4'} + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + '@types/serve-index@1.9.4': + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + '@types/sockjs@0.3.36': + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - is-finalizationregistry@1.1.0: - resolution: {integrity: sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==} - engines: {node: '>= 0.4'} + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + '@types/ws@8.5.13': + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} + '@types/yargs@16.0.9': + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - is-number-object@1.1.0: - resolution: {integrity: sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==} - engines: {node: '>= 0.4'} + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + '@typescript-eslint/experimental-utils@5.62.0': + resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - is-regex@1.2.0: - resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} - engines: {node: '>= 0.4'} + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - is-string@1.1.0: - resolution: {integrity: sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==} - engines: {node: '>= 0.4'} + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - is-symbol@1.1.0: - resolution: {integrity: sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==} - engines: {node: '>= 0.4'} + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} - engines: {node: '>= 0.4'} + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} - hasBin: true + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - json-lines@1.0.0: - resolution: {integrity: sha512-ytuLZb4RBQb3bTRsG/QBenyIo5oHLpjeCVph3s2NnoAsZE9K6h+uR+OWpEOWV1UeHdX63tYctGppBpGAc+JNMA==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + '@xobotyi/scrollbar-width@1.9.5': + resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - jsonwebtoken@8.5.0: - resolution: {integrity: sha512-IqEycp0znWHNA11TpYi77bVgyBO/pGESDh7Ajhas+u0ttkGkKYIIAjniL4Bw5+oVejVF+SYkaI7XKfwCCyeTuA==} - engines: {node: '>=4', npm: '>=1.4.28'} + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead - jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true - limes@2.0.0: - resolution: {integrity: sha512-evWD0pnTgPX7QueaSoJl5JBUL30T1ZVzo34ke97tIKmeagqhBTYK/JkKL0vtG3MpNApw8ZY9TlbybfwEz9knBA==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} - lodash.castarray@4.4.0: - resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true - lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 - lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 - lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + ansi-html@0.0.9: + resolution: {integrity: sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==} + engines: {'0': node >= 0.8.0} + hasBin: true - lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} - lodash@4.17.11: - resolution: {integrity: sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} - lodash@4.17.5: - resolution: {integrity: sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} - lusca@1.6.1: - resolution: {integrity: sha512-+JzvUMH/rsE/4XfHdDOl70bip0beRcHSviYATQM0vtls59uVtdn1JMu4iD7ZShBpAmFG8EnaA+PrYG9sECMIOQ==} - engines: {node: '>=0.8.x'} + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} - mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} - engines: {node: '>= 0.6'} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} - mime@1.4.1: - resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==} - hasBin: true + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} - moment@2.22.2: - resolution: {integrity: sha512-LRvkBHaJGnrcWvqsElsOhHCzj8mU39wLx5pQ0pc6s153GynCTsPdGdqsVNKAQD9sKnWj11iF7TZx9fpLwdD3fw==} + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} - morgan@1.9.1: - resolution: {integrity: sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==} - engines: {node: '>= 0.8.0'} + array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - nocache@2.0.0: - resolution: {integrity: sha512-YdKcy2x0dDwOh+8BEuHvA+mnOKAhmMQDgKBOCUGaLpewdmsRYguYZSom3yA+/OrE61O/q+NMQANnun65xpI1Hw==} + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 - node-rsa@0.4.2: - resolution: {integrity: sha512-Bvso6Zi9LY4otIZefYrscsUpo2mUpiAVIEmSZV2q41sP8tHZoert3Yu6zv4f/RXJqMNZQKCtnhDugIuCma23YA==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} - node-statsd@0.1.1: - resolution: {integrity: sha512-QDf6R8VXF56QVe1boek8an/Rb3rSNaxoFWb7Elpsv2m1+Noua1yy0F1FpKpK5VluF8oymWM4w764A4KsYL4pDg==} - engines: {node: '>=0.1.97'} + axe-core@4.10.2: + resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} + engines: {node: '>=4'} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} + babel-jest@27.5.1: + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + babel-loader@8.4.1: + resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} - engines: {node: '>= 0.4'} + babel-plugin-jest-hoist@27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + babel-plugin-named-asset-import@0.3.8: + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} - engines: {node: '>= 0.8'} + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + babel-plugin-transform-react-remove-prop-types@0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} - on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} + babel-preset-jest@27.5.1: + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + babel-preset-react-app@10.0.1: + resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + bfj@7.1.0: + resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} + engines: {node: '>= 8.0.0'} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} - partof@1.0.0: - resolution: {integrity: sha512-+TXdhKCySpJDynCxgAPoGVyAkiK3QPusQ63/BdU5t68QcYzyU6zkP/T7F3gkMQBVUYqdWEADKa6Kx5zg8QIKrg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + bonjour-service@1.3.0: + resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + call-bind-apply-helpers@1.0.0: + resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} + engines: {node: '>= 0.4'} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} - postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001687: + resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} + + case-sensitive-paths-webpack-plugin@2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} engines: {node: '>=4'} - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + char-regex@2.0.2: + resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==} + engines: {node: '>=12.20'} - processenv@1.1.0: - resolution: {integrity: sha512-SymqIsn8GjEUy8nG7HiyEjgbfk1xFosRIakUX1NHLpriq3vVpKniGrr9RdMWCaGYWByIovbRt2f/WvmP/IOApQ==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + check-types@11.2.3: + resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} - qs@6.5.2: - resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} - engines: {node: '>=0.6'} + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} - raw-body@2.3.3: - resolution: {integrity: sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==} - engines: {node: '>= 0.8'} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + coa@2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} - engines: {node: '>=0.10.0'} + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - react-router-dom@7.0.2: - resolution: {integrity: sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - react-router@7.0.2: - resolution: {integrity: sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - peerDependenciesMeta: - react-dom: - optional: true + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - readable-stream@1.1.14: - resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} - reflect.getprototypeof@1.0.7: - resolution: {integrity: sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==} - engines: {node: '>= 0.4'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - regenerator-runtime@0.11.1: - resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} - regenerator-runtime@0.12.1: - resolution: {integrity: sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} - engines: {node: '>= 0.4'} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + common@file:../common: + resolution: {directory: ../common, type: directory} - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + compression@1.7.5: + resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} + engines: {node: '>= 0.8.0'} - rollup@4.28.1: - resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} - send@0.16.2: - resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==} - engines: {node: '>= 0.8.0'} + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - serve-static@1.13.2: - resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==} - engines: {node: '>= 0.8.0'} + core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + core-js-pure@3.39.0: + resolution: {integrity: sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + core-js@3.39.0: + resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} - sha-1@0.1.1: - resolution: {integrity: sha512-dexizf3hB7d4Jq6Cd0d/NYQiqgEqIfZIpuMfwPfvSb6h06DZKmHyUe55jYwpHC12R42wpqXO6ouhiBpRzIcD/g==} + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + css-blank-pseudo@3.0.3: + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + css-declaration-sorter@6.4.1: + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + css-has-pseudo@3.0.4: + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 - split2@3.0.0: - resolution: {integrity: sha512-Cp7G+nUfKJyHCrAI8kze3Q00PFGEG1pMgrAlTFlDbn+GW24evSZHJuMl+iUJx1w/NTRDeBiTgvwnf6YOt94FMw==} + css-in-js-utils@3.1.0: + resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + css-loader@6.11.0: + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true - statuses@1.4.0: - resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==} - engines: {node: '>= 0.6'} + css-minimizer-webpack-plugin@3.4.1: + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} + css-prefers-color-scheme@6.0.3: + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 - stethoskop@1.0.0: - resolution: {integrity: sha512-4JnZ+UmTs9SFfDjSHFlD/EoXcb1bfwntkt4h1ipNGrpxtRzmHTxOmdquCJvIrVu608Um7a09cGX0ZSOSllWJNQ==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + css-select-base-adapter@0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + css-select@2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-selector-tokenizer@0.8.0: + resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} + + css-tree@1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-what@3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssdb@7.11.2: + resolution: {integrity: sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@5.2.14: + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@3.1.0: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano@5.1.15: + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} + culori@3.3.0: + resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + daisyui@4.12.20: + resolution: {integrity: sha512-uHr3SQsd2yTjRdVuswTiqGFvZTxX0sGSBRa8JJdbKgmZCk/kRFh4B7Z2jg9vLIdwsHTHPyPgCkZadQo1ce0tAw==} + engines: {node: '>=16.9.0'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} - string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + detect-port-alt@1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} hasBin: true - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - tailwind@4.0.0: - resolution: {integrity: sha512-LlUNoD/5maFG1h5kQ6/hXfFPdcnYw+1Z7z+kUD/W/E71CUMwcnrskxiBM8c3G8wmPsD1VvCuqGYMHviI8+yrmg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} - tailwindcss@3.4.12: - resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} - engines: {node: '>=14.0.0'} - hasBin: true + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - timer2@1.0.0: - resolution: {integrity: sha512-UOZql+P2ET0da+B7V3/RImN3IhC5ghb+9cpecfUhmYGIm0z73dDr3A781nBLnFYmRzeT1AmoT4w9Lgr8n7n7xg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} + domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead - turbo-stream@2.4.0: - resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - typed-array-byte-offset@1.0.3: - resolution: {integrity: sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==} - engines: {node: '>= 0.4'} + dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + dunder-proto@1.0.0: + resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} engines: {node: '>= 0.4'} - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - untildify@3.0.3: - resolution: {integrity: sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==} - engines: {node: '>=4'} + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + electron-to-chromium@1.5.71: + resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} - util.promisify@1.0.0: - resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} + emittery@0.10.2: + resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + engines: {node: '>=12'} - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} + emittery@0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} - uuid@3.3.2: - resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - uuidv4@2.0.0: - resolution: {integrity: sha512-sAUlwUVepcVk6bwnaW/oi6LCwMdueako5QQzRr90ioAVVcms6p1mV0PaSxK8gyAC4CRvKddsk217uUpZUbKd2Q==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - uuidv4@3.0.1: - resolution: {integrity: sha512-PPzksdWRl2a5C9hrs3OOYrArTeyoR0ftJ3jtOy+BnVHkT2UlrrzPNt9nTdiGuxmQItHM/AcTXahwZZC57Njojg==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} - varname@2.0.3: - resolution: {integrity: sha512-+DofT9mJAUALhnr9ipZ5Z2icwaEZ7DAajOZT4ffXy3MQqnXtG3b7atItLQEJCkfcJTOf9WcsywneOEibD4eqJg==} - engines: {node: '>=0.10'} + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - vite@6.0.3: - resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + + es-abstract@1.23.5: + resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} + engines: {node: '>= 0.4'} + + es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.0: + resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} hasBin: true + + eslint-config-react-app@7.0.1: + resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} + engines: {node: '>=14.0.0'} peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 + eslint: ^8.0.0 + typescript: '*' peerDependenciesMeta: - '@types/node': + typescript: optional: true - jiti: - optional: true - less: - optional: true - lightningcss: + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': optional: true - sass: + eslint: optional: true - sass-embedded: + eslint-import-resolver-node: optional: true - stylus: + eslint-import-resolver-typescript: optional: true - sugarss: + eslint-import-resolver-webpack: optional: true - terser: + + eslint-plugin-flowtype@8.0.3: + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': optional: true - tsx: + + eslint-plugin-jest@25.7.0: + resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': optional: true - yaml: + jest: optional: true - which-boxed-primitive@1.1.0: - resolution: {integrity: sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==} - engines: {node: '>= 0.4'} + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - which-builtin-type@1.2.0: - resolution: {integrity: sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==} - engines: {node: '>= 0.4'} + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - which-typed-array@1.1.16: - resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} - engines: {node: '>= 0.4'} + eslint-plugin-react-refresh@0.4.16: + resolution: {integrity: sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==} + peerDependencies: + eslint: '>=8.40' - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + eslint-plugin-react@7.37.2: + resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + eslint-plugin-testing-library@5.11.1: + resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - ws@6.2.0: - resolution: {integrity: sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==} + eslint-webpack-plugin@3.2.0: + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} + engines: {node: '>= 12.13.0'} peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + + eslint@9.16.0: + resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: + jiti: optional: true - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} + esprima@1.2.2: + resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} + engines: {node: '>=0.4.0'} hasBin: true - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} -snapshots: + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} - '@alloc/quick-lru@5.2.0': {} + expect@27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-shallow-equal@1.0.0: + resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} + + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + + fastest-stable-stringify@2.0.2: + resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} + + fastparse@1.1.2: + resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-loader@6.2.0: + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + filesize@8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fork-ts-checker-webpack-plugin@6.5.3: + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + + form-data@3.0.2: + resolution: {integrity: sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.13.0: + resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + + harmony-reflect@1.6.2: + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hoopy@0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + + hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + + html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + + html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + + html-webpack-plugin@5.6.3: + resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} + engines: {node: '>=10.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.20.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + + http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + http-proxy-middleware@2.0.7: + resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + identity-obj-proxy@3.0.0: + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + inline-style-prefixer@7.0.1: + resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.0: + resolution: {integrity: sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.0: + resolution: {integrity: sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.0: + resolution: {integrity: sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-regex@1.2.0: + resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-root@2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.1.0: + resolution: {integrity: sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.0: + resolution: {integrity: sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterator.prototype@1.1.3: + resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + engines: {node: '>= 0.4'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-circus@27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-cli@27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + + jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-docblock@27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-each@27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-environment-jsdom@27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-environment-node@27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-haste-map@27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-jasmine2@27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-leak-detector@27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-message-util@27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-message-util@28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + + jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-regex-util@28.0.2: + resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + + jest-resolve-dependencies@27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-resolve@27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-runner@27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-runtime@27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-serializer@27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-snapshot@27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-util@28.1.3: + resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + + jest-validate@27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-watch-typeahead@1.1.0: + resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + jest: ^27.0.0 || ^28.0.0 + + jest-watcher@27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-watcher@28.1.3: + resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + + jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@28.1.3: + resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + + jest@27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + js-cookie@2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpath@1.1.1: + resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + launch-editor@2.9.1: + resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mini-css-extract-plugin@2.9.2: + resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nano-css@5.6.2: + resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==} + peerDependencies: + react: '*' + react-dom: '*' + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nth-check@1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-attribute-case-insensitive@5.0.2: + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-browser-comments@4.0.0: + resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} + engines: {node: '>=8'} + peerDependencies: + browserslist: '>=4' + postcss: '>=8' + + postcss-calc@8.2.4: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + + postcss-clamp@4.1.0: + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + + postcss-color-functional-notation@4.2.4: + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-color-hex-alpha@8.0.4: + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + + postcss-color-rebeccapurple@7.1.1: + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-colormin@5.3.1: + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-convert-values@5.1.3: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-custom-media@8.0.2: + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + + postcss-custom-properties@12.1.11: + resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-custom-selectors@6.0.3: + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + + postcss-dir-pseudo-class@6.0.5: + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-discard-comments@5.1.2: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-duplicates@5.1.0: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-empty@5.1.1: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-overridden@5.1.0: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-double-position-gradients@3.1.2: + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-env-function@4.0.6: + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + + postcss-flexbugs-fixes@5.0.2: + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 + + postcss-focus-visible@6.0.4: + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + + postcss-focus-within@5.0.4: + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + + postcss-font-variant@5.0.0: + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + + postcss-gap-properties@3.0.5: + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-image-set-function@4.0.7: + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-initial@4.0.1: + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-lab-function@4.2.1: + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-loader@6.2.1: + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + + postcss-logical@5.0.4: + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + + postcss-media-minmax@5.0.0: + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 + + postcss-merge-longhand@5.1.7: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-rules@5.1.4: + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-font-values@5.1.0: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-gradients@5.1.1: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-params@5.1.4: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-selectors@5.2.1: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-nesting@10.2.0: + resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-normalize-charset@5.1.0: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-display-values@5.1.0: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-positions@5.1.1: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-repeat-style@5.1.1: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-string@5.1.0: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-timing-functions@5.1.0: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-unicode@5.1.1: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-url@5.1.0: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-whitespace@5.1.1: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize@10.0.1: + resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} + engines: {node: '>= 12'} + peerDependencies: + browserslist: '>= 4' + postcss: '>= 8' + + postcss-opacity-percentage@1.1.3: + resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-ordered-values@5.1.3: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-overflow-shorthand@3.0.4: + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-page-break@3.0.4: + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + + postcss-place@7.0.5: + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-preset-env@7.8.3: + resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-pseudo-class-any-link@7.1.6: + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-reduce-initial@5.1.2: + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-transforms@5.1.0: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-replace-overflow-wrap@4.0.0: + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + + postcss-selector-not@6.0.1: + resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.0.0: + resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} + engines: {node: '>=4'} + + postcss-svgo@5.1.0: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-unique-selectors@5.1.1: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + react-app-polyfill@3.0.0: + resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} + engines: {node: '>=14'} + + react-dev-utils@12.0.1: + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' + peerDependenciesMeta: + typescript: + optional: true + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-error-overlay@6.0.11: + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-refresh@0.11.0: + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-router-dom@7.0.2: + resolution: {integrity: sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.0.2: + resolution: {integrity: sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-scripts@5.0.1: + resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} + engines: {node: '>=14.0.0'} + hasBin: true + peerDependencies: + eslint: '*' + react: '>= 16' + typescript: ^3.2.1 || ^4 + peerDependenciesMeta: + typescript: + optional: true + + react-universal-interface@0.6.2: + resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} + peerDependencies: + react: '*' + tslib: '*' + + react-use@17.6.0: + resolution: {integrity: sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==} + peerDependencies: + react: '*' + react-dom: '*' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + + reflect.getprototypeof@1.0.7: + resolution: {integrity: sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.12.1: + resolution: {integrity: sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regex-parser@2.3.0: + resolution: {integrity: sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==} + + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-url-loader@4.0.0: + resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} + engines: {node: '>=8.9'} + peerDependencies: + rework: 1.0.1 + rework-visit: 1.0.0 + peerDependenciesMeta: + rework: + optional: true + rework-visit: + optional: true + + resolve.exports@1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup-plugin-terser@7.0.2: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rtl-css-js@1.16.1: + resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sanitize.css@13.0.0: + resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} + + sass-loader@12.6.0: + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + + sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + + saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + schema-utils@2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + + schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + screenfull@5.2.0: + resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} + engines: {node: '>=0.10.0'} + + select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-harmonic-interval@1.0.1: + resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} + engines: {node: '>=6.9'} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + + source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-loader@3.0.2: + resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + + spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + stack-generator@2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + stacktrace-gps@3.1.2: + resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + + stacktrace-js@2.0.2: + resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + + static-eval@2.0.2: + resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-length@5.0.1: + resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} + engines: {node: '>=12.20'} + + string-natural-compare@3.0.1: + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-loader@3.3.4: + resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + stylehacks@5.1.1: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + stylis@4.3.4: + resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + + svgo@1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + tailwindcss@3.4.12: + resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + + terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.37.0: + resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + throat@6.0.2: + resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + + throttle-debounce@3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} + engines: {node: '>=10'} + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + + tryer@1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + + ts-easing@0.2.0: + resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.3: + resolution: {integrity: sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unquote@1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util.promisify@1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + + utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-to-istanbul@8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite@6.0.3: + resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + + w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + + webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + + webpack-dev-middleware@5.3.4: + resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + + webpack-dev-server@4.15.2: + resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + + webpack-manifest-plugin@4.1.1: + resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} + engines: {node: '>=12.22.0'} + peerDependencies: + webpack: ^4.44.2 || ^5.47.0 + + webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + + webpack-sources@2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + + whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + + whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + + which-boxed-primitive@1.1.0: + resolution: {integrity: sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.0: + resolution: {integrity: sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.16: + resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + workbox-background-sync@6.6.0: + resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} + + workbox-broadcast-update@6.6.0: + resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} + + workbox-build@6.6.0: + resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} + engines: {node: '>=10.0.0'} + + workbox-cacheable-response@6.6.0: + resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 + + workbox-core@6.6.0: + resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} + + workbox-expiration@6.6.0: + resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} + + workbox-google-analytics@6.6.0: + resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} + deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained + + workbox-navigation-preload@6.6.0: + resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} + + workbox-precaching@6.6.0: + resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} + + workbox-range-requests@6.6.0: + resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} + + workbox-recipes@6.6.0: + resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} + + workbox-routing@6.6.0: + resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} + + workbox-strategies@6.6.0: + resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} + + workbox-streams@6.6.0: + resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} + + workbox-sw@6.6.0: + resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} + + workbox-webpack-plugin@6.6.0: + resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + + workbox-window@6.6.0: + resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': + dependencies: + ajv: 8.17.1 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.3': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@9.16.0(jiti@1.21.6))': + dependencies: + '@babel/core': 7.26.0 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 9.16.0(jiti@1.21.6) + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + + '@babel/generator@7.26.3': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.3 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.4.0 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.3 + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-wrap-function@7.25.9': + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + + '@babel/parser@7.26.3': + dependencies: + '@babel/types': 7.26.3 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + + '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.26.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-flow-strip-types@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) + + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + core-js-compat: 3.39.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/types': 7.26.3 + esutils: 2.0.3 + + '@babel/preset-react@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/runtime@7.3.4': + dependencies: + regenerator-runtime: 0.12.1 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@babel/traverse@7.26.4': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.3': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@csstools/normalize.css@12.1.1': {} + + '@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.49)': + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + '@csstools/postcss-color-function@1.1.1(postcss@8.4.49)': + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-hwb-function@1.0.2(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-ic-unit@1.0.1(postcss@8.4.49)': + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.49)': + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + '@csstools/postcss-nested-calc@1.0.0(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-oklab-function@1.1.1(postcss@8.4.49)': + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-unset-value@1.0.2(postcss@8.4.49)': + dependencies: + postcss: 8.4.49 + + '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.2)': + dependencies: + postcss-selector-parser: 6.1.2 + + '@esbuild/aix-ppc64@0.24.0': + optional: true + + '@esbuild/android-arm64@0.24.0': + optional: true + + '@esbuild/android-arm@0.24.0': + optional: true + + '@esbuild/android-x64@0.24.0': + optional: true + + '@esbuild/darwin-arm64@0.24.0': + optional: true + + '@esbuild/darwin-x64@0.24.0': + optional: true + + '@esbuild/freebsd-arm64@0.24.0': + optional: true + + '@esbuild/freebsd-x64@0.24.0': + optional: true + + '@esbuild/linux-arm64@0.24.0': + optional: true + + '@esbuild/linux-arm@0.24.0': + optional: true + + '@esbuild/linux-ia32@0.24.0': + optional: true + + '@esbuild/linux-loong64@0.24.0': + optional: true + + '@esbuild/linux-mips64el@0.24.0': + optional: true + + '@esbuild/linux-ppc64@0.24.0': + optional: true + + '@esbuild/linux-riscv64@0.24.0': + optional: true + + '@esbuild/linux-s390x@0.24.0': + optional: true + + '@esbuild/linux-x64@0.24.0': + optional: true + + '@esbuild/netbsd-x64@0.24.0': + optional: true + + '@esbuild/openbsd-arm64@0.24.0': + optional: true + + '@esbuild/openbsd-x64@0.24.0': + optional: true + + '@esbuild/sunos-x64@0.24.0': + optional: true + + '@esbuild/win32-arm64@0.24.0': + optional: true + + '@esbuild/win32-ia32@0.24.0': + optional: true + + '@esbuild/win32-x64@0.24.0': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@1.21.6))': + dependencies: + eslint: 9.16.0(jiti@1.21.6) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.16.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.4': + dependencies: + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@27.5.1': + dependencies: + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + + '@jest/console@28.1.3': + dependencies: + '@jest/types': 28.1.3 + '@types/node': 22.10.2 + chalk: 4.1.2 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + slash: 3.0.0 + + '@jest/core@27.5.1': + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 27.5.1 + jest-config: 27.5.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.8 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + + '@jest/environment@27.5.1': + dependencies: + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + jest-mock: 27.5.1 + + '@jest/fake-timers@27.5.1': + dependencies: + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 22.10.2 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 + + '@jest/globals@27.5.1': + dependencies: + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 + + '@jest/reporters@27.5.1': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@28.1.3': + dependencies: + '@sinclair/typebox': 0.24.51 + + '@jest/source-map@27.5.1': + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.11 + source-map: 0.6.1 + + '@jest/test-result@27.5.1': + dependencies: + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-result@28.1.3': + dependencies: + '@jest/console': 28.1.3 + '@jest/types': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@27.5.1': + dependencies: + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color + + '@jest/transform@27.5.1': + dependencies: + '@babel/core': 7.26.0 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + + '@jest/types@27.5.1': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.10.2 + '@types/yargs': 16.0.9 + chalk: 4.1.2 + + '@jest/types@28.1.3': + dependencies: + '@jest/schemas': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.10.2 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@leichtgewicht/ip-codec@2.0.5': {} + + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + dependencies: + eslint-scope: 5.1.1 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(webpack@5.97.1))(webpack@5.97.1)': + dependencies: + ansi-html: 0.0.9 + core-js-pure: 3.39.0 + error-stack-parser: 2.1.4 + html-entities: 2.5.2 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 4.3.0 + source-map: 0.7.4 + webpack: 5.97.1 + optionalDependencies: + type-fest: 0.21.3 + webpack-dev-server: 4.15.2(webpack@5.97.1) + + '@rollup/plugin-babel@5.3.1(@babel/core@7.26.0)(@types/babel__core@7.20.5)(rollup@2.79.2)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.79.2 + + '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + magic-string: 0.25.9 + rollup: 2.79.2 + + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.2 + + '@rollup/rollup-android-arm-eabi@4.28.1': + optional: true + + '@rollup/rollup-android-arm64@4.28.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.28.1': + optional: true + + '@rollup/rollup-darwin-x64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.28.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.28.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.28.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.28.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.28.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.28.1': + optional: true + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.10.4': {} + + '@sinclair/typebox@0.24.51': {} + + '@sinonjs/commons@1.8.6': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@8.1.0': + dependencies: + '@sinonjs/commons': 1.8.6 + + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.11 + + '@svgr/babel-plugin-add-jsx-attribute@5.4.0': {} + + '@svgr/babel-plugin-remove-jsx-attribute@5.4.0': {} + + '@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1': {} + + '@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1': {} + + '@svgr/babel-plugin-svg-dynamic-title@5.4.0': {} + + '@svgr/babel-plugin-svg-em-dimensions@5.4.0': {} + + '@svgr/babel-plugin-transform-react-native-svg@5.4.0': {} + + '@svgr/babel-plugin-transform-svg-component@5.5.0': {} + + '@svgr/babel-preset@5.5.0': + dependencies: + '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 + '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 + '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 + '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 + '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 + '@svgr/babel-plugin-transform-svg-component': 5.5.0 + + '@svgr/core@5.5.0': + dependencies: + '@svgr/plugin-jsx': 5.5.0 + camelcase: 6.3.0 + cosmiconfig: 7.1.0 + transitivePeerDependencies: + - supports-color + + '@svgr/hast-util-to-babel-ast@5.5.0': + dependencies: + '@babel/types': 7.26.3 + + '@svgr/plugin-jsx@5.5.0': + dependencies: + '@babel/core': 7.26.0 + '@svgr/babel-preset': 5.5.0 + '@svgr/hast-util-to-babel-ast': 5.5.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + + '@svgr/plugin-svgo@5.5.0': + dependencies: + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + svgo: 1.3.2 + + '@svgr/webpack@5.5.0': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/preset-react': 7.26.3(@babel/core@7.26.0) + '@svgr/core': 5.5.0 + '@svgr/plugin-jsx': 5.5.0 + '@svgr/plugin-svgo': 5.5.0 + loader-utils: 2.0.4 + transitivePeerDependencies: + - supports-color + + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.12)': + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.12 + + '@tootallnate/once@1.1.2': {} + + '@trysound/sax@0.2.0': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.3 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.3 + + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.10.2 + + '@types/bonjour@3.5.13': + dependencies: + '@types/node': 22.10.2 + + '@types/connect-history-api-fallback@1.5.4': + dependencies: + '@types/express-serve-static-core': 5.0.2 + '@types/node': 22.10.2 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.10.2 + + '@types/cookie@0.6.0': {} + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + + '@types/eslint@8.56.12': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.6': {} + + '@types/express-serve-static-core@4.19.6': + dependencies: + '@types/node': 22.10.2 + '@types/qs': 6.9.17 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express-serve-static-core@5.0.2': + dependencies: + '@types/node': 22.10.2 + '@types/qs': 6.9.17 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express@4.17.21': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.9.17 + '@types/serve-static': 1.15.7 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.10.2 + + '@types/html-minifier-terser@6.1.0': {} + + '@types/http-errors@2.0.4': {} + + '@types/http-proxy@1.17.15': + dependencies: + '@types/node': 22.10.2 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/js-cookie@2.2.7': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/mime@1.3.5': {} + + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 22.10.2 + + '@types/node@22.10.2': + dependencies: + undici-types: 6.20.0 + + '@types/parse-json@4.0.2': {} + + '@types/prettier@2.7.3': {} + + '@types/prop-types@15.7.14': {} + + '@types/q@1.5.8': {} + + '@types/qs@6.9.17': {} + + '@types/range-parser@1.2.7': {} + + '@types/react-dom@18.3.2': + dependencies: + '@types/react': 18.3.14 + + '@types/react@18.3.14': + dependencies: + '@types/prop-types': 15.7.14 + csstype: 3.1.3 + + '@types/resolve@1.17.1': + dependencies: + '@types/node': 22.10.2 + + '@types/retry@0.12.0': {} + + '@types/semver@7.5.8': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 22.10.2 + + '@types/serve-index@1.9.4': + dependencies: + '@types/express': 4.17.21 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 22.10.2 + '@types/send': 0.17.4 + + '@types/sockjs@0.3.36': + dependencies: + '@types/node': 22.10.2 + + '@types/stack-utils@2.0.3': {} + + '@types/trusted-types@2.0.7': {} + + '@types/ws@8.5.13': + dependencies: + '@types/node': 22.10.2 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@16.0.9': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + debug: 4.4.0 + eslint: 9.16.0(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare-lite: 1.4.0 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.9.5) + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/experimental-utils@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)': + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + eslint: 9.16.0(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)': + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + debug: 4.4.0 + eslint: 9.16.0(jiti@1.21.6) + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + + '@typescript-eslint/type-utils@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + debug: 4.4.0 + eslint: 9.16.0(jiti@1.21.6) + tsutils: 3.21.0(typescript@4.9.5) + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.4.0 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.9.5) + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + eslint: 9.16.0(jiti@1.21.6) + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@vitejs/plugin-react@4.3.4(vite@6.0.3(@types/node@22.10.2)(jiti@1.21.6)(terser@5.37.0)(yaml@2.6.1))': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.0.3(@types/node@22.10.2)(jiti@1.21.6)(terser@5.37.0)(yaml@2.6.1) + transitivePeerDependencies: + - supports-color + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xobotyi/scrollbar-width@1.9.5': {} + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abab@2.0.6: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-globals@6.0.0: + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-walk@7.2.0: {} + + acorn@7.4.1: {} + + acorn@8.14.0: {} + + address@1.2.2: {} + + adjust-sourcemap-loader@4.0.0: + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.3.0 + + agent-base@6.0.2: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-html-community@0.0.8: {} + + ansi-html@0.0.9: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.8 + is-array-buffer: 3.0.4 + + array-flatten@1.1.1: {} + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.1.0 + + array-union@2.1.0: {} + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-shim-unscopables: 1.0.2 + + array.prototype.reduce@1.0.7: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + is-string: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + asap@2.0.6: {} + + ast-types-flow@0.0.8: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001687 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axe-core@4.10.2: {} + + axobject-query@4.1.0: {} + + babel-jest@27.5.1(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1(@babel/core@7.26.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-loader@8.4.1(@babel/core@7.26.0)(webpack@5.97.1): + dependencies: + '@babel/core': 7.26.0 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.97.1 + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.25.9 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@27.5.1: + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.26.0 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + babel-plugin-named-asset-import@0.3.8(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + core-js-compat: 3.39.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + babel-plugin-transform-react-remove-prop-types@0.4.24: {} + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + + babel-preset-jest@27.5.1(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + + babel-preset-react-app@10.0.1: + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.26.0) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.26.0) + '@babel/plugin-transform-flow-strip-types': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/preset-react': 7.26.3(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/runtime': 7.26.0 + babel-plugin-macros: 3.1.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + transitivePeerDependencies: + - supports-color + + balanced-match@1.0.2: {} + + batch@0.6.1: {} + + bfj@7.1.0: + dependencies: + bluebird: 3.7.2 + check-types: 11.2.3 + hoopy: 0.1.4 + jsonpath: 1.1.1 + tryer: 1.0.1 + + big.js@5.2.2: {} + + binary-extensions@2.3.0: {} + + bluebird@3.7.2: {} + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bonjour-service@1.3.0: + dependencies: + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + + boolbase@1.0.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-process-hrtime@1.0.0: {} + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001687 + electron-to-chromium: 1.5.71 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.0: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-define-property: 1.0.1 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001687 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001687: {} + + case-sensitive-paths-webpack-plugin@2.4.0: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + char-regex@1.0.2: {} + + char-regex@2.0.2: {} + + check-types@11.2.3: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chrome-trace-event@1.0.4: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.1: {} + + classnames@2.5.1: {} + + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + co@4.6.0: {} + + coa@2.0.2: + dependencies: + '@types/q': 1.5.8 + chalk: 2.4.2 + q: 1.5.1 + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colord@2.9.3: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + common-tags@1.8.2: {} + + common@file:../common: {} + + commondir@1.0.1: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.53.0 + + compression@1.7.5: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.0.2 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + + confusing-browser-globals@1.0.11: {} + + connect-history-api-fallback@2.0.0: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + cookie@1.0.2: {} + + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + + core-js-compat@3.39.0: + dependencies: + browserslist: 4.24.2 + + core-js-pure@3.39.0: {} + + core-js@3.39.0: {} + + core-util-is@1.0.3: {} + + cosmiconfig@6.0.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-random-string@2.0.0: {} + + css-blank-pseudo@3.0.3(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + css-declaration-sorter@6.4.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + css-has-pseudo@3.0.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + css-in-js-utils@3.1.0: + dependencies: + hyphenate-style-name: 1.1.0 + + css-loader@6.11.0(webpack@5.97.1): + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.49) + postcss-modules-scope: 3.2.1(postcss@8.4.49) + postcss-modules-values: 4.0.0(postcss@8.4.49) + postcss-value-parser: 4.2.0 + semver: 7.6.3 + optionalDependencies: + webpack: 5.97.1 + + css-minimizer-webpack-plugin@3.4.1(webpack@5.97.1): + dependencies: + cssnano: 5.1.15(postcss@8.4.49) + jest-worker: 27.5.1 + postcss: 8.4.49 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + source-map: 0.6.1 + webpack: 5.97.1 + + css-prefers-color-scheme@6.0.3(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + css-select-base-adapter@0.1.1: {} + + css-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-selector-tokenizer@0.8.0: + dependencies: + cssesc: 3.0.0 + fastparse: 1.1.2 + + css-tree@1.0.0-alpha.37: + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-what@3.4.2: {} + + css-what@6.1.0: {} + + cssdb@7.11.2: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@5.2.14(postcss@8.4.49): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.49) + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-calc: 8.2.4(postcss@8.4.49) + postcss-colormin: 5.3.1(postcss@8.4.49) + postcss-convert-values: 5.1.3(postcss@8.4.49) + postcss-discard-comments: 5.1.2(postcss@8.4.49) + postcss-discard-duplicates: 5.1.0(postcss@8.4.49) + postcss-discard-empty: 5.1.1(postcss@8.4.49) + postcss-discard-overridden: 5.1.0(postcss@8.4.49) + postcss-merge-longhand: 5.1.7(postcss@8.4.49) + postcss-merge-rules: 5.1.4(postcss@8.4.49) + postcss-minify-font-values: 5.1.0(postcss@8.4.49) + postcss-minify-gradients: 5.1.1(postcss@8.4.49) + postcss-minify-params: 5.1.4(postcss@8.4.49) + postcss-minify-selectors: 5.2.1(postcss@8.4.49) + postcss-normalize-charset: 5.1.0(postcss@8.4.49) + postcss-normalize-display-values: 5.1.0(postcss@8.4.49) + postcss-normalize-positions: 5.1.1(postcss@8.4.49) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.49) + postcss-normalize-string: 5.1.0(postcss@8.4.49) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.49) + postcss-normalize-unicode: 5.1.1(postcss@8.4.49) + postcss-normalize-url: 5.1.0(postcss@8.4.49) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.49) + postcss-ordered-values: 5.1.3(postcss@8.4.49) + postcss-reduce-initial: 5.1.2(postcss@8.4.49) + postcss-reduce-transforms: 5.1.0(postcss@8.4.49) + postcss-svgo: 5.1.0(postcss@8.4.49) + postcss-unique-selectors: 5.1.1(postcss@8.4.49) + + cssnano-utils@3.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + cssnano@5.1.15(postcss@8.4.49): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.49) + lilconfig: 2.1.0 + postcss: 8.4.49 + yaml: 1.10.2 + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + cssom@0.3.8: {} + + cssom@0.4.4: {} + + cssstyle@2.3.0: + dependencies: + cssom: 0.3.8 + + csstype@3.1.3: {} + + culori@3.3.0: {} + + daisyui@4.12.20(postcss@8.4.49): + dependencies: + css-selector-tokenizer: 0.8.0 + culori: 3.3.0 + picocolors: 1.1.1 + postcss-js: 4.0.1(postcss@8.4.49) + transitivePeerDependencies: + - postcss + + damerau-levenshtein@1.0.8: {} + + data-urls@2.0.0: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decimal.js@10.4.3: {} + + dedent@0.7.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-gateway@6.0.3: + dependencies: + execa: 5.1.1 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-newline@3.1.0: {} + + detect-node@2.1.0: {} + + detect-port-alt@1.1.6: + dependencies: + address: 1.2.2 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + + didyoumean@1.2.2: {} + + diff-sequences@27.5.1: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + dns-packet@5.6.1: + dependencies: + '@leichtgewicht/ip-codec': 2.0.5 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dom-converter@0.2.0: + dependencies: + utila: 0.4.0 + + dom-serializer@0.2.2: + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@1.3.1: {} + + domelementtype@2.3.0: {} + + domexception@2.0.1: + dependencies: + webidl-conversions: 5.0.0 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@1.7.0: + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dotenv-expand@5.1.0: {} + + dotenv@10.0.0: {} + + dunder-proto@1.0.0: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.71: {} + + emittery@0.10.2: {} + + emittery@0.8.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + emojis-list@3.0.0: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@2.2.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + + es-abstract@1.23.5: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.2.0 + is-shared-array-buffer: 1.0.3 + is-string: 1.1.0 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.3 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.3 + typed-array-length: 1.0.7 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.16 + + es-array-method-boxes-properly@1.0.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.0: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.0.7 + iterator.prototype: 1.1.3 + safe-array-concat: 1.1.2 + + es-module-lexer@1.5.4: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.1.0 + + esbuild@0.24.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} - '@ampproject/remapping@2.3.0': + escodegen@1.14.3: dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 - '@babel/code-frame@7.26.2': + escodegen@2.1.0: dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 - '@babel/compat-data@7.26.3': {} + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0))(eslint@9.16.0(jiti@1.21.6))(jest@27.5.1)(typescript@4.9.5): + dependencies: + '@babel/core': 7.26.0 + '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@9.16.0(jiti@1.21.6)) + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + babel-preset-react-app: 10.0.1 + confusing-browser-globals: 1.0.11 + eslint: 9.16.0(jiti@1.21.6) + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0))(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6))(jest@27.5.1)(typescript@4.9.5) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-react: 7.37.2(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-react-hooks: 4.6.2(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-testing-library: 5.11.1(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color - '@babel/core@7.26.0': + eslint-import-resolver-node@0.3.9: dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 - convert-source-map: 2.0.0 - debug: 4.4.0 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 + debug: 3.2.7 + is-core-module: 2.15.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.3': + eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@9.16.0(jiti@1.21.6)): dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + eslint: 9.16.0(jiti@1.21.6) + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color - '@babel/helper-compilation-targets@7.25.9': + eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0))(eslint@9.16.0(jiti@1.21.6)): dependencies: - '@babel/compat-data': 7.26.3 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.2 - lru-cache: 5.1.1 - semver: 6.3.1 + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + eslint: 9.16.0(jiti@1.21.6) + lodash: 4.17.21 + string-natural-compare: 3.0.1 - '@babel/helper-module-imports@7.25.9': + eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6)): dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.16.0(jiti@1.21.6) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@9.16.0(jiti@1.21.6)) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6))(jest@27.5.1)(typescript@4.9.5): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@typescript-eslint/experimental-utils': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + eslint: 9.16.0(jiti@1.21.6) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5))(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + jest: 27.5.1 transitivePeerDependencies: - supports-color + - typescript - '@babel/helper-plugin-utils@7.25.9': {} - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-option@7.25.9': {} + eslint-plugin-jsx-a11y@6.10.2(eslint@9.16.0(jiti@1.21.6)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.10.2 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.16.0(jiti@1.21.6) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.1 - '@babel/helpers@7.26.0': + eslint-plugin-react-hooks@4.6.2(eslint@9.16.0(jiti@1.21.6)): dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + eslint: 9.16.0(jiti@1.21.6) - '@babel/parser@7.26.3': + eslint-plugin-react-hooks@5.1.0(eslint@9.16.0(jiti@1.21.6)): dependencies: - '@babel/types': 7.26.3 + eslint: 9.16.0(jiti@1.21.6) - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + eslint-plugin-react-refresh@0.4.16(eslint@9.16.0(jiti@1.21.6)): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + eslint: 9.16.0(jiti@1.21.6) - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + eslint-plugin-react@7.37.2(eslint@9.16.0(jiti@1.21.6)): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.0 + eslint: 9.16.0(jiti@1.21.6) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 - '@babel/runtime@7.1.2': + eslint-plugin-testing-library@5.11.1(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5): dependencies: - regenerator-runtime: 0.12.1 + '@typescript-eslint/utils': 5.62.0(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5) + eslint: 9.16.0(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript - '@babel/runtime@7.2.0': + eslint-scope@5.1.1: dependencies: - regenerator-runtime: 0.12.1 + esrecurse: 4.3.0 + estraverse: 4.3.0 - '@babel/runtime@7.3.4': + eslint-scope@8.2.0: dependencies: - regenerator-runtime: 0.12.1 + esrecurse: 4.3.0 + estraverse: 5.3.0 - '@babel/template@7.25.9': + eslint-visitor-keys@2.1.0: {} + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint-webpack-plugin@3.2.0(eslint@9.16.0(jiti@1.21.6))(webpack@5.97.1): dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@types/eslint': 8.56.12 + eslint: 9.16.0(jiti@1.21.6) + jest-worker: 28.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + schema-utils: 4.3.0 + webpack: 5.97.1 - '@babel/traverse@7.26.4': + eslint@9.16.0(jiti@1.21.6): dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.16.0 + '@eslint/plugin-kit': 0.2.4 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 debug: 4.4.0 - globals: 11.12.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.6 transitivePeerDependencies: - supports-color - '@babel/types@7.26.3': + espree@10.3.0: dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 - '@esbuild/aix-ppc64@0.24.0': - optional: true + esprima@1.2.2: {} - '@esbuild/android-arm64@0.24.0': - optional: true + esprima@4.0.1: {} - '@esbuild/android-arm@0.24.0': - optional: true + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 - '@esbuild/android-x64@0.24.0': - optional: true + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 - '@esbuild/darwin-arm64@0.24.0': - optional: true + estraverse@4.3.0: {} - '@esbuild/darwin-x64@0.24.0': - optional: true + estraverse@5.3.0: {} - '@esbuild/freebsd-arm64@0.24.0': - optional: true + estree-walker@1.0.1: {} - '@esbuild/freebsd-x64@0.24.0': - optional: true + esutils@2.0.3: {} - '@esbuild/linux-arm64@0.24.0': - optional: true + etag@1.8.1: {} - '@esbuild/linux-arm@0.24.0': - optional: true + eventemitter3@4.0.7: {} - '@esbuild/linux-ia32@0.24.0': - optional: true + events@3.3.0: {} - '@esbuild/linux-loong64@0.24.0': - optional: true + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 - '@esbuild/linux-mips64el@0.24.0': - optional: true + exit@0.1.2: {} + + expect@27.5.1: + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color - '@esbuild/linux-ppc64@0.24.0': - optional: true + fast-deep-equal@3.1.3: {} - '@esbuild/linux-riscv64@0.24.0': - optional: true + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 - '@esbuild/linux-s390x@0.24.0': - optional: true + fast-json-stable-stringify@2.1.0: {} - '@esbuild/linux-x64@0.24.0': - optional: true + fast-levenshtein@2.0.6: {} - '@esbuild/netbsd-x64@0.24.0': - optional: true + fast-shallow-equal@1.0.0: {} - '@esbuild/openbsd-arm64@0.24.0': - optional: true + fast-uri@3.0.3: {} - '@esbuild/openbsd-x64@0.24.0': - optional: true + fastest-stable-stringify@2.0.2: {} - '@esbuild/sunos-x64@0.24.0': - optional: true + fastparse@1.1.2: {} - '@esbuild/win32-arm64@0.24.0': - optional: true + fastq@1.17.1: + dependencies: + reusify: 1.0.4 - '@esbuild/win32-ia32@0.24.0': - optional: true + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 - '@esbuild/win32-x64@0.24.0': - optional: true + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 - '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@1.21.6))': + file-entry-cache@8.0.0: dependencies: - eslint: 9.16.0(jiti@1.21.6) - eslint-visitor-keys: 3.4.3 + flat-cache: 4.0.1 - '@eslint-community/regexpp@4.12.1': {} + file-loader@6.2.0(webpack@5.97.1): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.97.1 - '@eslint/config-array@0.19.1': + filelist@1.0.4: dependencies: - '@eslint/object-schema': 2.1.5 - debug: 4.4.0 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + minimatch: 5.1.6 - '@eslint/core@0.9.1': + filesize@8.0.7: {} + + fill-range@7.1.1: dependencies: - '@types/json-schema': 7.0.15 + to-regex-range: 5.0.1 - '@eslint/eslintrc@3.2.0': + finalhandler@1.3.1: dependencies: - ajv: 6.12.6 - debug: 4.4.0 - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 transitivePeerDependencies: - supports-color - '@eslint/js@9.16.0': {} + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 - '@eslint/object-schema@2.1.5': {} + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 - '@eslint/plugin-kit@0.2.4': + find-up@4.1.0: dependencies: - levn: 0.4.1 + locate-path: 5.0.0 + path-exists: 4.0.0 - '@humanfs/core@0.19.1': {} + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 - '@humanfs/node@0.16.6': + flat-cache@4.0.1: dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + flatted: 3.3.2 + keyv: 4.5.4 - '@humanwhocodes/module-importer@1.0.1': {} + flatted@3.3.2: {} - '@humanwhocodes/retry@0.3.1': {} + follow-redirects@1.15.9: {} - '@humanwhocodes/retry@0.4.1': {} + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 - '@isaacs/cliui@8.0.2': + foreground-child@3.3.0: dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + cross-spawn: 7.0.6 + signal-exit: 4.1.0 - '@jridgewell/gen-mapping@0.3.5': + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)(webpack@5.97.1): dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@babel/code-frame': 7.26.2 + '@types/json-schema': 7.0.15 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 6.0.0 + deepmerge: 4.3.1 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.5.3 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.6.3 + tapable: 1.1.3 + typescript: 4.9.5 + webpack: 5.97.1 + optionalDependencies: + eslint: 9.16.0(jiti@1.21.6) - '@jridgewell/resolve-uri@3.1.2': {} + form-data@3.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 - '@jridgewell/set-array@1.2.1': {} + forwarded@0.2.0: {} - '@jridgewell/sourcemap-codec@1.5.0': {} + fraction.js@4.3.7: {} - '@jridgewell/trace-mapping@0.3.25': + fresh@0.5.2: {} + + fs-extra@10.1.0: dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 - '@nodelib/fs.scandir@2.1.5': + fs-extra@9.1.0: dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 - '@nodelib/fs.stat@2.0.5': {} + fs-monkey@1.0.6: {} - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fs.realpath@1.0.0: {} - '@pkgjs/parseargs@0.11.0': + fsevents@2.3.3: optional: true - '@rollup/rollup-android-arm-eabi@4.28.1': - optional: true + function-bind@1.1.2: {} - '@rollup/rollup-android-arm64@4.28.1': - optional: true + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + functions-have-names: 1.2.3 - '@rollup/rollup-darwin-arm64@4.28.1': - optional: true + functions-have-names@1.2.3: {} - '@rollup/rollup-darwin-x64@4.28.1': - optional: true + gensync@1.0.0-beta.2: {} - '@rollup/rollup-freebsd-arm64@4.28.1': - optional: true + get-caller-file@2.0.5: {} - '@rollup/rollup-freebsd-x64@4.28.1': - optional: true + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 - '@rollup/rollup-linux-arm-gnueabihf@4.28.1': - optional: true + get-own-enumerable-property-symbols@3.0.2: {} - '@rollup/rollup-linux-arm-musleabihf@4.28.1': - optional: true + get-package-type@0.1.0: {} - '@rollup/rollup-linux-arm64-gnu@4.28.1': - optional: true + get-stream@6.0.1: {} - '@rollup/rollup-linux-arm64-musl@4.28.1': - optional: true + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 - '@rollup/rollup-linux-loongarch64-gnu@4.28.1': - optional: true + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 - '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': - optional: true + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 - '@rollup/rollup-linux-riscv64-gnu@4.28.1': - optional: true + glob-to-regexp@0.4.1: {} - '@rollup/rollup-linux-s390x-gnu@4.28.1': - optional: true + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 - '@rollup/rollup-linux-x64-gnu@4.28.1': - optional: true + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 - '@rollup/rollup-linux-x64-musl@4.28.1': - optional: true + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 - '@rollup/rollup-win32-arm64-msvc@4.28.1': - optional: true + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 - '@rollup/rollup-win32-ia32-msvc@4.28.1': - optional: true + globals@11.12.0: {} - '@rollup/rollup-win32-x64-msvc@4.28.1': - optional: true + globals@14.0.0: {} - '@tailwindcss/typography@0.5.15(tailwindcss@3.4.12)': - dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.12 + globals@15.13.0: {} - '@types/babel__core@7.20.5': + globalthis@1.0.4: dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + define-properties: 1.2.1 + gopd: 1.2.0 - '@types/babel__generator@7.6.8': + globby@11.1.0: dependencies: - '@babel/types': 7.26.3 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + gopd@1.2.0: {} - '@types/babel__traverse@7.20.6': + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + gzip-size@6.0.0: dependencies: - '@babel/types': 7.26.3 + duplexer: 0.1.2 - '@types/cookie@0.6.0': {} + handle-thing@2.0.1: {} - '@types/estree@1.0.6': {} + harmony-reflect@1.6.2: {} - '@types/json-schema@7.0.15': {} + has-bigints@1.0.2: {} - '@types/prop-types@15.7.14': {} + has-flag@3.0.0: {} - '@types/react-dom@18.3.2': - dependencies: - '@types/react': 18.3.14 + has-flag@4.0.0: {} - '@types/react@18.3.14': + has-property-descriptors@1.0.2: dependencies: - '@types/prop-types': 15.7.14 - csstype: 3.1.3 + es-define-property: 1.0.1 - '@vitejs/plugin-react@4.3.4(vite@6.0.3(jiti@1.21.6)(yaml@2.6.1))': + has-proto@1.2.0: dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: 6.0.3(jiti@1.21.6)(yaml@2.6.1) - transitivePeerDependencies: - - supports-color + dunder-proto: 1.0.0 - accepts@1.3.8: + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 + has-symbols: 1.1.0 - acorn-jsx@5.3.2(acorn@8.14.0): + hasown@2.0.2: dependencies: - acorn: 8.14.0 + function-bind: 1.1.2 - acorn@8.14.0: {} + he@1.2.0: {} - ajv@6.10.0: - dependencies: - fast-deep-equal: 2.0.1 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 + hoopy@0.1.4: {} - ajv@6.12.6: + hpack.js@2.1.6: dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 - amqplib@0.5.2: + html-encoding-sniffer@2.0.1: dependencies: - bitsyntax: 0.0.4 - bluebird: 3.7.2 - buffer-more-ints: 0.0.2 - readable-stream: 1.1.14 - safe-buffer: 5.2.1 + whatwg-encoding: 1.0.5 - ansi-regex@5.0.1: {} + html-entities@2.5.2: {} - ansi-regex@6.1.0: {} + html-escaper@2.0.2: {} - ansi-styles@3.2.1: + html-minifier-terser@6.1.0: dependencies: - color-convert: 1.9.3 + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.37.0 - ansi-styles@4.3.0: + html-webpack-plugin@5.6.3(webpack@5.97.1): dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + optionalDependencies: + webpack: 5.97.1 - anymatch@3.1.3: + htmlparser2@6.1.0: dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - app-root-path@2.1.0: {} + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 - arg@5.0.2: {} + http-deceiver@1.2.7: {} - argparse@2.0.1: {} + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 - array-buffer-byte-length@1.0.1: + http-errors@2.0.0: dependencies: - call-bind: 1.0.8 - is-array-buffer: 3.0.4 + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 - array-flatten@1.1.1: {} + http-parser-js@0.5.8: {} - array-includes@3.1.8: + http-proxy-agent@4.0.1: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.1.0 + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color - array.prototype.findlast@1.2.5: + http-proxy-middleware@2.0.7(@types/express@4.17.21): dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 + '@types/http-proxy': 1.17.15 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.8 + optionalDependencies: + '@types/express': 4.17.21 + transitivePeerDependencies: + - debug - array.prototype.flat@1.3.2: + http-proxy@1.18.1: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-shim-unscopables: 1.0.2 + eventemitter3: 4.0.7 + follow-redirects: 1.15.9 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug - array.prototype.flatmap@1.3.2: + https-proxy-agent@5.0.1: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-shim-unscopables: 1.0.2 + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color - array.prototype.reduce@1.0.7: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-array-method-boxes-properly: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - is-string: 1.1.0 + human-signals@2.1.0: {} - array.prototype.tosorted@1.1.4: + hyphenate-style-name@1.1.0: {} + + iconv-lite@0.4.24: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 + safer-buffer: 2.1.2 - arraybuffer.prototype.slice@1.0.3: + iconv-lite@0.6.3: dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + safer-buffer: 2.1.2 - asn1@0.2.3: {} + icss-utils@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - async-limiter@1.0.1: {} + idb@7.1.1: {} - async-retry@1.2.3: + identity-obj-proxy@3.0.0: dependencies: - retry: 0.12.0 + harmony-reflect: 1.6.2 - autoprefixer@10.4.20(postcss@8.4.49): - dependencies: - browserslist: 4.24.2 - caniuse-lite: 1.0.30001687 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.4.49 - postcss-value-parser: 4.2.0 + ignore@5.3.2: {} - available-typed-arrays@1.0.7: + immer@9.0.21: {} + + import-fresh@3.3.0: dependencies: - possible-typed-array-names: 1.0.0 + parent-module: 1.0.1 + resolve-from: 4.0.0 - babel-runtime@6.26.0: + import-local@3.2.0: dependencies: - core-js: 2.6.12 - regenerator-runtime: 0.11.1 + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 - balanced-match@1.0.2: {} + imurmurhash@0.1.4: {} - basic-auth@2.0.1: + inflight@1.0.6: dependencies: - safe-buffer: 5.1.2 + once: 1.4.0 + wrappy: 1.0.2 - binary-extensions@2.3.0: {} + inherits@2.0.3: {} - bitsyntax@0.0.4: - dependencies: - buffer-more-ints: 0.0.2 + inherits@2.0.4: {} - bluebird@3.7.2: {} + ini@1.3.8: {} - body-parser@1.18.3: + inline-style-prefixer@7.0.1: dependencies: - bytes: 3.0.0 - content-type: 1.0.4 - debug: 2.6.9 - depd: 1.1.2 - http-errors: 1.6.3 - iconv-lite: 0.4.23 - on-finished: 2.3.0 - qs: 6.5.2 - raw-body: 2.3.3 - type-is: 1.6.18 - transitivePeerDependencies: - - supports-color + css-in-js-utils: 3.1.0 - brace-expansion@1.1.11: + internal-slot@1.0.7: dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 + ipaddr.js@1.9.1: {} - braces@3.0.3: - dependencies: - fill-range: 7.1.1 + ipaddr.js@2.2.0: {} - browserslist@4.24.2: + is-array-buffer@3.0.4: dependencies: - caniuse-lite: 1.0.30001687 - electron-to-chromium: 1.5.71 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) - - buffer-equal-constant-time@1.0.1: {} + call-bind: 1.0.8 + get-intrinsic: 1.2.4 - buffer-more-ints@0.0.2: {} + is-arrayish@0.2.1: {} - bytes@3.0.0: {} + is-async-function@2.0.0: + dependencies: + has-tostringtag: 1.0.2 - call-bind-apply-helpers@1.0.0: + is-bigint@1.1.0: dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 + has-bigints: 1.0.2 - call-bind@1.0.8: + is-binary-path@2.1.0: dependencies: - call-bind-apply-helpers: 1.0.0 - es-define-property: 1.0.1 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 + binary-extensions: 2.3.0 - callsites@3.1.0: {} + is-boolean-object@1.2.0: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 - camelcase-css@2.0.1: {} + is-callable@1.2.7: {} - caniuse-lite@1.0.30001687: {} + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 - chalk@2.4.1: + is-data-view@1.0.1: dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + is-typed-array: 1.1.13 - chalk@4.1.2: + is-date-object@1.0.5: dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 + has-tostringtag: 1.0.2 - chokidar@3.6.0: + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.0: dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + call-bind: 1.0.8 - classnames@2.5.1: {} + is-fullwidth-code-point@3.0.0: {} - color-convert@1.9.3: + is-generator-fn@2.1.0: {} + + is-generator-function@1.0.10: dependencies: - color-name: 1.1.3 + has-tostringtag: 1.0.2 - color-convert@2.0.1: + is-glob@4.0.3: dependencies: - color-name: 1.1.4 + is-extglob: 2.1.1 - color-name@1.1.3: {} + is-map@2.0.3: {} - color-name@1.1.4: {} + is-module@1.0.0: {} - commander@4.1.1: {} + is-negative-zero@2.0.3: {} - commands-events@1.0.4: + is-number-object@1.1.0: dependencies: - '@babel/runtime': 7.2.0 - formats: 1.0.0 - uuidv4: 2.0.0 + call-bind: 1.0.8 + has-tostringtag: 1.0.2 - common@file:../common: {} + is-number@7.0.0: {} - comparejs@1.0.0: {} + is-obj@1.0.1: {} - compressible@2.0.18: - dependencies: - mime-db: 1.53.0 + is-plain-obj@3.0.0: {} - compression@1.7.3: + is-potential-custom-element-name@1.0.1: {} + + is-regex@1.2.0: dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color + call-bind: 1.0.8 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - concat-map@0.0.1: {} + is-regexp@1.0.0: {} - content-disposition@0.5.2: {} + is-root@2.1.0: {} - content-type@1.0.4: {} + is-set@2.0.3: {} - convert-source-map@2.0.0: {} + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.8 - cookie-signature@1.0.6: {} + is-stream@2.0.1: {} - cookie@0.3.1: {} + is-string@1.1.0: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 - cookie@1.0.2: {} + is-symbol@1.1.0: + dependencies: + call-bind: 1.0.8 + has-symbols: 1.1.0 + safe-regex-test: 1.0.3 - core-js@2.6.12: {} + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.16 - core-util-is@1.0.3: {} + is-typedarray@1.0.0: {} - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 + is-weakmap@2.0.2: {} - cross-spawn@7.0.6: + is-weakref@1.0.2: dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + call-bind: 1.0.8 - crypto2@2.0.0: + is-weakset@2.0.3: dependencies: - babel-runtime: 6.26.0 - node-rsa: 0.4.2 - util.promisify: 1.0.0 + call-bind: 1.0.8 + get-intrinsic: 1.2.4 - css-selector-tokenizer@0.8.0: + is-wsl@2.2.0: dependencies: - cssesc: 3.0.0 - fastparse: 1.1.2 + is-docker: 2.2.1 - cssesc@3.0.0: {} + isarray@1.0.0: {} - csstype@3.1.3: {} + isarray@2.0.5: {} - culori@3.3.0: {} + isexe@2.0.0: {} - daisyui@4.12.20(postcss@8.4.49): + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: dependencies: - css-selector-tokenizer: 0.8.0 - culori: 3.3.0 - picocolors: 1.1.1 - postcss-js: 4.0.1(postcss@8.4.49) + '@babel/core': 7.26.0 + '@babel/parser': 7.26.3 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 transitivePeerDependencies: - - postcss + - supports-color - data-view-buffer@1.0.1: + istanbul-lib-report@3.0.1: dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - is-data-view: 1.0.1 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 - data-view-byte-length@1.0.1: + istanbul-lib-source-maps@4.0.1: dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - is-data-view: 1.0.1 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color - data-view-byte-offset@1.0.0: + istanbul-reports@3.1.7: dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - is-data-view: 1.0.1 + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 - datasette@1.0.1: + iterator.prototype@1.1.3: dependencies: - comparejs: 1.0.0 - eventemitter2: 5.0.1 - lodash: 4.17.5 + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.1.0 + reflect.getprototypeof: 1.0.7 + set-function-name: 2.0.2 - debug@2.6.9: + jackspeak@3.4.3: dependencies: - ms: 2.0.0 + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - debug@4.4.0: + jake@10.9.2: dependencies: - ms: 2.1.3 - - deep-is@0.1.4: {} + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 - define-data-property@1.1.4: + jest-changed-files@27.5.1: dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 + '@jest/types': 27.5.1 + execa: 5.1.1 + throat: 6.0.2 - define-properties@1.2.1: + jest-circus@27.5.1: dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - depd@1.1.2: {} - - destroy@1.0.4: {} - - didyoumean@1.2.2: {} - - dlv@1.1.3: {} + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color - doctrine@2.1.0: + jest-cli@27.5.1: dependencies: - esutils: 2.0.3 + '@jest/core': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.2.0 + jest-config: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate - draht@1.0.1: + jest-config@27.5.1: dependencies: - eventemitter2: 5.0.1 + '@babel/core': 7.26.0 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1(@babel/core@7.26.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate - dunder-proto@1.0.0: + jest-diff@27.5.1: dependencies: - call-bind-apply-helpers: 1.0.0 - es-errors: 1.3.0 - gopd: 1.2.0 - - eastasianwidth@0.2.0: {} + chalk: 4.1.2 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 - ecdsa-sig-formatter@1.0.11: + jest-docblock@27.5.1: dependencies: - safe-buffer: 5.2.1 - - ee-first@1.1.1: {} + detect-newline: 3.1.0 - electron-to-chromium@1.5.71: {} + jest-each@27.5.1: + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + + jest-environment-jsdom@27.5.1: + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + jest-mock: 27.5.1 + jest-util: 27.5.1 + jsdom: 16.7.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate - emoji-regex@8.0.0: {} + jest-environment-node@27.5.1: + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + jest-mock: 27.5.1 + jest-util: 27.5.1 - emoji-regex@9.2.2: {} + jest-get-type@27.5.1: {} - encodeurl@1.0.2: {} + jest-haste-map@27.5.1: + dependencies: + '@jest/types': 27.5.1 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.10.2 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 - es-abstract@1.23.5: + jest-jasmine2@27.5.1: dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.2.0 - is-shared-array-buffer: 1.0.3 - is-string: 1.1.0 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.3 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.3 - typed-array-length: 1.0.7 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.16 + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color - es-array-method-boxes-properly@1.0.0: {} + jest-leak-detector@27.5.1: + dependencies: + jest-get-type: 27.5.1 + pretty-format: 27.5.1 - es-define-property@1.0.1: {} + jest-matcher-utils@27.5.1: + dependencies: + chalk: 4.1.2 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 - es-errors@1.3.0: {} + jest-message-util@27.5.1: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 - es-iterator-helpers@1.2.0: + jest-message-util@28.1.3: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.0.7 - iterator.prototype: 1.1.3 - safe-array-concat: 1.1.2 + '@babel/code-frame': 7.26.2 + '@jest/types': 28.1.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@27.5.1: + dependencies: + '@jest/types': 27.5.1 + '@types/node': 22.10.2 - es-object-atoms@1.0.0: + jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + optionalDependencies: + jest-resolve: 27.5.1 + + jest-regex-util@27.5.1: {} + + jest-regex-util@28.0.2: {} + + jest-resolve-dependencies@27.5.1: dependencies: - es-errors: 1.3.0 + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 + transitivePeerDependencies: + - supports-color - es-set-tostringtag@2.0.3: + jest-resolve@27.5.1: dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 + '@jest/types': 27.5.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) + jest-util: 27.5.1 + jest-validate: 27.5.1 + resolve: 1.22.8 + resolve.exports: 1.1.1 + slash: 3.0.0 - es-shim-unscopables@1.0.2: + jest-runner@27.5.1: dependencies: - hasown: 2.0.2 + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + chalk: 4.1.2 + emittery: 0.8.1 + graceful-fs: 4.2.11 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + source-map-support: 0.5.21 + throat: 6.0.2 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate - es-to-primitive@1.3.0: + jest-runtime@27.5.1: dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.1.0 + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color - esbuild@0.24.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.24.0 - '@esbuild/android-arm': 0.24.0 - '@esbuild/android-arm64': 0.24.0 - '@esbuild/android-x64': 0.24.0 - '@esbuild/darwin-arm64': 0.24.0 - '@esbuild/darwin-x64': 0.24.0 - '@esbuild/freebsd-arm64': 0.24.0 - '@esbuild/freebsd-x64': 0.24.0 - '@esbuild/linux-arm': 0.24.0 - '@esbuild/linux-arm64': 0.24.0 - '@esbuild/linux-ia32': 0.24.0 - '@esbuild/linux-loong64': 0.24.0 - '@esbuild/linux-mips64el': 0.24.0 - '@esbuild/linux-ppc64': 0.24.0 - '@esbuild/linux-riscv64': 0.24.0 - '@esbuild/linux-s390x': 0.24.0 - '@esbuild/linux-x64': 0.24.0 - '@esbuild/netbsd-x64': 0.24.0 - '@esbuild/openbsd-arm64': 0.24.0 - '@esbuild/openbsd-x64': 0.24.0 - '@esbuild/sunos-x64': 0.24.0 - '@esbuild/win32-arm64': 0.24.0 - '@esbuild/win32-ia32': 0.24.0 - '@esbuild/win32-x64': 0.24.0 + jest-serializer@27.5.1: + dependencies: + '@types/node': 22.10.2 + graceful-fs: 4.2.11 - escalade@3.2.0: {} + jest-snapshot@27.5.1: + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.3 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__traverse': 7.20.6 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + chalk: 4.1.2 + expect: 27.5.1 + graceful-fs: 4.2.11 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + natural-compare: 1.4.0 + pretty-format: 27.5.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color - escape-html@1.0.3: {} + jest-util@27.5.1: + dependencies: + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 - escape-string-regexp@1.0.5: {} + jest-util@28.1.3: + dependencies: + '@jest/types': 28.1.3 + '@types/node': 22.10.2 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 - escape-string-regexp@4.0.0: {} + jest-validate@27.5.1: + dependencies: + '@jest/types': 27.5.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 27.5.1 + leven: 3.1.0 + pretty-format: 27.5.1 - eslint-plugin-react-hooks@5.1.0(eslint@9.16.0(jiti@1.21.6)): + jest-watch-typeahead@1.1.0(jest@27.5.1): dependencies: - eslint: 9.16.0(jiti@1.21.6) + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.5.1 + jest-regex-util: 28.0.2 + jest-watcher: 28.1.3 + slash: 4.0.0 + string-length: 5.0.1 + strip-ansi: 7.1.0 - eslint-plugin-react-refresh@0.4.16(eslint@9.16.0(jiti@1.21.6)): + jest-watcher@27.5.1: dependencies: - eslint: 9.16.0(jiti@1.21.6) + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 22.10.2 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.5.1 + string-length: 4.0.2 - eslint-plugin-react@7.37.2(eslint@9.16.0(jiti@1.21.6)): + jest-watcher@28.1.3: dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.0 - eslint: 9.16.0(jiti@1.21.6) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - string.prototype.repeat: 1.0.0 + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 22.10.2 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.10.2 + jest-util: 28.1.3 + string-length: 4.0.2 - eslint-scope@8.2.0: + jest-worker@26.6.2: dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 + '@types/node': 22.10.2 + merge-stream: 2.0.0 + supports-color: 7.2.0 - eslint-visitor-keys@3.4.3: {} + jest-worker@27.5.1: + dependencies: + '@types/node': 22.10.2 + merge-stream: 2.0.0 + supports-color: 8.1.1 - eslint-visitor-keys@4.2.0: {} + jest-worker@28.1.3: + dependencies: + '@types/node': 22.10.2 + merge-stream: 2.0.0 + supports-color: 8.1.1 - eslint@9.16.0(jiti@1.21.6): + jest@27.5.1: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.1 - '@eslint/core': 0.9.1 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.16.0 - '@eslint/plugin-kit': 0.2.4 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0 - escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 1.21.6 + '@jest/core': 27.5.1 + import-local: 3.2.0 + jest-cli: 27.5.1 transitivePeerDependencies: + - bufferutil + - canvas - supports-color + - ts-node + - utf-8-validate - espree@10.3.0: + jiti@1.21.6: {} + + js-cookie@2.2.1: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 4.2.0 + argparse: 1.0.10 + esprima: 4.0.1 - esquery@1.6.0: + js-yaml@4.1.0: dependencies: - estraverse: 5.3.0 + argparse: 2.0.1 - esrecurse@4.3.0: + jsdom@16.7.0: dependencies: - estraverse: 5.3.0 + abab: 2.0.6 + acorn: 8.14.0 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.1.0 + form-data: 3.0.2 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.16 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.10 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - estraverse@5.3.0: {} + jsesc@3.0.2: {} - esutils@2.0.3: {} + json-buffer@3.0.1: {} - etag@1.8.1: {} + json-parse-even-better-errors@2.3.1: {} - eventemitter2@5.0.1: {} + json-schema-traverse@0.4.1: {} - express@4.16.4: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.18.3 - content-disposition: 0.5.2 - content-type: 1.0.4 - cookie: 0.3.1 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 1.1.2 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.1.1 - fresh: 0.5.2 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.3.0 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.5.2 - range-parser: 1.2.1 - safe-buffer: 5.1.2 - send: 0.16.2 - serve-static: 1.13.2 - setprototypeof: 1.1.0 - statuses: 1.4.0 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color + json-schema-traverse@1.0.0: {} - fast-deep-equal@2.0.1: {} + json-schema@0.4.0: {} - fast-deep-equal@3.1.3: {} + json-stable-stringify-without-jsonify@1.0.1: {} - fast-glob@3.3.2: + json5@1.0.2: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 + minimist: 1.2.8 - fast-json-stable-stringify@2.1.0: {} + json5@2.2.3: {} - fast-levenshtein@2.0.6: {} + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 - fastparse@1.1.2: {} + jsonpath@1.1.1: + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 - fastq@1.17.1: + jsonpointer@5.0.1: {} + + jsx-ast-utils@3.3.5: dependencies: - reusify: 1.0.4 + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 - file-entry-cache@8.0.0: + keyv@4.5.4: dependencies: - flat-cache: 4.0.1 + json-buffer: 3.0.1 - fill-range@7.1.1: + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + klona@2.0.6: {} + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: dependencies: - to-regex-range: 5.0.1 + language-subtag-registry: 0.3.23 - finalhandler@1.1.1: + launch-editor@2.9.1: dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.4.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color + picocolors: 1.1.1 + shell-quote: 1.8.2 - find-root@1.1.0: {} + leven@3.1.0: {} - find-up@5.0.0: + levn@0.3.0: dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} - flaschenpost@1.1.3: - dependencies: - '@babel/runtime': 7.2.0 - app-root-path: 2.1.0 - babel-runtime: 6.26.0 - chalk: 2.4.1 - find-root: 1.1.0 - lodash: 4.17.11 - moment: 2.22.2 - processenv: 1.1.0 - split2: 3.0.0 - stack-trace: 0.0.10 - stringify-object: 3.3.0 - untildify: 3.0.3 - util.promisify: 1.0.0 - varname: 2.0.3 + loader-runner@4.3.0: {} - flat-cache@4.0.1: + loader-utils@2.0.4: dependencies: - flatted: 3.3.2 - keyv: 4.5.4 + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 - flatted@3.3.2: {} + loader-utils@3.3.1: {} - for-each@0.3.3: + locate-path@3.0.0: dependencies: - is-callable: 1.2.7 + p-locate: 3.0.0 + path-exists: 3.0.0 - foreground-child@3.3.0: + locate-path@5.0.0: dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 + p-locate: 4.1.0 - formats@1.0.0: {} + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 - forwarded@0.2.0: {} + lodash.castarray@4.4.0: {} - fraction.js@4.3.7: {} + lodash.debounce@4.0.8: {} - fresh@0.5.2: {} + lodash.isplainobject@4.0.6: {} - fsevents@2.3.3: - optional: true + lodash.memoize@4.1.2: {} - function-bind@1.1.2: {} + lodash.merge@4.6.2: {} - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - functions-have-names: 1.2.3 + lodash.sortby@4.7.0: {} - functions-have-names@1.2.3: {} + lodash.uniq@4.5.0: {} - gensync@1.0.0-beta.2: {} + lodash@4.17.21: {} - get-intrinsic@1.2.4: + loose-envify@1.4.0: dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 + js-tokens: 4.0.0 - get-own-enumerable-property-symbols@3.0.2: {} + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 - get-symbol-description@1.0.2: + lru-cache@10.4.3: {} + + lru-cache@5.1.1: dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 + yallist: 3.1.1 - glob-parent@5.1.2: + magic-string@0.25.9: dependencies: - is-glob: 4.0.3 + sourcemap-codec: 1.4.8 - glob-parent@6.0.2: + make-dir@3.1.0: dependencies: - is-glob: 4.0.3 + semver: 6.3.1 - glob@10.4.5: + make-dir@4.0.0: dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 + semver: 7.6.3 - globals@11.12.0: {} + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 - globals@14.0.0: {} + mdn-data@2.0.14: {} - globals@15.13.0: {} + mdn-data@2.0.4: {} - globalthis@1.0.4: + media-typer@0.3.0: {} + + memfs@3.5.3: dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 + fs-monkey: 1.0.6 - gopd@1.2.0: {} + merge-descriptors@1.0.3: {} - has-bigints@1.0.2: {} + merge-stream@2.0.0: {} - has-flag@3.0.0: {} + merge2@1.4.1: {} - has-flag@4.0.0: {} + methods@1.1.2: {} - has-property-descriptors@1.0.2: + micromatch@4.0.8: dependencies: - es-define-property: 1.0.1 + braces: 3.0.3 + picomatch: 2.3.1 - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.0 + mime-db@1.52.0: {} - has-symbols@1.1.0: {} + mime-db@1.53.0: {} - has-tostringtag@1.0.2: + mime-types@2.1.35: dependencies: - has-symbols: 1.1.0 + mime-db: 1.52.0 - hase@2.0.0: - dependencies: - '@babel/runtime': 7.1.2 - amqplib: 0.5.2 + mime@1.6.0: {} - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 + mimic-fn@2.1.0: {} - http-errors@1.6.3: + mini-css-extract-plugin@2.9.2(webpack@5.97.1): dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 + schema-utils: 4.3.0 + tapable: 2.2.1 + webpack: 5.97.1 - iconv-lite@0.4.23: - dependencies: - safer-buffer: 2.1.2 + minimalistic-assert@1.0.1: {} - ignore@5.3.2: {} + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 - import-fresh@3.3.0: + minimatch@5.1.6: dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 + brace-expansion: 2.0.1 - imurmurhash@0.1.4: {} + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 - inherits@2.0.3: {} + minimist@1.2.8: {} - inherits@2.0.4: {} + minipass@7.1.2: {} - internal-slot@1.0.7: + mkdirp@0.5.6: dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 + minimist: 1.2.8 - ipaddr.js@1.9.1: {} + ms@2.0.0: {} - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.8 - get-intrinsic: 1.2.4 + ms@2.1.3: {} - is-async-function@2.0.0: + multicast-dns@7.2.5: dependencies: - has-tostringtag: 1.0.2 + dns-packet: 5.6.1 + thunky: 1.1.0 - is-bigint@1.1.0: + mz@2.7.0: dependencies: - has-bigints: 1.0.2 + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 - is-binary-path@2.1.0: + nano-css@5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - binary-extensions: 2.3.0 + '@jridgewell/sourcemap-codec': 1.5.0 + css-tree: 1.1.3 + csstype: 3.1.3 + fastest-stable-stringify: 2.0.2 + inline-style-prefixer: 7.0.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + rtl-css-js: 1.16.1 + stacktrace-js: 2.0.2 + stylis: 4.3.4 - is-boolean-object@1.2.0: - dependencies: - call-bind: 1.0.8 - has-tostringtag: 1.0.2 + nanoid@3.3.8: {} - is-callable@1.2.7: {} + natural-compare-lite@1.4.0: {} - is-core-module@2.15.1: - dependencies: - hasown: 2.0.2 + natural-compare@1.4.0: {} - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 + negotiator@0.6.3: {} - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 + negotiator@0.6.4: {} - is-extglob@2.1.1: {} + neo-async@2.6.2: {} - is-finalizationregistry@1.1.0: + no-case@3.0.4: dependencies: - call-bind: 1.0.8 + lower-case: 2.0.2 + tslib: 2.8.1 - is-fullwidth-code-point@3.0.0: {} + node-forge@1.3.1: {} - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 + node-int64@0.4.0: {} - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 + node-releases@2.0.18: {} - is-map@2.0.3: {} + normalize-path@3.0.0: {} - is-negative-zero@2.0.3: {} + normalize-range@0.1.2: {} - is-number-object@1.1.0: - dependencies: - call-bind: 1.0.8 - has-tostringtag: 1.0.2 + normalize-url@6.1.0: {} - is-number@7.0.0: {} + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 - is-obj@1.0.1: {} + nth-check@1.0.2: + dependencies: + boolbase: 1.0.0 - is-regex@1.2.0: + nth-check@2.1.1: dependencies: - call-bind: 1.0.8 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 + boolbase: 1.0.0 - is-regexp@1.0.0: {} + nwsapi@2.2.16: {} - is-set@2.0.3: {} + object-assign@4.1.1: {} - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.8 + object-hash@3.0.0: {} - is-string@1.1.0: - dependencies: - call-bind: 1.0.8 - has-tostringtag: 1.0.2 + object-inspect@1.13.3: {} - is-symbol@1.1.0: + object-keys@1.1.1: {} + + object.assign@4.1.5: dependencies: call-bind: 1.0.8 + define-properties: 1.2.1 has-symbols: 1.1.0 - safe-regex-test: 1.0.3 + object-keys: 1.1.1 - is-typed-array@1.1.13: + object.entries@1.1.8: dependencies: - which-typed-array: 1.1.16 - - is-weakmap@2.0.2: {} + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 - is-weakref@1.0.2: + object.fromentries@2.0.8: dependencies: call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 - is-weakset@2.0.3: + object.getownpropertydescriptors@2.1.8: dependencies: + array.prototype.reduce: 1.0.7 call-bind: 1.0.8 - get-intrinsic: 1.2.4 - - isarray@0.0.1: {} - - isarray@2.0.5: {} + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-object-atoms: 1.0.0 + gopd: 1.2.0 + safe-array-concat: 1.1.2 - isexe@2.0.0: {} + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 - iterator.prototype@1.1.3: + object.values@1.2.0: dependencies: + call-bind: 1.0.8 define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.1.0 - reflect.getprototypeof: 1.0.7 - set-function-name: 2.0.2 + es-object-atoms: 1.0.0 - jackspeak@3.4.3: + obuf@1.1.2: {} + + on-finished@2.4.1: dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + ee-first: 1.1.1 - jiti@1.21.6: {} + on-headers@1.0.2: {} - js-tokens@4.0.0: {} + once@1.4.0: + dependencies: + wrappy: 1.0.2 - js-yaml@4.1.0: + onetime@5.1.2: dependencies: - argparse: 2.0.1 + mimic-fn: 2.1.0 - jsesc@3.0.2: {} + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 - json-buffer@3.0.1: {} + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 - json-lines@1.0.0: + optionator@0.9.4: dependencies: - timer2: 1.0.0 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 - json-schema-traverse@0.4.1: {} + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 - json-stable-stringify-without-jsonify@1.0.1: {} + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 - json5@2.2.3: {} + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 - jsonwebtoken@8.5.0: + p-locate@4.1.0: dependencies: - jws: 3.2.2 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 5.7.2 + p-limit: 2.3.0 - jsx-ast-utils@3.3.5: + p-locate@5.0.0: dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + p-limit: 3.1.0 - jwa@1.4.1: + p-retry@4.6.2: dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} - jws@3.2.2: + param-case@3.0.4: dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 + dot-case: 3.0.4 + tslib: 2.8.1 - keyv@4.5.4: + parent-module@1.0.1: dependencies: - json-buffer: 3.0.1 + callsites: 3.1.0 - levn@0.4.1: + parse-json@5.2.0: dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 - lilconfig@2.1.0: {} + parse5@6.0.1: {} - lilconfig@3.1.3: {} + parseurl@1.3.3: {} - limes@2.0.0: + pascal-case@3.1.2: dependencies: - '@babel/runtime': 7.3.4 - jsonwebtoken: 8.5.0 + no-case: 3.0.4 + tslib: 2.8.1 - lines-and-columns@1.2.4: {} + path-exists@3.0.0: {} - locate-path@6.0.0: + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: dependencies: - p-locate: 5.0.0 + lru-cache: 10.4.3 + minipass: 7.1.2 - lodash.castarray@4.4.0: {} + path-to-regexp@0.1.12: {} - lodash.includes@4.3.0: {} + path-type@4.0.0: {} - lodash.isboolean@3.0.3: {} + performance-now@2.1.0: {} - lodash.isinteger@4.0.4: {} + picocolors@0.2.1: {} - lodash.isnumber@3.0.3: {} + picocolors@1.1.1: {} - lodash.isplainobject@4.0.6: {} + picomatch@2.3.1: {} - lodash.isstring@4.0.1: {} + pify@2.3.0: {} - lodash.merge@4.6.2: {} + pirates@4.0.6: {} - lodash.once@4.1.1: {} + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 - lodash@4.17.11: {} + pkg-up@3.1.0: + dependencies: + find-up: 3.0.0 - lodash@4.17.5: {} + possible-typed-array-names@1.0.0: {} - loose-envify@1.4.0: + postcss-attribute-case-insensitive@5.0.2(postcss@8.4.49): dependencies: - js-tokens: 4.0.0 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - lru-cache@10.4.3: {} + postcss-browser-comments@4.0.0(browserslist@4.24.2)(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + postcss: 8.4.49 - lru-cache@5.1.1: + postcss-calc@8.2.4(postcss@8.4.49): dependencies: - yallist: 3.1.1 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 - lusca@1.6.1: + postcss-clamp@4.1.0(postcss@8.4.49): dependencies: - tsscmp: 1.0.6 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - media-typer@0.3.0: {} + postcss-color-functional-notation@4.2.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - merge-descriptors@1.0.1: {} + postcss-color-hex-alpha@8.0.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - merge2@1.4.1: {} + postcss-color-rebeccapurple@7.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - methods@1.1.2: {} + postcss-colormin@5.3.1(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - micromatch@4.0.8: + postcss-convert-values@5.1.3(postcss@8.4.49): dependencies: - braces: 3.0.3 - picomatch: 2.3.1 + browserslist: 4.24.2 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - mime-db@1.52.0: {} + postcss-custom-media@8.0.2(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - mime-db@1.53.0: {} + postcss-custom-properties@12.1.11(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - mime-types@2.1.35: + postcss-custom-selectors@6.0.3(postcss@8.4.49): dependencies: - mime-db: 1.52.0 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - mime@1.4.1: {} + postcss-dir-pseudo-class@6.0.5(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - minimatch@3.1.2: + postcss-discard-comments@5.1.2(postcss@8.4.49): dependencies: - brace-expansion: 1.1.11 + postcss: 8.4.49 - minimatch@9.0.5: + postcss-discard-duplicates@5.1.0(postcss@8.4.49): dependencies: - brace-expansion: 2.0.1 + postcss: 8.4.49 - minipass@7.1.2: {} + postcss-discard-empty@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - moment@2.22.2: {} + postcss-discard-overridden@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - morgan@1.9.1: + postcss-double-position-gradients@3.1.2(postcss@8.4.49): dependencies: - basic-auth: 2.0.1 - debug: 2.6.9 - depd: 1.1.2 - on-finished: 2.3.0 - on-headers: 1.0.2 - transitivePeerDependencies: - - supports-color + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - ms@2.0.0: {} + postcss-env-function@4.0.6(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - ms@2.1.3: {} + postcss-flexbugs-fixes@5.0.2(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - mz@2.7.0: + postcss-focus-visible@6.0.4(postcss@8.4.49): dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - nanoid@3.3.8: {} + postcss-focus-within@5.0.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - natural-compare@1.4.0: {} + postcss-font-variant@5.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - negotiator@0.6.3: {} + postcss-gap-properties@3.0.5(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - nocache@2.0.0: {} + postcss-image-set-function@4.0.7(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - node-releases@2.0.18: {} + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 - node-rsa@0.4.2: + postcss-initial@4.0.1(postcss@8.4.49): dependencies: - asn1: 0.2.3 + postcss: 8.4.49 - node-statsd@0.1.1: {} + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 - normalize-path@3.0.0: {} + postcss-lab-function@4.2.1(postcss@8.4.49): + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - normalize-range@0.1.2: {} + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.3 + yaml: 2.6.1 + optionalDependencies: + postcss: 8.4.49 - object-assign@4.1.1: {} + postcss-loader@6.2.1(postcss@8.4.49)(webpack@5.97.1): + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.6 + postcss: 8.4.49 + semver: 7.6.3 + webpack: 5.97.1 - object-hash@3.0.0: {} + postcss-logical@5.0.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - object-inspect@1.13.3: {} + postcss-media-minmax@5.0.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - object-keys@1.1.1: {} + postcss-merge-longhand@5.1.7(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.49) - object.assign@4.1.5: + postcss-merge-rules@5.1.4(postcss@8.4.49): dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 + browserslist: 4.24.2 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - object.entries@1.1.8: + postcss-minify-font-values@5.1.0(postcss@8.4.49): dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - object.fromentries@2.0.8: + postcss-minify-gradients@5.1.1(postcss@8.4.49): dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-object-atoms: 1.0.0 + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - object.getownpropertydescriptors@2.1.8: + postcss-minify-params@5.1.4(postcss@8.4.49): dependencies: - array.prototype.reduce: 1.0.7 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-object-atoms: 1.0.0 - gopd: 1.2.0 - safe-array-concat: 1.1.2 + browserslist: 4.24.2 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - object.values@1.2.0: + postcss-minify-selectors@5.2.1(postcss@8.4.49): dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + postcss-modules-local-by-default@4.2.0(postcss@8.4.49): + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 7.0.0 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 7.0.0 + + postcss-modules-values@4.0.0(postcss@8.4.49): + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 - on-finished@2.3.0: + postcss-nested@6.2.0(postcss@8.4.49): dependencies: - ee-first: 1.1.1 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - on-headers@1.0.2: {} + postcss-nesting@10.2.0(postcss@8.4.49): + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - optionator@0.9.4: + postcss-normalize-charset@5.1.0(postcss@8.4.49): dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 + postcss: 8.4.49 - p-limit@3.1.0: + postcss-normalize-display-values@5.1.0(postcss@8.4.49): dependencies: - yocto-queue: 0.1.0 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - p-locate@5.0.0: + postcss-normalize-positions@5.1.1(postcss@8.4.49): dependencies: - p-limit: 3.1.0 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - package-json-from-dist@1.0.1: {} + postcss-normalize-repeat-style@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - parent-module@1.0.1: + postcss-normalize-string@5.1.0(postcss@8.4.49): dependencies: - callsites: 3.1.0 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - parseurl@1.3.3: {} + postcss-normalize-timing-functions@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - partof@1.0.0: {} + postcss-normalize-unicode@5.1.1(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - path-exists@4.0.0: {} + postcss-normalize-url@5.1.0(postcss@8.4.49): + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - path-key@3.1.1: {} + postcss-normalize-whitespace@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - path-parse@1.0.7: {} + postcss-normalize@10.0.1(browserslist@4.24.2)(postcss@8.4.49): + dependencies: + '@csstools/normalize.css': 12.1.1 + browserslist: 4.24.2 + postcss: 8.4.49 + postcss-browser-comments: 4.0.0(browserslist@4.24.2)(postcss@8.4.49) + sanitize.css: 13.0.0 - path-scurry@1.11.1: + postcss-opacity-percentage@1.1.3(postcss@8.4.49): dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 + postcss: 8.4.49 - path-to-regexp@0.1.7: {} + postcss-ordered-values@5.1.3(postcss@8.4.49): + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - picocolors@1.1.1: {} + postcss-overflow-shorthand@3.0.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - picomatch@2.3.1: {} + postcss-page-break@3.0.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 - pify@2.3.0: {} + postcss-place@7.0.5(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 - pirates@4.0.6: {} + postcss-preset-env@7.8.3(postcss@8.4.49): + dependencies: + '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.49) + '@csstools/postcss-color-function': 1.1.1(postcss@8.4.49) + '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.49) + '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.49) + '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.49) + '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.49) + '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.49) + '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.49) + '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.49) + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.49) + '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.49) + '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.49) + '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.49) + autoprefixer: 10.4.20(postcss@8.4.49) + browserslist: 4.24.2 + css-blank-pseudo: 3.0.3(postcss@8.4.49) + css-has-pseudo: 3.0.4(postcss@8.4.49) + css-prefers-color-scheme: 6.0.3(postcss@8.4.49) + cssdb: 7.11.2 + postcss: 8.4.49 + postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.49) + postcss-clamp: 4.1.0(postcss@8.4.49) + postcss-color-functional-notation: 4.2.4(postcss@8.4.49) + postcss-color-hex-alpha: 8.0.4(postcss@8.4.49) + postcss-color-rebeccapurple: 7.1.1(postcss@8.4.49) + postcss-custom-media: 8.0.2(postcss@8.4.49) + postcss-custom-properties: 12.1.11(postcss@8.4.49) + postcss-custom-selectors: 6.0.3(postcss@8.4.49) + postcss-dir-pseudo-class: 6.0.5(postcss@8.4.49) + postcss-double-position-gradients: 3.1.2(postcss@8.4.49) + postcss-env-function: 4.0.6(postcss@8.4.49) + postcss-focus-visible: 6.0.4(postcss@8.4.49) + postcss-focus-within: 5.0.4(postcss@8.4.49) + postcss-font-variant: 5.0.0(postcss@8.4.49) + postcss-gap-properties: 3.0.5(postcss@8.4.49) + postcss-image-set-function: 4.0.7(postcss@8.4.49) + postcss-initial: 4.0.1(postcss@8.4.49) + postcss-lab-function: 4.2.1(postcss@8.4.49) + postcss-logical: 5.0.4(postcss@8.4.49) + postcss-media-minmax: 5.0.0(postcss@8.4.49) + postcss-nesting: 10.2.0(postcss@8.4.49) + postcss-opacity-percentage: 1.1.3(postcss@8.4.49) + postcss-overflow-shorthand: 3.0.4(postcss@8.4.49) + postcss-page-break: 3.0.4(postcss@8.4.49) + postcss-place: 7.0.5(postcss@8.4.49) + postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.49) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.49) + postcss-selector-not: 6.0.1(postcss@8.4.49) + postcss-value-parser: 4.2.0 - possible-typed-array-names@1.0.0: {} + postcss-pseudo-class-any-link@7.1.6(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - postcss-import@15.1.0(postcss@8.4.49): + postcss-reduce-initial@5.1.2(postcss@8.4.49): dependencies: + browserslist: 4.24.2 + caniuse-api: 3.0.0 postcss: 8.4.49 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.49): + postcss-reduce-transforms@5.1.0(postcss@8.4.49): dependencies: - camelcase-css: 2.0.1 postcss: 8.4.49 + postcss-value-parser: 4.2.0 - postcss-load-config@4.0.2(postcss@8.4.49): + postcss-replace-overflow-wrap@4.0.0(postcss@8.4.49): dependencies: - lilconfig: 3.1.3 - yaml: 2.6.1 - optionalDependencies: postcss: 8.4.49 - postcss-nested@6.2.0(postcss@8.4.49): + postcss-selector-not@6.0.1(postcss@8.4.49): dependencies: postcss: 8.4.49 postcss-selector-parser: 6.1.2 @@ -4016,19 +11248,69 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.0.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-svgo@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + + postcss-unique-selectors@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + postcss-value-parser@4.2.0: {} + postcss@7.0.39: + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + postcss@8.4.49: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 + prelude-ls@1.1.2: {} + prelude-ls@1.2.1: {} - processenv@1.1.0: + pretty-bytes@5.6.0: {} + + pretty-error@4.0.0: + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + pretty-format@28.1.3: dependencies: - babel-runtime: 6.26.0 + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + process-nextick-args@2.0.1: {} + + promise@8.3.0: + dependencies: + asap: 2.0.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 prop-types@15.8.1: dependencies: @@ -4041,29 +11323,98 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + psl@1.15.0: + dependencies: + punycode: 2.3.1 + punycode@2.3.1: {} - qs@6.5.2: {} + q@1.5.1: {} + + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + + querystringify@2.2.0: {} queue-microtask@1.2.3: {} + raf@3.4.1: + dependencies: + performance-now: 2.1.0 + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + range-parser@1.2.1: {} - raw-body@2.3.3: + raw-body@2.5.2: dependencies: - bytes: 3.0.0 - http-errors: 1.6.3 - iconv-lite: 0.4.23 + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 unpipe: 1.0.0 + react-app-polyfill@3.0.0: + dependencies: + core-js: 3.39.0 + object-assign: 4.1.1 + promise: 8.3.0 + raf: 3.4.1 + regenerator-runtime: 0.13.11 + whatwg-fetch: 3.6.20 + + react-dev-utils@12.0.1(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)(webpack@5.97.1): + dependencies: + '@babel/code-frame': 7.26.2 + address: 1.2.2 + browserslist: 4.24.2 + chalk: 4.1.2 + cross-spawn: 7.0.6 + detect-port-alt: 1.1.6 + escape-string-regexp: 4.0.0 + filesize: 8.0.7 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)(webpack@5.97.1) + global-modules: 2.0.0 + globby: 11.1.0 + gzip-size: 6.0.0 + immer: 9.0.21 + is-root: 2.1.0 + loader-utils: 3.3.1 + open: 8.4.2 + pkg-up: 3.1.0 + prompts: 2.4.2 + react-error-overlay: 6.0.11 + recursive-readdir: 2.2.3 + shell-quote: 1.8.2 + strip-ansi: 6.0.1 + text-table: 0.2.0 + webpack: 5.97.1 + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 + react-error-overlay@6.0.11: {} + react-is@16.13.1: {} + react-is@17.0.2: {} + + react-is@18.3.1: {} + + react-refresh@0.11.0: {} + react-refresh@0.14.2: {} react-router-dom@7.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -4082,6 +11433,117 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0))(@types/babel__core@7.20.5)(eslint@9.16.0(jiti@1.21.6))(react@18.3.1)(type-fest@0.21.3)(typescript@4.9.5): + dependencies: + '@babel/core': 7.26.0 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(webpack@5.97.1))(webpack@5.97.1) + '@svgr/webpack': 5.5.0 + babel-jest: 27.5.1(@babel/core@7.26.0) + babel-loader: 8.4.1(@babel/core@7.26.0)(webpack@5.97.1) + babel-plugin-named-asset-import: 0.3.8(@babel/core@7.26.0) + babel-preset-react-app: 10.0.1 + bfj: 7.1.0 + browserslist: 4.24.2 + camelcase: 6.3.0 + case-sensitive-paths-webpack-plugin: 2.4.0 + css-loader: 6.11.0(webpack@5.97.1) + css-minimizer-webpack-plugin: 3.4.1(webpack@5.97.1) + dotenv: 10.0.0 + dotenv-expand: 5.1.0 + eslint: 9.16.0(jiti@1.21.6) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0))(eslint@9.16.0(jiti@1.21.6))(jest@27.5.1)(typescript@4.9.5) + eslint-webpack-plugin: 3.2.0(eslint@9.16.0(jiti@1.21.6))(webpack@5.97.1) + file-loader: 6.2.0(webpack@5.97.1) + fs-extra: 10.1.0 + html-webpack-plugin: 5.6.3(webpack@5.97.1) + identity-obj-proxy: 3.0.0 + jest: 27.5.1 + jest-resolve: 27.5.1 + jest-watch-typeahead: 1.1.0(jest@27.5.1) + mini-css-extract-plugin: 2.9.2(webpack@5.97.1) + postcss: 8.4.49 + postcss-flexbugs-fixes: 5.0.2(postcss@8.4.49) + postcss-loader: 6.2.1(postcss@8.4.49)(webpack@5.97.1) + postcss-normalize: 10.0.1(browserslist@4.24.2)(postcss@8.4.49) + postcss-preset-env: 7.8.3(postcss@8.4.49) + prompts: 2.4.2 + react: 18.3.1 + react-app-polyfill: 3.0.0 + react-dev-utils: 12.0.1(eslint@9.16.0(jiti@1.21.6))(typescript@4.9.5)(webpack@5.97.1) + react-refresh: 0.11.0 + resolve: 1.22.8 + resolve-url-loader: 4.0.0 + sass-loader: 12.6.0(webpack@5.97.1) + semver: 7.6.3 + source-map-loader: 3.0.2(webpack@5.97.1) + style-loader: 3.3.4(webpack@5.97.1) + tailwindcss: 3.4.12 + terser-webpack-plugin: 5.3.11(webpack@5.97.1) + webpack: 5.97.1 + webpack-dev-server: 4.15.2(webpack@5.97.1) + webpack-manifest-plugin: 4.1.1(webpack@5.97.1) + workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.97.1) + optionalDependencies: + fsevents: 2.3.3 + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@types/babel__core' + - '@types/webpack' + - bufferutil + - canvas + - clean-css + - csso + - debug + - esbuild + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - fibers + - node-notifier + - node-sass + - rework + - rework-visit + - sass + - sass-embedded + - sockjs-client + - supports-color + - ts-node + - type-fest + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-hot-middleware + - webpack-plugin-serve + + react-universal-interface@0.6.2(react@18.3.1)(tslib@2.8.1): + dependencies: + react: 18.3.1 + tslib: 2.8.1 + + react-use@17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@types/js-cookie': 2.2.7 + '@xobotyi/scrollbar-width': 1.9.5 + copy-to-clipboard: 3.3.3 + fast-deep-equal: 3.1.3 + fast-shallow-equal: 1.0.0 + js-cookie: 2.2.1 + nano-css: 5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-universal-interface: 0.6.2(react@18.3.1)(tslib@2.8.1) + resize-observer-polyfill: 1.5.1 + screenfull: 5.2.0 + set-harmonic-interval: 1.0.1 + throttle-debounce: 3.0.1 + ts-easing: 0.2.0 + tslib: 2.8.1 + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -4090,12 +11552,15 @@ snapshots: dependencies: pify: 2.3.0 - readable-stream@1.1.14: + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 readable-stream@3.6.2: dependencies: @@ -4107,6 +11572,10 @@ snapshots: dependencies: picomatch: 2.3.1 + recursive-readdir@2.2.3: + dependencies: + minimatch: 3.1.2 + reflect.getprototypeof@1.0.7: dependencies: call-bind: 1.0.8 @@ -4117,10 +11586,24 @@ snapshots: gopd: 1.2.0 which-builtin-type: 1.2.0 - regenerator-runtime@0.11.1: {} + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} regenerator-runtime@0.12.1: {} + regenerator-runtime@0.13.11: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.26.0 + + regex-parser@2.3.0: {} + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.8 @@ -4128,8 +11611,57 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + relateurl@0.2.7: {} + + renderkid@3.0.0: + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + requires-port@1.0.0: {} + + resize-observer-polyfill@1.5.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + + resolve-url-loader@4.0.0: + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 7.0.39 + source-map: 0.6.1 + + resolve.exports@1.1.1: {} + resolve@1.22.8: dependencies: is-core-module: 2.15.1 @@ -4142,10 +11674,26 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - retry@0.12.0: {} + retry@0.13.1: {} reusify@1.0.4: {} + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup-plugin-terser@7.0.2(rollup@2.79.2): + dependencies: + '@babel/code-frame': 7.26.2 + jest-worker: 26.6.2 + rollup: 2.79.2 + serialize-javascript: 4.0.0 + terser: 5.37.0 + + rollup@2.79.2: + optionalDependencies: + fsevents: 2.3.3 + rollup@4.28.1: dependencies: '@types/estree': 1.0.6 @@ -4171,6 +11719,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.28.1 fsevents: 2.3.3 + rtl-css-js@1.16.1: + dependencies: + '@babel/runtime': 7.3.4 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -4194,38 +11746,106 @@ snapshots: safer-buffer@2.1.2: {} + sanitize.css@13.0.0: {} + + sass-loader@12.6.0(webpack@5.97.1): + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + webpack: 5.97.1 + + sax@1.2.4: {} + + saxes@5.0.1: + dependencies: + xmlchars: 2.2.0 + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 - semver@5.7.2: {} + schema-utils@2.7.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@2.7.1: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + screenfull@5.2.0: {} + + select-hose@2.0.0: {} + + selfsigned@2.4.1: + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 semver@6.3.1: {} - send@0.16.2: + semver@7.6.3: {} + + send@0.19.0: dependencies: debug: 2.6.9 - depd: 1.1.2 - destroy: 1.0.4 + depd: 2.0.0 + destroy: 1.2.0 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-javascript@4.0.0: + dependencies: + randombytes: 2.1.0 + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-index@1.9.1: + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 http-errors: 1.6.3 - mime: 1.4.1 - ms: 2.0.0 - on-finished: 2.3.0 - range-parser: 1.2.1 - statuses: 1.4.0 + mime-types: 2.1.35 + parseurl: 1.3.3 transitivePeerDependencies: - supports-color - serve-static@1.13.2: + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.16.2 + send: 0.19.0 transitivePeerDependencies: - supports-color @@ -4247,9 +11867,11 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + set-harmonic-interval@1.0.1: {} + setprototypeof@1.1.0: {} - sha-1@0.1.1: {} + setprototypeof@1.2.0: {} shebang-command@2.0.0: dependencies: @@ -4257,6 +11879,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.2: {} + side-channel@1.0.6: dependencies: call-bind: 1.0.8 @@ -4264,23 +11888,115 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.3 + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slash@4.0.0: {} + + sockjs@0.3.24: + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + + source-list-map@2.0.1: {} + source-map-js@1.2.1: {} - split2@3.0.0: + source-map-loader@3.0.2(webpack@5.97.1): + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.2.1 + webpack: 5.97.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.6: {} + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + sourcemap-codec@1.4.8: {} + + spdy-transport@3.0.0: dependencies: + debug: 4.4.0 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + + spdy@4.0.2: + dependencies: + debug: 4.4.0 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + + sprintf-js@1.0.3: {} + + stable@0.1.8: {} + + stack-generator@2.0.10: + dependencies: + stackframe: 1.3.4 + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + stackframe@1.3.4: {} - stack-trace@0.0.10: {} + stacktrace-gps@3.1.2: + dependencies: + source-map: 0.5.6 + stackframe: 1.3.4 + + stacktrace-js@2.0.2: + dependencies: + error-stack-parser: 2.1.4 + stack-generator: 2.0.10 + stacktrace-gps: 3.1.2 - statuses@1.4.0: {} + static-eval@2.0.2: + dependencies: + escodegen: 1.14.3 statuses@1.5.0: {} - stethoskop@1.0.0: + statuses@2.0.1: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-length@5.0.1: dependencies: - node-statsd: 0.1.1 + char-regex: 2.0.2 + strip-ansi: 7.1.0 + + string-natural-compare@3.0.1: {} string-width@4.2.3: dependencies: @@ -4294,6 +12010,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.8 @@ -4333,7 +12055,9 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - string_decoder@0.10.31: {} + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 string_decoder@1.3.0: dependencies: @@ -4353,8 +12077,28 @@ snapshots: dependencies: ansi-regex: 6.1.0 + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-comments@2.0.1: {} + + strip-final-newline@2.0.0: {} + strip-json-comments@3.1.1: {} + style-loader@3.3.4(webpack@5.97.1): + dependencies: + webpack: 5.97.1 + + stylehacks@5.1.1(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + stylis@4.3.4: {} + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -4373,41 +12117,46 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@2.3.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} - tailwind@4.0.0: + svg-parser@2.0.4: {} + + svgo@1.3.2: dependencies: - '@babel/runtime': 7.3.4 - ajv: 6.10.0 - app-root-path: 2.1.0 - async-retry: 1.2.3 - body-parser: 1.18.3 - commands-events: 1.0.4 - compression: 1.7.3 - content-type: 1.0.4 - cors: 2.8.5 - crypto2: 2.0.0 - datasette: 1.0.1 - draht: 1.0.1 - express: 4.16.4 - flaschenpost: 1.1.3 - hase: 2.0.0 - json-lines: 1.0.0 - limes: 2.0.0 - lodash: 4.17.11 - lusca: 1.6.1 - morgan: 1.9.1 - nocache: 2.0.0 - partof: 1.0.0 - processenv: 1.1.0 - stethoskop: 1.0.0 - timer2: 1.0.0 - uuidv4: 3.0.1 - ws: 6.2.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + object.values: 1.2.0 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + symbol-tree@3.2.4: {} tailwindcss@3.4.12: dependencies: @@ -4436,6 +12185,48 @@ snapshots: transitivePeerDependencies: - ts-node + tapable@1.1.3: {} + + tapable@2.2.1: {} + + temp-dir@2.0.0: {} + + tempy@0.6.0: + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + + terminal-link@2.1.1: + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + + terser-webpack-plugin@5.3.11(webpack@5.97.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + terser: 5.37.0 + webpack: 5.97.1 + + terser@5.37.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-table@0.2.0: {} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -4444,22 +12235,75 @@ snapshots: dependencies: any-promise: 1.3.0 - timer2@1.0.0: {} + throat@6.0.2: {} + + throttle-debounce@3.0.1: {} + + thunky@1.1.0: {} + + tmpl@1.0.5: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + toggle-selection@1.0.6: {} + + toidentifier@1.0.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + tr46@2.1.0: + dependencies: + punycode: 2.3.1 + + tryer@1.0.1: {} + + ts-easing@0.2.0: {} + ts-interface-checker@0.1.13: {} - tsscmp@1.0.6: {} + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tsutils@3.21.0(typescript@4.9.5): + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 turbo-stream@2.4.0: {} + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + type-detect@4.0.8: {} + + type-fest@0.16.0: {} + + type-fest@0.21.3: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -4498,6 +12342,12 @@ snapshots: possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.7 + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + typescript@4.9.5: {} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.8 @@ -4505,9 +12355,34 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.0 + underscore@1.12.1: {} + + undici-types@6.20.0: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + + universalify@0.2.0: {} + + universalify@2.0.1: {} + unpipe@1.0.0: {} - untildify@3.0.3: {} + unquote@1.1.1: {} + + upath@1.2.0: {} update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: @@ -4519,40 +12394,198 @@ snapshots: dependencies: punycode: 2.3.1 + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + util-deprecate@1.0.2: {} - util.promisify@1.0.0: + util.promisify@1.0.1: dependencies: define-properties: 1.2.1 + es-abstract: 1.23.5 + has-symbols: 1.1.0 object.getownpropertydescriptors: 2.1.8 - utils-merge@1.0.1: {} + utila@0.4.0: {} - uuid@3.3.2: {} + utils-merge@1.0.1: {} - uuidv4@2.0.0: - dependencies: - sha-1: 0.1.1 - uuid: 3.3.2 + uuid@8.3.2: {} - uuidv4@3.0.1: + v8-to-istanbul@8.1.1: dependencies: - uuid: 3.3.2 - - varname@2.0.3: {} + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 1.9.0 + source-map: 0.7.4 vary@1.1.2: {} - vite@6.0.3(jiti@1.21.6)(yaml@2.6.1): + vite@6.0.3(@types/node@22.10.2)(jiti@1.21.6)(terser@5.37.0)(yaml@2.6.1): dependencies: esbuild: 0.24.0 postcss: 8.4.49 rollup: 4.28.1 optionalDependencies: + '@types/node': 22.10.2 fsevents: 2.3.3 jiti: 1.21.6 + terser: 5.37.0 yaml: 2.6.1 + w3c-hr-time@1.0.2: + dependencies: + browser-process-hrtime: 1.0.0 + + w3c-xmlserializer@2.0.0: + dependencies: + xml-name-validator: 3.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wbuf@1.7.3: + dependencies: + minimalistic-assert: 1.0.1 + + webidl-conversions@4.0.2: {} + + webidl-conversions@5.0.0: {} + + webidl-conversions@6.1.0: {} + + webpack-dev-middleware@5.3.4(webpack@5.97.1): + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.3.0 + webpack: 5.97.1 + + webpack-dev-server@4.15.2(webpack@5.97.1): + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.7 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.13 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.7.5 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.21.2 + graceful-fs: 4.2.11 + html-entities: 2.5.2 + http-proxy-middleware: 2.0.7(@types/express@4.17.21) + ipaddr.js: 2.2.0 + launch-editor: 2.9.1 + open: 8.4.2 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.3.0 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack-dev-middleware: 5.3.4(webpack@5.97.1) + ws: 8.18.0 + optionalDependencies: + webpack: 5.97.1 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + webpack-manifest-plugin@4.1.1(webpack@5.97.1): + dependencies: + tapable: 2.2.1 + webpack: 5.97.1 + webpack-sources: 2.3.1 + + webpack-sources@1.4.3: + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + + webpack-sources@2.3.1: + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + + webpack-sources@3.2.3: {} + + webpack@5.97.1: + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.11(webpack@5.97.1) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + + websocket-extensions@0.1.4: {} + + whatwg-encoding@1.0.5: + dependencies: + iconv-lite: 0.4.24 + + whatwg-fetch@3.6.20: {} + + whatwg-mimetype@2.3.0: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + whatwg-url@8.7.0: + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + which-boxed-primitive@1.1.0: dependencies: is-bigint: 1.1.0 @@ -4592,12 +12625,141 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 + which@1.3.1: + dependencies: + isexe: 2.0.0 + which@2.0.2: dependencies: isexe: 2.0.0 word-wrap@1.2.5: {} + workbox-background-sync@6.6.0: + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + + workbox-broadcast-update@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-build@6.6.0(@types/babel__core@7.20.5): + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) + '@babel/core': 7.26.0 + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/runtime': 7.26.0 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.26.0)(@types/babel__core@7.20.5)(rollup@2.79.2) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.17.1 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.2 + rollup-plugin-terser: 7.0.2(rollup@2.79.2) + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 6.6.0 + workbox-broadcast-update: 6.6.0 + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-google-analytics: 6.6.0 + workbox-navigation-preload: 6.6.0 + workbox-precaching: 6.6.0 + workbox-range-requests: 6.6.0 + workbox-recipes: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + workbox-streams: 6.6.0 + workbox-sw: 6.6.0 + workbox-window: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + + workbox-cacheable-response@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-core@6.6.0: {} + + workbox-expiration@6.6.0: + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + + workbox-google-analytics@6.6.0: + dependencies: + workbox-background-sync: 6.6.0 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + + workbox-navigation-preload@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-precaching@6.6.0: + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + + workbox-range-requests@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-recipes@6.6.0: + dependencies: + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-precaching: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + + workbox-routing@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-strategies@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-streams@6.6.0: + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + + workbox-sw@6.6.0: {} + + workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.97.1): + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + upath: 1.2.0 + webpack: 5.97.1 + webpack-sources: 1.4.3 + workbox-build: 6.6.0(@types/babel__core@7.20.5) + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + + workbox-window@6.6.0: + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 6.6.0 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -4610,12 +12772,41 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - ws@6.2.0: + wrappy@1.0.2: {} + + write-file-atomic@3.0.3: dependencies: - async-limiter: 1.0.1 + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + + ws@7.5.10: {} + + ws@8.18.0: {} + + xml-name-validator@3.0.0: {} + + xmlchars@2.2.0: {} + + y18n@5.0.8: {} yallist@3.1.1: {} + yaml@1.10.2: {} + yaml@2.6.1: {} + yargs-parser@20.2.9: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + yocto-queue@0.1.0: {} diff --git a/staff/angela-bernaldez/project/app/src/App.jsx b/staff/angela-bernaldez/project/app/src/App.jsx index 793b49259..755ae43a1 100644 --- a/staff/angela-bernaldez/project/app/src/App.jsx +++ b/staff/angela-bernaldez/project/app/src/App.jsx @@ -1,22 +1,20 @@ -import { Landing, LogIn, SignUp } from './pages' -import { Route, Routes } from 'react-router-dom' -import { ModalContext } from './context' - -// import.meta.env. when using env variables -// env variables need to start with VITE_ +import Public from './pages/Public.jsx' +import logic from './logic' +import { useEffect, useState } from 'react' +import { Route, Routes } from 'react-router' function App() { + const [tokenUpdated, setTokenUpdated] = useState(Date.now()) + + useEffect(() => { }, [tokenUpdated]) + return ( -
- }/> - }/> - }/> + add session component : setTokenUpdated(Date.now())} />} />
-
) } diff --git a/staff/angela-bernaldez/project/app/src/components/FormErrorsSection.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/FormErrorsSection.jsx similarity index 94% rename from staff/angela-bernaldez/project/app/src/components/FormErrorsSection.jsx rename to staff/angela-bernaldez/project/app/src/components/Forms/FormErrorsSection.jsx index af8c9c5aa..30491b5ae 100644 --- a/staff/angela-bernaldez/project/app/src/components/FormErrorsSection.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/FormErrorsSection.jsx @@ -1,5 +1,5 @@ import classNames from 'classnames' -import EN from '../locals/en.json' +import EN from '../../locals/en.json' function FormErrorsSection({ className, errors }) { diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx new file mode 100644 index 000000000..c9677b31e --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx @@ -0,0 +1,46 @@ +import { IconEmail, + IconHidePassword, + IconLogIn, + IconPassword, + IconShowPassword } from '../icons/icons.jsx' +// import { Errors } from 'common' +// import { FormErrorsSection } from '../index.jsx' +import { useNavigate } from 'react-router-dom' +import logic from '../../logic/index.js' + +// Replace ES locales with corresponding text. + +function LogInForm({ onUserLoggedIn }) { + + const navigate = useNavigate() + + const sendLogInForm = (event) => { + event.preventDefault() + + const { email, password } = event.target + + debugger + + try { + logic.authenticateUser(email.value, password.value) + .then(() => { + navigate('/'); + onUserLoggedIn() + }) + .catch((error) => alert(error.message)) + } catch (error) { + alert(error.message) + } + } + + return
+ + + + + +
+ +} + +export default LogInForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx new file mode 100644 index 000000000..de2a4319f --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx @@ -0,0 +1,38 @@ +import { useNavigate } from "react-router" +import logic from "../../logic" + +function SignUpForm() { + const navigate = useNavigate() + + const sendSignUpForm = (event) => { + event.preventDefault() + + const { username, email, password, repeatPassword } = event.target + + debugger + + try { + logic.registerUser(username.value, email.value, password.value, repeatPassword.value) + .then(() => { + navigate('/login') + }) + .catch((error) => alert(error.message)) + } catch (error) { + alert(error.message) + } + } + + return
+ + + + + + + + + +
+} + +export default SignUpForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/index.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/index.jsx similarity index 100% rename from staff/angela-bernaldez/project/app/src/components/index.jsx rename to staff/angela-bernaldez/project/app/src/components/Forms/index.jsx diff --git a/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx deleted file mode 100644 index 0a5d241f4..000000000 --- a/staff/angela-bernaldez/project/app/src/components/LogInForm.jsx +++ /dev/null @@ -1,146 +0,0 @@ -import { Link } from "react-router-dom" -import classNames from 'classnames' -import { memo, useState } from 'react' -import { IconEmail, - IconHidePassword, - IconLogIn, - IconPassword, - IconShowPassword } from './icons.jsx' -import { Errors } from 'common' -import { FormErrorsSection } from '.' - -// Replace ES locales with corresponding text. - -function LogInForm({ className, onSubmit }) { - const [errors, setErrors] = useState(null) - - const submit = (event) => { - event.preventDefault() - - const { email: inputEmail, password: inputPassword } = event.target - - // TODO: add validators for email and password - - try { - onSubmit({ - email: inputEmail.value, - password: inputPassword.value - }) - } catch(error) { - console.log(error) - } - } - - const showPassword = (buttonSelector, inputSelector) => { - document - .querySelectorAll(`[data-${buttonSelector}="true"]`)[0] - .classList.toggle("swap-active"); - const element = document.getElementById(inputSelector) - element.type = element.type === "text" ? "password" : "text" - } - return ( - <> -
-
-
- -
-

Welcome back

-
- Introduce tus datos de inicio de sesión - - -
- -
- -
-
- - Forgot your password? - - - Sign Up Form - -
- -
- - ) - -} - -export default memo(LogInForm) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx b/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx deleted file mode 100644 index 897411f67..000000000 --- a/staff/angela-bernaldez/project/app/src/components/SignUpForm.jsx +++ /dev/null @@ -1,198 +0,0 @@ -import { Link } from 'react-router-dom' -import { - IconEmail, - IconHidePassword, - IconPassword, - IconShowPassword, - IconSignUp, - IconUsername, -} from './icons' -import classNames from 'classnames' -import { useState } from 'react' -import EN from '../locals/en.json' -import { FormErrorsSection } from '.' - - -function SignUpForm({ className, onSubmit }) { - const [errors, setErrors] = useState(null); - - const submit = (event) => { - event.preventDefault() - - const { - name: inputUsername, - email: inputEmail, - password: inputPassword, - repeatPassword: inputRepeatPassword, - } = event.target - - /* - const newErrors = [] - - if (!(inputPassword.value === inputRepeatPassword.value)) { - newErrors.push( - new Errors.PasswordNotValidError("Password and repeatPassword do not match") - ); - newErrors[newErrors.length - 1].order = 4 - inputPassword.value = "" - inputRepeatPassword.value = "" - inputPassword.focus() - } - - if ( - inputPassword.value === inputRepeatPassword.value && - !Validator.password(inputPassword.value) - ) { - newErrors.push(new Errors.PasswordNotValidError("Password is not valid")) - newErrors[newErrors.length - 1].order = 4 - inputPassword.focus() - } - - if (!Validator.email(inputEmail.value)) { - newErrors.push(new Errors.EmailNotValidError("Email is not valid")) - newErrors[newErrors.length - 1].order = 3 - inputEmail.focus() - } - - if (!Validator.username(inputUsername.value)) { - newErrors.push(new Errors.UsernameNotValidError("Username is not valid")) - newErrors[newErrors.length - 1].order = 1 - inputUsername.focus(); - } - - setErrors(newErrors.length > 0 ? newErrors : null) - - if (newErrors.length === 0) { - try { - onSubmit({ - username: inputUsername.value, - dateOfBirth: date, - email: inputEmail.value, - password: inputPassword.value, - repeatPassword: inputRepeatPassword.value, - }).catch((err) => { - if (err instanceof Errors.BadRequestError) return setErrors([err]) - if (err instanceof Errors.ServerError) return setErrors([err]) - setErrors([new Errors.UnexpectedError()]) - }); - } catch (err) { - err.order = 1; - setErrors([err]) - } - } - */ - } - - - const showPassword = (buttonSelector, inputSelector) => { - document - .querySelectorAll(`[data-${buttonSelector}="true"]`)[0] - .classList.toggle("swap-active"); - const element = document.getElementById(inputSelector); - element.type = element.type === "text" ? "password" : "text"; - } - - return ( - <> -
-
-
- -
-

{EN.signupForm.title}

-
- {EN.signupForm.subtitle} - - -
- -
- - {EN.signupForm.inputPassword.helpText} - -
-
- -
- -
- -
-
- - {EN.signupForm.linkToLoginPage} - -
- -
- - ) -} - -export default SignUpForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons.jsx b/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx similarity index 100% rename from staff/angela-bernaldez/project/app/src/components/icons.jsx rename to staff/angela-bernaldez/project/app/src/components/icons/icons.jsx diff --git a/staff/angela-bernaldez/project/app/src/logic/authenticateUser.js b/staff/angela-bernaldez/project/app/src/logic/authenticateUser.js new file mode 100644 index 000000000..1b63652ae --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic/authenticateUser.js @@ -0,0 +1,31 @@ +import { Errors } from 'common' + +const authenticateUser = ( email, password ) => { + // TODO: add validators + + debugger + + return fetch(`${import.meta.env.VITE_API_URL}users/auth`, { + method: 'POST', + headers: { + 'Content-type': 'application/json' + }, + body: JSON.stringify({ email, password }) + }) + .then((res) => { + if (res.status === 200) return res.json() + .then(body => sessionStorage.setItem('token', body.token)) + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`); + }) + }) + .catch((err) => { + if (err instanceof TypeError) + throw new Errors.ServerError('Server in not connected') + throw new Errors.UnexpectedError() + }) +} + +export default authenticateUser diff --git a/staff/angela-bernaldez/project/app/src/logic/index.js b/staff/angela-bernaldez/project/app/src/logic/index.js index 3b61bcf4c..cc6809488 100644 --- a/staff/angela-bernaldez/project/app/src/logic/index.js +++ b/staff/angela-bernaldez/project/app/src/logic/index.js @@ -1,5 +1,11 @@ +import authenticateUser from './authenticateUser.js' +import isUserLoggedIn from './isUserLoggedIn.js' import registerUser from './registerUser.js' -export default { +const logic = { + authenticateUser, + isUserLoggedIn, registerUser -} \ No newline at end of file +} + +export default logic \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic/isUserLoggedIn.js b/staff/angela-bernaldez/project/app/src/logic/isUserLoggedIn.js new file mode 100644 index 000000000..41535e9de --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic/isUserLoggedIn.js @@ -0,0 +1,4 @@ +export default () => { + const token = sessionStorage.getItem("token") + return token ? true : false +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic/registerUser.js b/staff/angela-bernaldez/project/app/src/logic/registerUser.js index 7486b8f8b..e9bbb86c6 100644 --- a/staff/angela-bernaldez/project/app/src/logic/registerUser.js +++ b/staff/angela-bernaldez/project/app/src/logic/registerUser.js @@ -1,6 +1,6 @@ import { Errors } from 'common' -const registerUser = ({ username, email, password, repeatPassword}) => { +const registerUser = ( username, email, password, repeatPassword ) => { // TODO: add validators const user = { @@ -9,12 +9,16 @@ const registerUser = ({ username, email, password, repeatPassword}) => { password } - return fetch(`${process.env.VITE_API_URL}users`, { + return fetch(`${import.meta.env.VITE_API_URL}users`, { method: 'POST', headers: { 'Content-type': 'application/json' }, - body: JSON.stringify(user) + body: JSON.stringify({ + username, + email, + password + }) }) .then((res) => { if (res.status === 201) return @@ -29,4 +33,6 @@ const registerUser = ({ username, email, password, repeatPassword}) => { throw new Errors.ServerError('Server in not connected') throw error }) -} \ No newline at end of file +} + +export default registerUser \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx b/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx b/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx deleted file mode 100644 index 6d8a2aaf5..000000000 --- a/staff/angela-bernaldez/project/app/src/pages/LogIn.jsx +++ /dev/null @@ -1,39 +0,0 @@ -import { LogInForm } from '../components' -import ModalContext from '../context/ModalContext' -import { useNavigate } from 'react-router-dom' - -function LogIn() { - - const { useModalError } = ModalContext - const navigate = useNavigate() - const openModalError = useModalError() - - const onSubmit = ({ email, password }) => { - try { - console.log(email, password) - /* - return userAuth(email, password) - .then(() => { - updateFather() - navigate("/home") - }) - .catch((err) => { - openModalError(err) - }) - */ - } catch (error) { - throw error - } - } - - return ( -
- -
- ) -} - -export default LogIn \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/Public.jsx b/staff/angela-bernaldez/project/app/src/pages/Public.jsx new file mode 100644 index 000000000..1f35ad49d --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/Public.jsx @@ -0,0 +1,17 @@ +import { Outlet, Route, Routes } from 'react-router' +import { SignUp, LogIn } from './publicPages' + +function Public({ onUserLoggedIn }) { + return <> +
+ + } /> + } /> + } /> + +
+ + +} + +export default Public \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx b/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx deleted file mode 100644 index 0fbb0c23f..000000000 --- a/staff/angela-bernaldez/project/app/src/pages/SignUp.jsx +++ /dev/null @@ -1,39 +0,0 @@ -import { useMemo } from 'react' -import { SignUpForm } from '../components' -import ModalContext from '../context/ModalContext' -// import registerUser from '../logic/registerUser' -import { useNavigate } from 'react-router-dom' - -function SignUp() { - - const { useModalError } = ModalContext - const navigate = useNavigate() - const openModalError = useModalError() - - const onSubmit = (data) => { - try { - /* - return registerUser(data) - .then(() => { - navigate("/login") - }) - .catch((err) => { - openModalError(err) - }) - */ - } catch (error) { - throw error - } - } - - return ( -
- -
- ) -} - -export default SignUp \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/Landing.jsx b/staff/angela-bernaldez/project/app/src/pages/publicPages/Landing.jsx similarity index 100% rename from staff/angela-bernaldez/project/app/src/pages/Landing.jsx rename to staff/angela-bernaldez/project/app/src/pages/publicPages/Landing.jsx diff --git a/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx b/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx new file mode 100644 index 000000000..f4906f999 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx @@ -0,0 +1,12 @@ +import { Link } from "react-router" +import LogInForm from "../../components/Forms/LogInForm" + +function LogIn({ onUserLoggedIn }) { + return
+

Login

+ +

New here? Create an account

+
+} + +export default LogIn \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/publicPages/SignUp.jsx b/staff/angela-bernaldez/project/app/src/pages/publicPages/SignUp.jsx new file mode 100644 index 000000000..402cce9b2 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/publicPages/SignUp.jsx @@ -0,0 +1,13 @@ +import { Link } from "react-router" +import SignUpForm from "../../components/Forms/SignUpForm" + +function SignUp() { + return

Register

+ To Login + + {/*To Profile*/} +
+ +} + +export default SignUp \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/index.jsx b/staff/angela-bernaldez/project/app/src/pages/publicPages/index.jsx similarity index 100% rename from staff/angela-bernaldez/project/app/src/pages/index.jsx rename to staff/angela-bernaldez/project/app/src/pages/publicPages/index.jsx diff --git a/staff/angela-bernaldez/project/common/index.js b/staff/angela-bernaldez/project/common/index.js index a98a26cd0..73443cec7 100644 --- a/staff/angela-bernaldez/project/common/index.js +++ b/staff/angela-bernaldez/project/common/index.js @@ -1 +1,4 @@ -export * as Errors from './errors.js' \ No newline at end of file +export * as Errors from './errors.js' + +import _Validator from './validator.js' +export const Validator = _Validator diff --git a/staff/angela-bernaldez/project/common/validator.js b/staff/angela-bernaldez/project/common/validator.js new file mode 100644 index 000000000..a50fe0a41 --- /dev/null +++ b/staff/angela-bernaldez/project/common/validator.js @@ -0,0 +1,51 @@ +class Validator { + static email(value) { + + if (typeof value !== 'string') throw new TypeError('Email is not a string') + if (value.trim().length <= 0) throw new Errors.ContentError('Email is empty') + + const regExp = new RegExp( + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + ) + + if (!regExp.test(value)) throw new Errors.EmailNotValidError('Email format is not valid') + + return true + } + + static password(value) { + if (typeof value !== 'string') throw new TypeError('Password is not a string') + if (value.trim().length <= 0) throw new Errors.ContentError('Password is empty') + + /*const regExp = new RegExp( + /^(?=.*[A-Z])(?=.*[!@#$%^&*()_+{}[\]:;"'<>?,./~`-])(?=.{8,})/ + ); + return regExp.test(value);*/ + + return true + } + + static username(value) { + if (typeof value !== 'string') throw new TypeError('Username is not a string') + if (value.trim().length <= 0) throw new Errors.ContentError('Username is empty') + const regExp = new RegExp(/^[a-zA-Z0-9]{1,12}$/) + if (!regExp.test(value)) throw new Errors.UsernameNotValidError('Username format is not valid') + + return true + } + + static confirmationPassword(value1, value2) { + if (value1 !== value2) throw Errors.ConfirmationError('Passwords do not match') + + return true + } + + static id(value) { + if (typeof value !== 'string') throw new TypeError('Id is not a string') + if (value.trim().length <= 0) throw new Errors.ContentError('Id is empty') + + return true + } +} + +export default Validator \ No newline at end of file From 0844e3523099b5227cb9c70105adf8402058e139 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Sat, 21 Dec 2024 10:42:38 +0100 Subject: [PATCH 12/45] add minor changes to app and add user location logic #251 --- .../project/api/data/models.js | 2 +- .../project/api/logic/addUserLocation.js | 47 ++++++++++++++++++ .../project/api/logic/addUserLocation.spec.js | 49 +++++++++++++++++++ .../project/api/logic/getAllUserLocations.js | 14 ++++++ .../project/api/logic/index.js | 2 + .../app/src/components/Cards/CityCard.jsx | 0 .../app/src/components/Cards/CityOverview.jsx | 0 .../src/components/Cards/DailyForecast.jsx | 0 .../app/src/components/Forms/LogInForm.jsx | 2 +- .../project/app/src/logic/addUserLocation.js | 30 ++++++++++++ .../src/pages/authenticated/CityDetails.jsx | 0 .../src/pages/authenticated/CityOverview.jsx | 0 .../app/src/pages/authenticated/Dashboard.jsx | 18 +++++++ 13 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/logic/addUserLocation.js create mode 100644 staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js create mode 100644 staff/angela-bernaldez/project/api/logic/getAllUserLocations.js create mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/CityCard.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/CityOverview.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/DailyForecast.jsx create mode 100644 staff/angela-bernaldez/project/app/src/logic/addUserLocation.js create mode 100644 staff/angela-bernaldez/project/app/src/pages/authenticated/CityDetails.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/authenticated/CityOverview.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/authenticated/Dashboard.jsx diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js index 75d9b957a..7ff02cb39 100644 --- a/staff/angela-bernaldez/project/api/data/models.js +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -5,7 +5,7 @@ const { Schema, Types } = mongoose const { ObjectId } = Types const LocationSchema = new Schema({ - locationName: { + name: { type: String, required: true }, diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.js new file mode 100644 index 000000000..2f00da222 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.js @@ -0,0 +1,47 @@ +import models from '../data/models.js' + +const { User, Location } = models + +const generateLocationId = async (location, locationData) => { + if (location) return location + + // si la localizacion no existia antes, timeLastUpdated es la fecha de ahora mismo + // variables añadir las variables que tenga elegidas por defecto + + const newLocation = await Location.create({ + name: locationData.name, + latitude: locationData.latitude, + longitude: locationData.longitude, + altitude: locationData.altitude, + timeLastUpdated: new Date(), + // variables: call logic to add variables info + }) + + return newLocation +} + +export default (id, locationData) => { + // add validators + + const { name, latitude, longitude, altitude } = locationData + + return User.findById(id) + .then((user) => { + if (!user) throw new Errors.AuthError('User id does not belong to anyone') + return Location.findOne({name: name, latitude: latitude, longitude: longitude}) + .then((location) => { + return generateLocationId(location, locationData) + .then((newLocation) => { + const foundLocation = user.favLocations.find((location) => location._id === newLocation._id) + + if (!foundLocation) { + user.favLocations.push(newLocation._id) + return user.save() + } + }) + .catch((error) => { + console.log(error) + }) + }) + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js new file mode 100644 index 000000000..651d172a4 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js @@ -0,0 +1,49 @@ +import 'dotenv/config' +import addUserLocation from './addUserLocation.js' +import { describe, it } from 'mocha' +import models from '../data/models.js' +import mongoose from 'mongoose' +import bcrypt from 'bcrypt' +import { expect } from 'chai' + +const { User, Location } = models + +describe('addUserLocation', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + afterEach(() => Location.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + it('add location when there are no fav locations', () => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'angelines', + email: 'angela-test@mail.com', + password: cryptPassword + } + return User.create(user) + .then((user) => { + const id = user._id.toString() + const locationData = { name: 'Brighton', latitude: 51, longitude: -0.5, altitude: 40 } + return addUserLocation(id, locationData) + .then((userModified) => { + return Location.findOne({ name: 'Brighton', latitude: 51, longitude: -0.5}) + .then((location) => { + expect(userModified.favLocations[userModified.favLocations.length - 1]).to.deep.equal(location._id) + expect(location.name).to.equal('Brighton') + expect(location.latitude).to.equal(51) + expect(location.longitude).to.equal(-0.5) + expect(location.altitude).to.equal(40) + }) + }) + }) + }) + }) + // it for add location when other locations already exist + + // it for add location when location already exists but not for user + + // it for add location when location already exists for that user +}) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js new file mode 100644 index 000000000..ce3d051f4 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js @@ -0,0 +1,14 @@ +import models from '../data/models.js' + +const { User } = models + +export default (id) => { + + // add validator id + const token = sessionStorage.getItem("token") + + return User.findById(id) + .then((user) => { + console.log(user) + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/index.js b/staff/angela-bernaldez/project/api/logic/index.js index 8d8b07f2f..5468dc969 100644 --- a/staff/angela-bernaldez/project/api/logic/index.js +++ b/staff/angela-bernaldez/project/api/logic/index.js @@ -1,8 +1,10 @@ +import addUserLocation from './addUserLocation.js' import authenticateUser from './authenticateUser.js' import deleteUser from './deleteUser.js' import registerUser from './registerUser.js' export default { + addUserLocation, authenticateUser, deleteUser, registerUser diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CityCard.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/CityCard.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CityOverview.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/CityOverview.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/DailyForecast.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/DailyForecast.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx index c9677b31e..2d81f4e8b 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx @@ -24,7 +24,7 @@ function LogInForm({ onUserLoggedIn }) { try { logic.authenticateUser(email.value, password.value) .then(() => { - navigate('/'); + navigate('/') onUserLoggedIn() }) .catch((error) => alert(error.message)) diff --git a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js new file mode 100644 index 000000000..a4556e037 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js @@ -0,0 +1,30 @@ +import { Errors } from 'common' + +export default (location_name) => { + // include validators + + const token = sessionStorage.getItem("token") + + // aqui hago llamada a la api + return fetch(`${import.meta.env.VITE_API_URL}user/${locationId}`, { + method: 'POST', + headers: { + 'Content-type': 'application/json', + Authorization: `Bearer ${token}` + }, + body: JSON.stringify({ location_name: location_name }) + }) + .then((res) => { + if (res.status === 201) return; + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) + }) + .catch((error) => { + if (error instanceof Errors.BadRequestError) + throw new Errors.ServerError("Server in not connected"); + throw error + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticated/CityDetails.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticated/CityDetails.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticated/CityOverview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticated/CityOverview.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticated/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticated/Dashboard.jsx new file mode 100644 index 000000000..9f465f641 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/authenticated/Dashboard.jsx @@ -0,0 +1,18 @@ +import { Link } from "react-router" +import LogInForm from "../../components/Forms/LogInForm" + +function Dashboard({ onUserLoggedIn }) { + return
+

hello user

+
+} + +export default Dashboard + + +// fetch get all usr cities -> traerme todas las ciudades +// mapearlas + + +// componente -> cada ciudad tarjetita +// y eso lo meto dentro del map con un return \ No newline at end of file From 12ba572d59e927e90968853beb900918da02404e Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Sat, 21 Dec 2024 13:29:15 +0100 Subject: [PATCH 13/45] add another add user location test + minor things on app #251 --- .../project/api/logic/addUserLocation.spec.js | 60 ++++++++++++++----- .../app/src/components/Forms/LogInForm.jsx | 6 +- .../app/src/components/Forms/SignUpForm.jsx | 2 - .../project/app/src/logic/authenticateUser.js | 2 - .../project/app/src/pages/Public.jsx | 4 +- 5 files changed, 50 insertions(+), 24 deletions(-) diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js index 651d172a4..015f6f0cc 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js @@ -15,35 +15,67 @@ describe('addUserLocation', () => { afterEach(() => Location.deleteMany()) after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) - it('add location when there are no fav locations', () => { + it('add location when location does not exist and user does not have any fav locations', () => { return bcrypt.hash('123456789', 1) .then((cryptPassword) => { const user = { - username: 'angelines', - email: 'angela-test@mail.com', + username: 'nametest', + email: 'test@mail.com', password: cryptPassword } return User.create(user) .then((user) => { - const id = user._id.toString() + const userId = user._id.toString() const locationData = { name: 'Brighton', latitude: 51, longitude: -0.5, altitude: 40 } - return addUserLocation(id, locationData) + return addUserLocation(userId, locationData) .then((userModified) => { return Location.findOne({ name: 'Brighton', latitude: 51, longitude: -0.5}) - .then((location) => { - expect(userModified.favLocations[userModified.favLocations.length - 1]).to.deep.equal(location._id) - expect(location.name).to.equal('Brighton') - expect(location.latitude).to.equal(51) - expect(location.longitude).to.equal(-0.5) - expect(location.altitude).to.equal(40) + .then((newLocation) => { + expect(userModified.favLocations[userModified.favLocations.length - 1]).to.deep.equal(newLocation._id) + expect(newLocation.name).to.equal('Brighton') + expect(newLocation.latitude).to.equal(51) + expect(newLocation.longitude).to.equal(-0.5) + expect(newLocation.altitude).to.equal(40) }) }) - }) + }) }) }) - // it for add location when other locations already exist - // it for add location when location already exists but not for user + it('add location when location already exists but not for that user', () => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'nametest', + email: 'test@mail.com', + password: cryptPassword + } + return User.create(user) + .then((user) => { + const userId = user._id.toString() + const locationData = { + name: 'Brighton', + latitude: 51, + longitude: -0.5, + altitude: 40, + timeLastUpdated: new Date() + } + return Location.create(locationData) + .then((newLocation) => { + return addUserLocation(userId, locationData) + .then((userModified) => { + expect(userModified.favLocations[userModified.favLocations.length - 1]).to.deep.equal(newLocation._id) + expect(newLocation.name).to.equal('Brighton') + expect(newLocation.latitude).to.equal(51) + expect(newLocation.longitude).to.equal(-0.5) + expect(newLocation.altitude).to.equal(40) + }) + }) + }) + }) + }) + // it for add location when other locations already exist // it for add location when location already exists for that user + }) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx index 2d81f4e8b..19aa7832c 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx @@ -18,13 +18,11 @@ function LogInForm({ onUserLoggedIn }) { event.preventDefault() const { email, password } = event.target - - debugger - + try { logic.authenticateUser(email.value, password.value) .then(() => { - navigate('/') + navigate('/home') onUserLoggedIn() }) .catch((error) => alert(error.message)) diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx index de2a4319f..827a22600 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx @@ -9,8 +9,6 @@ function SignUpForm() { const { username, email, password, repeatPassword } = event.target - debugger - try { logic.registerUser(username.value, email.value, password.value, repeatPassword.value) .then(() => { diff --git a/staff/angela-bernaldez/project/app/src/logic/authenticateUser.js b/staff/angela-bernaldez/project/app/src/logic/authenticateUser.js index 1b63652ae..af8cc30e9 100644 --- a/staff/angela-bernaldez/project/app/src/logic/authenticateUser.js +++ b/staff/angela-bernaldez/project/app/src/logic/authenticateUser.js @@ -3,8 +3,6 @@ import { Errors } from 'common' const authenticateUser = ( email, password ) => { // TODO: add validators - debugger - return fetch(`${import.meta.env.VITE_API_URL}users/auth`, { method: 'POST', headers: { diff --git a/staff/angela-bernaldez/project/app/src/pages/Public.jsx b/staff/angela-bernaldez/project/app/src/pages/Public.jsx index 1f35ad49d..6d9dc8695 100644 --- a/staff/angela-bernaldez/project/app/src/pages/Public.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/Public.jsx @@ -1,11 +1,11 @@ import { Outlet, Route, Routes } from 'react-router' -import { SignUp, LogIn } from './publicPages' +import { SignUp, Landing, LogIn } from './publicPages' function Public({ onUserLoggedIn }) { return <>
- } /> + } /> } /> } /> From 5ab5c4607e907dcaa4fbfd8e92f7a00f97977745 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Mon, 23 Dec 2024 12:17:44 +0100 Subject: [PATCH 14/45] get all user locations logic #251 --- .../project/api/handlers/authenticateUser.js | 2 +- .../project/api/logic/addUserLocation.spec.js | 14 +++---- .../api/logic/authenticateUser.spec.js | 4 +- .../project/api/logic/getAllUserLocations.js | 3 +- .../api/logic/getAllUserLocations.spec.js | 39 +++++++++++++++++++ .../project/api/logic/index.js | 2 + .../project/app/src/logic/registerUser.js | 6 +-- 7 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js diff --git a/staff/angela-bernaldez/project/api/handlers/authenticateUser.js b/staff/angela-bernaldez/project/api/handlers/authenticateUser.js index dc05219ea..daf56df40 100644 --- a/staff/angela-bernaldez/project/api/handlers/authenticateUser.js +++ b/staff/angela-bernaldez/project/api/handlers/authenticateUser.js @@ -15,6 +15,6 @@ export default (req, res, next) => { res.status(200).json({ token: token })}) .catch((error) => next(error)) } catch (error) { - next(error); + next(error) } } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js index 015f6f0cc..c120f6f8c 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js @@ -30,13 +30,13 @@ describe('addUserLocation', () => { return addUserLocation(userId, locationData) .then((userModified) => { return Location.findOne({ name: 'Brighton', latitude: 51, longitude: -0.5}) - .then((newLocation) => { - expect(userModified.favLocations[userModified.favLocations.length - 1]).to.deep.equal(newLocation._id) - expect(newLocation.name).to.equal('Brighton') - expect(newLocation.latitude).to.equal(51) - expect(newLocation.longitude).to.equal(-0.5) - expect(newLocation.altitude).to.equal(40) - }) + .then((newLocation) => { + expect(userModified.favLocations[userModified.favLocations.length - 1]).to.deep.equal(newLocation._id) + expect(newLocation.name).to.equal('Brighton') + expect(newLocation.latitude).to.equal(51) + expect(newLocation.longitude).to.equal(-0.5) + expect(newLocation.altitude).to.equal(40) + }) }) }) }) diff --git a/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js b/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js index d0bd45b28..82b1fa1f9 100644 --- a/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js +++ b/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js @@ -10,8 +10,8 @@ const { User } = models describe('authenticateUser', () => { - before(() => mongoose.connect(process.env.MONGO_URI_TEST)); - afterEach(() => User.deleteMany()); + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) it('returns id if user exists and password is correct', () => { diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js index ce3d051f4..7f7e47c97 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js @@ -5,10 +5,9 @@ const { User } = models export default (id) => { // add validator id - const token = sessionStorage.getItem("token") return User.findById(id) .then((user) => { - console.log(user) + return user.favLocations }) } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js new file mode 100644 index 000000000..1e8792126 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js @@ -0,0 +1,39 @@ +import 'dotenv/config' +import getAllUserLocations from './getAllUserLocations.js' +import { describe, it } from 'mocha' +import models from '../data/models.js' +import mongoose from 'mongoose' +import bcrypt from 'bcrypt' +import { expect } from 'chai' + +const { User } = models + +describe('getAllUserLocations', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + + it('returns all user locations when at least one exists', () => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'nametest', + email: 'test@mail.com', + password: cryptPassword, + favLocations: [ + new mongoose.Types.ObjectId(), + new mongoose.Types.ObjectId()] + } + return User.create(user) + .then((user) => { + const userId = user._id.toString() + return getAllUserLocations(userId) + .then((favLocations) => { + expect(favLocations).to.have.lengthOf(2) + }) + }) + }) + }) +}) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/index.js b/staff/angela-bernaldez/project/api/logic/index.js index 5468dc969..5fd7f5ca0 100644 --- a/staff/angela-bernaldez/project/api/logic/index.js +++ b/staff/angela-bernaldez/project/api/logic/index.js @@ -1,12 +1,14 @@ import addUserLocation from './addUserLocation.js' import authenticateUser from './authenticateUser.js' import deleteUser from './deleteUser.js' +import getAllUserLocations from './getAllUserLocations.js' import registerUser from './registerUser.js' export default { addUserLocation, authenticateUser, deleteUser, + getAllUserLocations, registerUser } diff --git a/staff/angela-bernaldez/project/app/src/logic/registerUser.js b/staff/angela-bernaldez/project/app/src/logic/registerUser.js index e9bbb86c6..0a109b2dc 100644 --- a/staff/angela-bernaldez/project/app/src/logic/registerUser.js +++ b/staff/angela-bernaldez/project/app/src/logic/registerUser.js @@ -14,11 +14,7 @@ const registerUser = ( username, email, password, repeatPassword ) => { headers: { 'Content-type': 'application/json' }, - body: JSON.stringify({ - username, - email, - password - }) + body: JSON.stringify(user) }) .then((res) => { if (res.status === 201) return From acb1669befa5d631bf1362f233385db15810e8db Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Thu, 26 Dec 2024 10:43:01 +0100 Subject: [PATCH 15/45] add user location and get all locations handlers #251 --- .../project/api/handlers/addUserLocation.js | 13 +++++++++++++ .../project/api/handlers/authenticateUser.js | 1 - .../project/api/handlers/deleteUser.js | 1 - .../project/api/handlers/getAllUserLocations.js | 16 ++++++++++++++++ .../project/api/handlers/index.js | 4 ++++ staff/angela-bernaldez/project/api/index.js | 5 +++++ .../project/api/tests/add-user-location.sh | 3 +++ 7 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers/addUserLocation.js create mode 100644 staff/angela-bernaldez/project/api/handlers/getAllUserLocations.js create mode 100644 staff/angela-bernaldez/project/api/tests/add-user-location.sh diff --git a/staff/angela-bernaldez/project/api/handlers/addUserLocation.js b/staff/angela-bernaldez/project/api/handlers/addUserLocation.js new file mode 100644 index 000000000..bacfeddc2 --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers/addUserLocation.js @@ -0,0 +1,13 @@ +import logic from '../logic/index.js' + +export default (req, res, next) => { + const userId = req.id + const locationData = req.body + + try { + logic.addUserLocation(userId, locationData) + .then(() => res.status(201).send()) + } catch(error) { + next(error) + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/authenticateUser.js b/staff/angela-bernaldez/project/api/handlers/authenticateUser.js index daf56df40..9be7ccdf9 100644 --- a/staff/angela-bernaldez/project/api/handlers/authenticateUser.js +++ b/staff/angela-bernaldez/project/api/handlers/authenticateUser.js @@ -1,7 +1,6 @@ import logic from '../logic/index.js' import jwt from 'jsonwebtoken' - export default (req, res, next) => { const { email, password } = req.body diff --git a/staff/angela-bernaldez/project/api/handlers/deleteUser.js b/staff/angela-bernaldez/project/api/handlers/deleteUser.js index f0e59bdae..244b7e136 100644 --- a/staff/angela-bernaldez/project/api/handlers/deleteUser.js +++ b/staff/angela-bernaldez/project/api/handlers/deleteUser.js @@ -1,5 +1,4 @@ import logic from '../logic/index.js' -import jwt from 'jsonwebtoken' export default(req, res, next) => { diff --git a/staff/angela-bernaldez/project/api/handlers/getAllUserLocations.js b/staff/angela-bernaldez/project/api/handlers/getAllUserLocations.js new file mode 100644 index 000000000..68c27393d --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers/getAllUserLocations.js @@ -0,0 +1,16 @@ +import logic from '../logic/index.js' + +export default (req, res, next) => { + const userId = req.id + + try { + logic.getAllUserLocations(userId) + .then(favLocations => { + // esta es la info que paso a donde hago la llamada del get? + res.status(200).json({ locations: favLocations }) + }) + .catch(error => next(error)) + } catch(error) { + next(error) + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/index.js b/staff/angela-bernaldez/project/api/handlers/index.js index 79da0cc18..2237be76b 100644 --- a/staff/angela-bernaldez/project/api/handlers/index.js +++ b/staff/angela-bernaldez/project/api/handlers/index.js @@ -1,9 +1,13 @@ +import addUserLocation from './addUserLocation.js' import authenticateUser from './authenticateUser.js' import deleteUser from './deleteUser.js' +import getAllUserLocations from './getAllUserLocations.js' import registerUser from './registerUser.js' export default { + addUserLocation, authenticateUser, deleteUser, + getAllUserLocations, registerUser } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index e56629067..9eac5f4cb 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -18,6 +18,11 @@ mongoose.connect(process.env.MONGO_URI) server.post('/users/auth', jsonBodyParser, handlers.authenticateUser) + // review paths here + server.get('/users/:userId/locations', verifyToken, handlers.getAllUserLocations) + + server.post('/locations/:userId/', verifyToken, jsonBodyParser, handlers.addUserLocation) + server.delete('/users', verifyToken, jsonBodyParser, handlers.deleteUser) server.use(errorHandler) diff --git a/staff/angela-bernaldez/project/api/tests/add-user-location.sh b/staff/angela-bernaldez/project/api/tests/add-user-location.sh new file mode 100644 index 000000000..bfcb604df --- /dev/null +++ b/staff/angela-bernaldez/project/api/tests/add-user-location.sh @@ -0,0 +1,3 @@ +curl -X POST http://localhost:4321/users/auth \ + -H "Content-Type: application/json" \ + -d '{"email":"maria@gmail.com", "password": "123456789"}' -v \ No newline at end of file From 101ae2d11779d44b6a91da67e917e2013190008a Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Thu, 26 Dec 2024 13:54:10 +0100 Subject: [PATCH 16/45] resolve add user locations and get user info #251 --- .../project/api/handlers/getUser.js | 15 +++++++++++++++ .../project/api/handlers/index.js | 2 ++ .../project/api/handlers/registerUser.js | 2 -- staff/angela-bernaldez/project/api/index.js | 2 ++ .../project/api/logic-weather/test.js | 0 .../project/api/logic/deleteUser.js | 2 +- .../project/api/logic/getAllUserLocations.js | 1 + .../angela-bernaldez/project/api/logic/getUser.js | 15 +++++++++++++++ .../project/api/logic/getUser.spec.js | 0 staff/angela-bernaldez/project/api/logic/index.js | 2 ++ .../project/api/tests/add-user-location.sh | 10 ++++++++-- .../project/api/tests/authenticate-user.sh | 2 +- .../project/api/tests/delete-user.sh | 2 +- .../project/api/tests/get-user.sh | 2 ++ .../project/api/tests/register-user.sh | 2 +- 15 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers/getUser.js create mode 100644 staff/angela-bernaldez/project/api/logic-weather/test.js create mode 100644 staff/angela-bernaldez/project/api/logic/getUser.js create mode 100644 staff/angela-bernaldez/project/api/logic/getUser.spec.js create mode 100644 staff/angela-bernaldez/project/api/tests/get-user.sh diff --git a/staff/angela-bernaldez/project/api/handlers/getUser.js b/staff/angela-bernaldez/project/api/handlers/getUser.js new file mode 100644 index 000000000..a022c5d8f --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers/getUser.js @@ -0,0 +1,15 @@ +import logic from '../logic/index.js' + +export default (req, res, next) => { + const userId = req.id + + try { + logic.getUser(userId) + .then((user) => { + res.status(200).json({ user: user }) + }) + .catch(error => next(error)) + } catch(error) { + next(error) + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/index.js b/staff/angela-bernaldez/project/api/handlers/index.js index 2237be76b..1fb34d9c7 100644 --- a/staff/angela-bernaldez/project/api/handlers/index.js +++ b/staff/angela-bernaldez/project/api/handlers/index.js @@ -2,6 +2,7 @@ import addUserLocation from './addUserLocation.js' import authenticateUser from './authenticateUser.js' import deleteUser from './deleteUser.js' import getAllUserLocations from './getAllUserLocations.js' +import getUser from './getUser.js' import registerUser from './registerUser.js' export default { @@ -9,5 +10,6 @@ export default { authenticateUser, deleteUser, getAllUserLocations, + getUser, registerUser } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/registerUser.js b/staff/angela-bernaldez/project/api/handlers/registerUser.js index 0c8bdb251..ff086053a 100644 --- a/staff/angela-bernaldez/project/api/handlers/registerUser.js +++ b/staff/angela-bernaldez/project/api/handlers/registerUser.js @@ -3,8 +3,6 @@ import logic from '../logic/index.js' export default(req, res, next) => { const { username, email, password } = req.body - console.log(username, email, password) - try { logic.registerUser(username, email, password) .then(() => res.status(201).send()) diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index 9eac5f4cb..b711ad4d5 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -18,6 +18,8 @@ mongoose.connect(process.env.MONGO_URI) server.post('/users/auth', jsonBodyParser, handlers.authenticateUser) + server.get('/users/auth', verifyToken, handlers.getUser) + // review paths here server.get('/users/:userId/locations', verifyToken, handlers.getAllUserLocations) diff --git a/staff/angela-bernaldez/project/api/logic-weather/test.js b/staff/angela-bernaldez/project/api/logic-weather/test.js new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/api/logic/deleteUser.js b/staff/angela-bernaldez/project/api/logic/deleteUser.js index 68d0c85d2..71a8ed1a3 100644 --- a/staff/angela-bernaldez/project/api/logic/deleteUser.js +++ b/staff/angela-bernaldez/project/api/logic/deleteUser.js @@ -10,7 +10,7 @@ export default (id, password) => { return User.findById(id) .then(user => { - if (!user) throw new Errors.AuthError("User id don't belong to anyone") + if (!user) throw new Errors.AuthError('User id does not belong to anyone') return bcrypt.compare(password, user.password) .then(isPasswordValid => { if (!isPasswordValid) throw new Errors.CredentialsError("Wrong credentials") diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js index 7f7e47c97..51fdcbb52 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js @@ -8,6 +8,7 @@ export default (id) => { return User.findById(id) .then((user) => { + if (!user) throw new Errors.AuthError('User id does not belong to anyone') return user.favLocations }) } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/getUser.js b/staff/angela-bernaldez/project/api/logic/getUser.js new file mode 100644 index 000000000..f3c513f14 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/getUser.js @@ -0,0 +1,15 @@ +import models from '../data/models.js' + +const { User } = models + +export default (id) => { + // validate id + + return User.findById(id) + .then((user) => { + if (!user) throw new Errors.AuthError('User id does not belong to anyone') + user.id = user._id.toString() + delete user._id + return user + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/getUser.spec.js b/staff/angela-bernaldez/project/api/logic/getUser.spec.js new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/api/logic/index.js b/staff/angela-bernaldez/project/api/logic/index.js index 5fd7f5ca0..b78b691e5 100644 --- a/staff/angela-bernaldez/project/api/logic/index.js +++ b/staff/angela-bernaldez/project/api/logic/index.js @@ -2,6 +2,7 @@ import addUserLocation from './addUserLocation.js' import authenticateUser from './authenticateUser.js' import deleteUser from './deleteUser.js' import getAllUserLocations from './getAllUserLocations.js' +import getUser from './getUser.js' import registerUser from './registerUser.js' export default { @@ -9,6 +10,7 @@ export default { authenticateUser, deleteUser, getAllUserLocations, + getUser, registerUser } diff --git a/staff/angela-bernaldez/project/api/tests/add-user-location.sh b/staff/angela-bernaldez/project/api/tests/add-user-location.sh index bfcb604df..4f7267897 100644 --- a/staff/angela-bernaldez/project/api/tests/add-user-location.sh +++ b/staff/angela-bernaldez/project/api/tests/add-user-location.sh @@ -1,3 +1,9 @@ -curl -X POST http://localhost:4321/users/auth \ +curl -X POST http://localhost:4321/locations/676d2fc251e575dc812fb568/ \ -H "Content-Type: application/json" \ - -d '{"email":"maria@gmail.com", "password": "123456789"}' -v \ No newline at end of file + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NmQyZmMyNTFlNTc1ZGM4MTJmYjU2OCIsImlhdCI6MTczNTIwODkxNH0.BNkoQBtVM5dFwGM-gzTwo0wTbIYy61yDDbPEFH_ienM" \ + -d '{"name":"Brighton", "latitude": "50.49", "longitude": "0.08", "altitude": "64"}' -v + + +# necesito encontrar el user id para hacer el post +# con el authenticate user lo que tengo es el token +# creo una logica adicional que me devuelva user info y ahi tenga el id de forma que pueda usarlo \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/authenticate-user.sh b/staff/angela-bernaldez/project/api/tests/authenticate-user.sh index bfcb604df..f26f7650b 100644 --- a/staff/angela-bernaldez/project/api/tests/authenticate-user.sh +++ b/staff/angela-bernaldez/project/api/tests/authenticate-user.sh @@ -1,3 +1,3 @@ curl -X POST http://localhost:4321/users/auth \ -H "Content-Type: application/json" \ - -d '{"email":"maria@gmail.com", "password": "123456789"}' -v \ No newline at end of file + -d '{"email":"angelabernaldez@gmail.com", "password": "123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/delete-user.sh b/staff/angela-bernaldez/project/api/tests/delete-user.sh index 226a0a75e..fd10bf70f 100644 --- a/staff/angela-bernaldez/project/api/tests/delete-user.sh +++ b/staff/angela-bernaldez/project/api/tests/delete-user.sh @@ -1,4 +1,4 @@ curl -X DELETE http://localhost:4321/users \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NWIzOTZlNTQxMDBhNGMwMGFjODU5NSIsImlhdCI6MTczNDExOTMwMn0.h9HUcTFf6bAH2XRMvkSwAlxeWRfjVA3pP2tsNB0sJRo" \ + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NmQyNjRkMDlkNWZkODQ5M2Y5OTY2MyIsImlhdCI6MTczNTIwNjUwMH0.XqEMqmcLJFqdfia8pswk66iNAzq2noYxQvBtSLiX0aQ" \ -d '{"password":"123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/get-user.sh b/staff/angela-bernaldez/project/api/tests/get-user.sh new file mode 100644 index 000000000..3407ab9e2 --- /dev/null +++ b/staff/angela-bernaldez/project/api/tests/get-user.sh @@ -0,0 +1,2 @@ +curl -X GET http://localhost:4321/users/auth \ + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NmQyZmMyNTFlNTc1ZGM4MTJmYjU2OCIsImlhdCI6MTczNTIwODkxNH0.BNkoQBtVM5dFwGM-gzTwo0wTbIYy61yDDbPEFH_ienM" -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/register-user.sh b/staff/angela-bernaldez/project/api/tests/register-user.sh index 91f88a97e..624fe2b60 100644 --- a/staff/angela-bernaldez/project/api/tests/register-user.sh +++ b/staff/angela-bernaldez/project/api/tests/register-user.sh @@ -1,3 +1,3 @@ curl -X POST http://localhost:4321/users \ -H "Content-Type: application/json" \ - -d '{"username":"maria", "email":"mariabb@gmail.com","password":"123456789"}' -v \ No newline at end of file + -d '{"username":"angela", "email":"angelabernaldez@gmail.com","password":"123456789"}' -v \ No newline at end of file From d6990d7d9b8ade8771be5ad9769a633e2103f3f4 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Fri, 27 Dec 2024 00:11:28 +0100 Subject: [PATCH 17/45] add retrieve locations nominatim api first steps and minor changes #251 --- .../retrieveNominatimLocations.js | 20 +++++++++++++++ .../project/api/logic-weather/test.js | 0 .../project/api/logic/addUserLocation.js | 1 + .../project/api/logic/getAllUserLocations.js | 1 + .../project/api/logic/getUser.js | 1 + .../project/services/package.json | 1 + .../project/services/pnpm-lock.yaml | 25 +++++++++++++++++++ 7 files changed, 49 insertions(+) create mode 100644 staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js delete mode 100644 staff/angela-bernaldez/project/api/logic-weather/test.js diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js new file mode 100644 index 000000000..eff89bd29 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js @@ -0,0 +1,20 @@ +// among information returned, lat and lon coordinates are present +// they will be used to retrieve data using Weather API (open meteo) + +export default (locationString) => { + // validate locationString? + // user types something in the front and goes to the back. make sure to catch a string + + // limit is used to return only a specific number of results + const nominatim_url = `https://nominatim.openstreetmap.org/search?q=${locationString}&limit=5&format=json` + + fetch(nominatim_url) + .then((response) => { + if (!response) throw new Error('Unable to stablish connection with Nominatim API') + return response.json() + .then((locationsFound) => { + return locationsFound + }) + .catch((error) => { throw new Errors.UnexpectedError(error.message) }) + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/test.js b/staff/angela-bernaldez/project/api/logic-weather/test.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.js index 2f00da222..e1869279f 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.js @@ -40,6 +40,7 @@ export default (id, locationData) => { } }) .catch((error) => { + // change this to a specific type of error console.log(error) }) }) diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js index 51fdcbb52..7efd58fb3 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js @@ -11,4 +11,5 @@ export default (id) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') return user.favLocations }) + // add catch } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/getUser.js b/staff/angela-bernaldez/project/api/logic/getUser.js index f3c513f14..07096091d 100644 --- a/staff/angela-bernaldez/project/api/logic/getUser.js +++ b/staff/angela-bernaldez/project/api/logic/getUser.js @@ -12,4 +12,5 @@ export default (id) => { delete user._id return user }) + // add catch } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/services/package.json b/staff/angela-bernaldez/project/services/package.json index cba7688bb..dfa7925be 100644 --- a/staff/angela-bernaldez/project/services/package.json +++ b/staff/angela-bernaldez/project/services/package.json @@ -12,6 +12,7 @@ "license": "ISC", "dependencies": { "axios": "^1.7.9", + "openmeteo": "^1.1.4", "recharts": "^2.14.1" } } diff --git a/staff/angela-bernaldez/project/services/pnpm-lock.yaml b/staff/angela-bernaldez/project/services/pnpm-lock.yaml index 63dabb0ce..4e2026315 100644 --- a/staff/angela-bernaldez/project/services/pnpm-lock.yaml +++ b/staff/angela-bernaldez/project/services/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: axios: specifier: ^1.7.9 version: 1.7.9 + openmeteo: + specifier: ^1.1.4 + version: 1.1.4 recharts: specifier: ^2.14.1 version: 2.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -21,6 +24,10 @@ packages: resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} + '@openmeteo/sdk@1.18.0': + resolution: {integrity: sha512-rcx3dY4kC3KHndHi4gETJi3QpETf/GriaktoG47YVEMbZ0lXm8G9Ki8qWasXWogSP15F6REET4Z+E/aPw86Crw==} + engines: {node: '>=12.0'} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -126,6 +133,9 @@ packages: resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} engines: {node: '>=6.0.0'} + flatbuffers@24.12.23: + resolution: {integrity: sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA==} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -165,6 +175,10 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + openmeteo@1.1.4: + resolution: {integrity: sha512-TalTDl0M7JJoeRTf+rWiFZ9SLvoxm7KkFLOQqcSjCiYs+bVMhax1qtryJqeZ1RF4W4Xfsgcl9x+VC1z39ULCxA==} + engines: {node: '>=12.0'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -226,6 +240,10 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@openmeteo/sdk@1.18.0': + dependencies: + flatbuffers: 24.12.23 + '@types/d3-array@3.2.1': {} '@types/d3-color@3.1.3': {} @@ -319,6 +337,8 @@ snapshots: fast-equals@5.0.1: {} + flatbuffers@24.12.23: {} + follow-redirects@1.15.9: {} form-data@4.0.1: @@ -345,6 +365,11 @@ snapshots: object-assign@4.1.1: {} + openmeteo@1.1.4: + dependencies: + '@openmeteo/sdk': 1.18.0 + flatbuffers: 24.12.23 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 From 7b76ea1760174bfe7dd5adf432a1b4626231c237 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Wed, 1 Jan 2025 20:23:08 +0100 Subject: [PATCH 18/45] add minor changes to login and signup form #251 --- staff/angela-bernaldez/project/api/index.js | 2 + .../project/api/tests/register-user.sh | 2 +- .../angela-bernaldez/project/app/src/App.jsx | 3 +- .../components/Forms/FormErrorsSection.jsx | 1 + .../app/src/components/Forms/LogInForm.jsx | 75 ++++++++++++--- .../app/src/components/Forms/SignUpForm.jsx | 92 ++++++++++++++++--- .../app/src/components/icons/icons.jsx | 2 +- .../getAllUserLocations.js} | 0 .../project/app/src/pages/Authenticated.jsx | 15 +++ .../src/pages/authenticated/CityOverview.jsx | 0 .../app/src/pages/authenticated/Dashboard.jsx | 18 ---- .../src/pages/authenticatedPages/Overview.jsx | 6 ++ .../src/pages/authenticatedPages/index.jsx | 3 + .../app/src/pages/publicPages/LogIn.jsx | 3 - .../app/src/pages/publicPages/SignUp.jsx | 4 +- 15 files changed, 173 insertions(+), 53 deletions(-) rename staff/angela-bernaldez/project/app/src/{pages/authenticated/CityDetails.jsx => logic/getAllUserLocations.js} (100%) delete mode 100644 staff/angela-bernaldez/project/app/src/pages/authenticated/CityOverview.jsx delete mode 100644 staff/angela-bernaldez/project/app/src/pages/authenticated/Dashboard.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx create mode 100644 staff/angela-bernaldez/project/app/src/pages/authenticatedPages/index.jsx diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index b711ad4d5..6c01828c5 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -5,6 +5,8 @@ import handlers from './handlers/index.js' import { errorHandler, verifyToken } from './middlewares/index.js' import 'dotenv/config' +// change port from 4321 to another number :) + mongoose.connect(process.env.MONGO_URI) .then(() => { diff --git a/staff/angela-bernaldez/project/api/tests/register-user.sh b/staff/angela-bernaldez/project/api/tests/register-user.sh index 624fe2b60..fe1f9fd89 100644 --- a/staff/angela-bernaldez/project/api/tests/register-user.sh +++ b/staff/angela-bernaldez/project/api/tests/register-user.sh @@ -1,3 +1,3 @@ curl -X POST http://localhost:4321/users \ -H "Content-Type: application/json" \ - -d '{"username":"angela", "email":"angelabernaldez@gmail.com","password":"123456789"}' -v \ No newline at end of file + -d '{"username":"angela", "email":"angelabb@gmail.com","password":"123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/App.jsx b/staff/angela-bernaldez/project/app/src/App.jsx index 755ae43a1..50527ee1b 100644 --- a/staff/angela-bernaldez/project/app/src/App.jsx +++ b/staff/angela-bernaldez/project/app/src/App.jsx @@ -1,4 +1,5 @@ import Public from './pages/Public.jsx' +import Authenticated from './pages/Authenticated.jsx' import logic from './logic' import { useEffect, useState } from 'react' import { Route, Routes } from 'react-router' @@ -12,7 +13,7 @@ function App() { return (
- add session component : setTokenUpdated(Date.now())} />} /> + setTokenUpdated(Date.now())} /> : setTokenUpdated(Date.now())} />} />
) diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/FormErrorsSection.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/FormErrorsSection.jsx index 30491b5ae..5f911571b 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/FormErrorsSection.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/FormErrorsSection.jsx @@ -2,6 +2,7 @@ import classNames from 'classnames' import EN from '../../locals/en.json' + function FormErrorsSection({ className, errors }) { errors?.sort((a, b) => a.order - b.order); diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx index 19aa7832c..bd8b0cec3 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx @@ -5,12 +5,13 @@ import { IconEmail, IconShowPassword } from '../icons/icons.jsx' // import { Errors } from 'common' // import { FormErrorsSection } from '../index.jsx' -import { useNavigate } from 'react-router-dom' +import classNames from 'classnames' +import { useNavigate, Link } from 'react-router-dom' import logic from '../../logic/index.js' // Replace ES locales with corresponding text. -function LogInForm({ onUserLoggedIn }) { +function LogInForm({ onUserLoggedIn, className }) { const navigate = useNavigate() @@ -18,11 +19,11 @@ function LogInForm({ onUserLoggedIn }) { event.preventDefault() const { email, password } = event.target - + try { logic.authenticateUser(email.value, password.value) .then(() => { - navigate('/home') + navigate('/overview') onUserLoggedIn() }) .catch((error) => alert(error.message)) @@ -31,14 +32,64 @@ function LogInForm({ onUserLoggedIn }) { } } - return
- - - - - -
- + return ( +
+

My Weather App

+
+
+ +
+
+ +
+
+ +
+
+ + Forgot password? + + + Create an account + +
+
+
+ ) } export default LogInForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx index 827a22600..3ea5efb4a 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx @@ -1,7 +1,13 @@ -import { useNavigate } from "react-router" -import logic from "../../logic" +import { IconEmail, + IconHidePassword, + IconUser, + IconPassword, + IconShowPassword } from '../icons/icons.jsx' +import logic from '../../logic' +import classNames from 'classnames' +import { useNavigate, Link } from 'react-router-dom' -function SignUpForm() { +function SignUpForm({ className }) { const navigate = useNavigate() const sendSignUpForm = (event) => { @@ -20,17 +26,75 @@ function SignUpForm() { } } - return
- - - - - - - - - -
+ return ( +
+

My Weather App

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + Already have an account? + +
+
+
+ ) } export default SignUpForm \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx b/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx index c00a21955..b4b6f84ad 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx +++ b/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx @@ -61,7 +61,7 @@ export function IconEmail(props) { ); } -export function IconUsername(props) { +export function IconUser(props) { return ( +
+ + } /> + +
+ + +} + +export default Authenticated \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticated/CityOverview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticated/CityOverview.jsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticated/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticated/Dashboard.jsx deleted file mode 100644 index 9f465f641..000000000 --- a/staff/angela-bernaldez/project/app/src/pages/authenticated/Dashboard.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Link } from "react-router" -import LogInForm from "../../components/Forms/LogInForm" - -function Dashboard({ onUserLoggedIn }) { - return
-

hello user

-
-} - -export default Dashboard - - -// fetch get all usr cities -> traerme todas las ciudades -// mapearlas - - -// componente -> cada ciudad tarjetita -// y eso lo meto dentro del map con un return \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx new file mode 100644 index 000000000..47a28225a --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -0,0 +1,6 @@ +function Overview() { + // do something here + return

hello add cities here

+} + +export default Overview \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/index.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/index.jsx new file mode 100644 index 000000000..b5614a410 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/index.jsx @@ -0,0 +1,3 @@ +import _Overview from './Overview.jsx' + +export const Overview = _Overview \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx b/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx index f4906f999..1e0dc7f9b 100644 --- a/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx @@ -1,11 +1,8 @@ -import { Link } from "react-router" import LogInForm from "../../components/Forms/LogInForm" function LogIn({ onUserLoggedIn }) { return
-

Login

-

New here? Create an account

} diff --git a/staff/angela-bernaldez/project/app/src/pages/publicPages/SignUp.jsx b/staff/angela-bernaldez/project/app/src/pages/publicPages/SignUp.jsx index 402cce9b2..84a4bb24d 100644 --- a/staff/angela-bernaldez/project/app/src/pages/publicPages/SignUp.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/publicPages/SignUp.jsx @@ -2,10 +2,8 @@ import { Link } from "react-router" import SignUpForm from "../../components/Forms/SignUpForm" function SignUp() { - return

Register

- To Login + return
- {/*To Profile*/}
} From d2c3ed36c0dd2c09bbfec5fa71aac5646c78cc8e Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Wed, 1 Jan 2025 20:51:12 +0100 Subject: [PATCH 19/45] add front logic to get all user saved locations #251 --- .../project/app/src/logic/getAllUserLocations.js | 16 ++++++++++++++++ .../project/app/src/logic/index.js | 2 ++ .../src/pages/authenticatedPages/Overview.jsx | 4 ++++ 3 files changed, 22 insertions(+) diff --git a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js index e69de29bb..07ae3a9a9 100644 --- a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js @@ -0,0 +1,16 @@ +import jwt from 'jsonwebtoken' + +const getAllUserLocations = () => { + const token = sessionStorage.getItem("token") + + const { userId } = jwt.verify(token.split(" ")[1], import.meta.env.VITE_JWT_SECRET) + + return fetch(`${import.meta.env.VITE_API_URL}users/:userId/locations`, { + method: 'GET', + headers: { + Authorization: `Bearer ${token}` + } + }) +} + +export default getAllUserLocations \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic/index.js b/staff/angela-bernaldez/project/app/src/logic/index.js index cc6809488..fb3445e50 100644 --- a/staff/angela-bernaldez/project/app/src/logic/index.js +++ b/staff/angela-bernaldez/project/app/src/logic/index.js @@ -1,9 +1,11 @@ import authenticateUser from './authenticateUser.js' +import getAllUserLocations from './getAllUserLocations.js' import isUserLoggedIn from './isUserLoggedIn.js' import registerUser from './registerUser.js' const logic = { authenticateUser, + getAllUserLocations, isUserLoggedIn, registerUser } diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index 47a28225a..3cb04862c 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -1,6 +1,10 @@ function Overview() { // do something here return

hello add cities here

+ + // bring list of all cities for user logged in + + // then render one component (card for each city) } export default Overview \ No newline at end of file From 48e1df5c6749819926e4522e99e4f487b7c18823 Mon Sep 17 00:00:00 2001 From: Angela Bernaldez Date: Sat, 11 Jan 2025 21:15:51 +0000 Subject: [PATCH 20/45] add last changes #251 --- staff/angela-bernaldez/project/api/index.js | 13 +++++++++++-- .../api/logic-weather/retrieveNominatimLocations.js | 5 ++++- staff/angela-bernaldez/project/app/src/App.jsx | 7 +++++++ .../project/app/src/components/Forms/SignUpForm.jsx | 2 +- staff/angela-bernaldez/project/app/src/index.css | 1 + .../project/app/src/logic/getAllUserLocations.js | 13 +------------ .../project/app/src/pages/Authenticated.jsx | 5 +++-- 7 files changed, 28 insertions(+), 18 deletions(-) diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index 6c01828c5..d5dd4c4b5 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -23,9 +23,18 @@ mongoose.connect(process.env.MONGO_URI) server.get('/users/auth', verifyToken, handlers.getUser) // review paths here - server.get('/users/:userId/locations', verifyToken, handlers.getAllUserLocations) - server.post('/locations/:userId/', verifyToken, jsonBodyParser, handlers.addUserLocation) + // da igual que toods los usaruios tengan la misma ruta + // porque entro con un otken asociado a mi usuario + // eñ id lo extrae del token + // no hace falta sacar el id en el front + + // pasar el id solo lo haria si quisiera acceder a la info de otro usuario (id diferente) + // x ejemplo si quisiera acceder a las localizaciones de mis amigos + // desde el front lo haria accediendo a la info del usuario desde la base de datos + server.get('/users/locations', verifyToken, handlers.getAllUserLocations) + + server.post('/users/locations', verifyToken, jsonBodyParser, handlers.addUserLocation) server.delete('/users', verifyToken, jsonBodyParser, handlers.deleteUser) diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js index eff89bd29..5c215e97a 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js @@ -17,4 +17,7 @@ export default (locationString) => { }) .catch((error) => { throw new Errors.UnexpectedError(error.message) }) }) -} \ No newline at end of file +} + +// poner un setTimeOut desde el front +// podria hacerlo con ujn boolean de si se puede hacer o no la llamada en funcion de si se harealizado hace menos de 1 seg \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/App.jsx b/staff/angela-bernaldez/project/app/src/App.jsx index 50527ee1b..d887bba72 100644 --- a/staff/angela-bernaldez/project/app/src/App.jsx +++ b/staff/angela-bernaldez/project/app/src/App.jsx @@ -21,4 +21,11 @@ function App() { export default App +// si voy a usar daisy para los themes, buscar uno que me guste +// coger los componentes ya hechos y modificarlos un poco y ya quedan muy bien + +// si elijo algun tem daisy, coger uno que tenga tonos no muy estridenteds (tonos azulitos me iria bien) +// si figma parece complicado usar canvas + +// intentar jugar con figma para tener un diseño sobre el que construir el front diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx index 3ea5efb4a..292c6fe31 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/SignUpForm.jsx @@ -29,7 +29,7 @@ function SignUpForm({ className }) { return (
diff --git a/staff/angela-bernaldez/project/app/src/index.css b/staff/angela-bernaldez/project/app/src/index.css index d904acc09..97428af84 100644 --- a/staff/angela-bernaldez/project/app/src/index.css +++ b/staff/angela-bernaldez/project/app/src/index.css @@ -23,3 +23,4 @@ } } + diff --git a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js index 07ae3a9a9..52a1a027e 100644 --- a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js @@ -1,16 +1,5 @@ -import jwt from 'jsonwebtoken' - const getAllUserLocations = () => { - const token = sessionStorage.getItem("token") - - const { userId } = jwt.verify(token.split(" ")[1], import.meta.env.VITE_JWT_SECRET) - - return fetch(`${import.meta.env.VITE_API_URL}users/:userId/locations`, { - method: 'GET', - headers: { - Authorization: `Bearer ${token}` - } - }) + console.log('hello') } export default getAllUserLocations \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx b/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx index 75e20f2c1..497b04ed8 100644 --- a/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx @@ -1,11 +1,12 @@ import { Outlet, Route, Routes } from 'react-router' import { Overview } from './authenticatedPages' -function Authenticated({ onUserLoggedIn }) { +function Authenticated({ onUserLoggedOut }) { return <>
- } /> + } /> + {/*Solamente deberia pasar el onuserloggedout a las pags/comp donde esta el boton de log out*/}
From 6ade390531e7a5ed290dbddc8c1688741c726801 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Mon, 20 Jan 2025 19:00:29 +0000 Subject: [PATCH 21/45] add baby steps to front and some bits to logic #251 --- .../project/api/logic/addUserLocation.js | 25 ++++++++++++++++-- .../project/api/logic/getAllUserLocations.js | 5 +++- .../src/components/Cards/DailyForecast.jsx | 0 .../{CityCard.jsx => FullDayForecast.jsx} | 0 .../app/src/components/Cards/LocationCard.jsx | 11 ++++++++ .../{CityOverview.jsx => NextDaysSummary.jsx} | 0 .../components/Others/LocationSearchBox.jsx | 14 ++++++++++ .../app/src/components/Others/index.jsx | 3 +++ .../project/app/src/index.css | 10 +------ .../project/app/src/logic/addUserLocation.js | 8 +++--- .../app/src/logic/getAllUserLocations.js | 26 ++++++++++++++++++- .../src/pages/authenticatedPages/Overview.jsx | 10 +++++-- .../app/src/pages/publicPages/LogIn.jsx | 2 +- .../project/app/tailwind.config.js | 7 +---- 14 files changed, 95 insertions(+), 26 deletions(-) delete mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/DailyForecast.jsx rename staff/angela-bernaldez/project/app/src/components/Cards/{CityCard.jsx => FullDayForecast.jsx} (100%) create mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx rename staff/angela-bernaldez/project/app/src/components/Cards/{CityOverview.jsx => NextDaysSummary.jsx} (100%) create mode 100644 staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/Others/index.jsx diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.js index e1869279f..cd72675aa 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.js @@ -2,7 +2,7 @@ import models from '../data/models.js' const { User, Location } = models -const generateLocationId = async (location, locationData) => { +const getOrCreateLocation = async (location, locationData) => { if (location) return location // si la localizacion no existia antes, timeLastUpdated es la fecha de ahora mismo @@ -25,12 +25,33 @@ export default (id, locationData) => { const { name, latitude, longitude, altitude } = locationData + /* + podria quitar la funcion auxiliar + return Location.findOne({ name, latitude, longitude }) + .then((location) => { + // Si la ubicación no existe, la creamos usando Location.create + if (!location) { + return Location.create({ + name, + latitude, + longitude, + altitude, + timeLastUpdated: new Date(), + // Aquí puedes agregar lógica para otras variables adicionales si es necesario + }) + } + return location // Si la ubicación ya existe, la devolvemos tal cual + }) + .then((newLocation) => + ...) + */ + return User.findById(id) .then((user) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') return Location.findOne({name: name, latitude: latitude, longitude: longitude}) .then((location) => { - return generateLocationId(location, locationData) + return getOrCreateLocation(location, locationData) .then((newLocation) => { const foundLocation = user.favLocations.find((location) => location._id === newLocation._id) diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js index 7efd58fb3..7872ed57c 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js @@ -11,5 +11,8 @@ export default (id) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') return user.favLocations }) - // add catch + .catch((error) => { + // change this to a specific type of error + console.log(error) + }) } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/DailyForecast.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/DailyForecast.jsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CityCard.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/FullDayForecast.jsx similarity index 100% rename from staff/angela-bernaldez/project/app/src/components/Cards/CityCard.jsx rename to staff/angela-bernaldez/project/app/src/components/Cards/FullDayForecast.jsx diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx new file mode 100644 index 000000000..e67b64d80 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx @@ -0,0 +1,11 @@ +function LocationCard() { + // I guess I´d need to pass as an argument of this function the location data + // location name, min and max temperature, etc. + + // this component is to be called once for each favlocation for a specfic user + return ( +
+ Location goes here +
+ ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CityOverview.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/NextDaysSummary.jsx similarity index 100% rename from staff/angela-bernaldez/project/app/src/components/Cards/CityOverview.jsx rename to staff/angela-bernaldez/project/app/src/components/Cards/NextDaysSummary.jsx diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx new file mode 100644 index 000000000..c80f51520 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -0,0 +1,14 @@ +function LocationSearchBox() { + return ( +
+ +
+ ) +} + +export default LocationSearchBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Others/index.jsx b/staff/angela-bernaldez/project/app/src/components/Others/index.jsx new file mode 100644 index 000000000..228867c53 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Others/index.jsx @@ -0,0 +1,3 @@ +import _LocationSearchBox from './LocationSearchBox.jsx' + +export const LocationSearchBox = _LocationSearchBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/index.css b/staff/angela-bernaldez/project/app/src/index.css index 97428af84..243deca70 100644 --- a/staff/angela-bernaldez/project/app/src/index.css +++ b/staff/angela-bernaldez/project/app/src/index.css @@ -3,24 +3,16 @@ @tailwind utilities; -@layer components { - .prose { - @apply text-white; - } -} - @layer base { :root { --header-heigth: 64px; } body { - @apply bg-black w-screen min-h-screen h-full max-w-full text-white font-mono; + @apply bg-primary w-screen min-h-screen h-full max-w-full text-white font-mono; } html { @apply !bg-black; } } - - diff --git a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js index a4556e037..d8364b85a 100644 --- a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js @@ -1,21 +1,21 @@ import { Errors } from 'common' -export default (location_name) => { +export default (locationData) => { // include validators const token = sessionStorage.getItem("token") // aqui hago llamada a la api - return fetch(`${import.meta.env.VITE_API_URL}user/${locationId}`, { + return fetch(`${import.meta.env.VITE_API_URL}/users/locations`, { method: 'POST', headers: { 'Content-type': 'application/json', Authorization: `Bearer ${token}` }, - body: JSON.stringify({ location_name: location_name }) + body: JSON.stringify({ locationData: locationData }) }) .then((res) => { - if (res.status === 201) return; + if (res.status === 201) return return res.json() .then(body => { const constructor = Errors[body.name] diff --git a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js index 52a1a027e..ce9ac56da 100644 --- a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js @@ -1,5 +1,29 @@ +import { Errors } from 'common' + const getAllUserLocations = () => { - console.log('hello') + + // tengo que pasar un isUserLoggedIn o algo asi para asegurarme de que solo sea con la sesion iniciada? + + return fetch(`${import.meta.env.VITE_API_URL}/users/locations`, { + method: 'GET', + headers: { + Authorization: `Bearer ${token}` + }, + }) + .then((res) => { + if (res.status === 200) return res.json() + .then(body => body.user.favLocations) + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) + }) + .catch((error) => { + if (error instanceof Errors.BadRequestError) + throw new Errors.ServerError("Server in not connected") + throw error + }); } export default getAllUserLocations \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index 3cb04862c..b6206fde7 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -1,10 +1,16 @@ +import LocationSearchBox from '../../components/Others/LocationSearchBox' + function Overview() { // do something here - return

hello add cities here

+ return
+ +
// bring list of all cities for user logged in + // getAllUserLocations is what I need to call + // then render one component (card for each city) } -export default Overview \ No newline at end of file +export default Overview diff --git a/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx b/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx index 1e0dc7f9b..6a8dae59e 100644 --- a/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/publicPages/LogIn.jsx @@ -1,4 +1,4 @@ -import LogInForm from "../../components/Forms/LogInForm" +import LogInForm from '../../components/Forms/LogInForm' function LogIn({ onUserLoggedIn }) { return
diff --git a/staff/angela-bernaldez/project/app/tailwind.config.js b/staff/angela-bernaldez/project/app/tailwind.config.js index 4ccd0398b..6c5704db2 100644 --- a/staff/angela-bernaldez/project/app/tailwind.config.js +++ b/staff/angela-bernaldez/project/app/tailwind.config.js @@ -54,12 +54,7 @@ module.exports = { }, daisyui: { themes: [ - { - dracula: { - ...require("daisyui/src/theming/themes")["dracula"], - - }, - } + "aqua" ], }, plugins: [require("@tailwindcss/typography"), require("daisyui")], From 26682eeb4f96df1878a0b6cdf266630d4ff4d960 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Tue, 21 Jan 2025 20:16:34 +0000 Subject: [PATCH 22/45] add city weather cards baby steps + logic #251 --- .../app/src/components/Cards/LocationCard.jsx | 15 ++++++--- .../app/src/components/Cards/index.jsx | 3 ++ .../app/src/components/Forms/LogInForm.jsx | 3 ++ .../components/Others/LocationSearchBox.jsx | 31 +++++++++++++++++++ .../app/src/logic/getAllUserLocations.js | 12 +++---- .../project/app/src/pages/Authenticated.jsx | 12 +++---- .../src/pages/authenticatedPages/Overview.jsx | 9 +++++- 7 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/index.jsx diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx index e67b64d80..61cb316ed 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx @@ -1,11 +1,18 @@ -function LocationCard() { +function LocationCard({locationName, temperature}) { // I guess I´d need to pass as an argument of this function the location data // location name, min and max temperature, etc. // this component is to be called once for each favlocation for a specfic user return ( -
- Location goes here +
+
+

{locationName}

+
+
+

{temperature}

+
) -} \ No newline at end of file +} + +export default LocationCard \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/index.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/index.jsx new file mode 100644 index 000000000..44169eacb --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Cards/index.jsx @@ -0,0 +1,3 @@ +import _LocationCard from './LocationCard.jsx' + +export const LocationCard = _LocationCard \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx index bd8b0cec3..0cc46816c 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx @@ -13,6 +13,9 @@ import logic from '../../logic/index.js' function LogInForm({ onUserLoggedIn, className }) { + // podria quitarme classNames y quitarlo de argumento + // quitar classnames y pasar classname como string dentro (see locationCard ahi esta hecho) + const navigate = useNavigate() const sendLogInForm = (event) => { diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index c80f51520..c5ae1a798 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -1,13 +1,44 @@ +import {useState, useEffect} from 'react' + function LocationSearchBox() { + + const [lastCall, setLastCall] = useState(Date.now()) + + const [locations, setLocations] = useState([]) + // locations se ira actualizando con lo que me vaya devolviendo nominatim api + // setLocations(..... de lo que me devuelva la api) + + // renderizar un menu hacia abajo siempre y cuando haya localizaciones o cambios en las loc + + const onChangeInput = (event) => { + event.preventDefault() + + const dateNow = Date.now() + console.log(dateNow - lastCall) + + if (dateNow - lastCall > 1000) { + setLastCall(dateNow) + // llamada a la nominatim api + // event.target.value + console.log(event.target.value) + } + } + return (
+ {/*componente a parte al que le pase como prop locations y lo renderice x cada loc + haciendo un map + y le pongo el useEffect con el locations como variable (antes del return)*/}
+ // poner un onchange en lugar de onsubmit + // y poner un settimeout ) } diff --git a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js index ce9ac56da..007d4c1eb 100644 --- a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js @@ -13,17 +13,17 @@ const getAllUserLocations = () => { .then((res) => { if (res.status === 200) return res.json() .then(body => body.user.favLocations) - return res.json() - .then(body => { - const constructor = Errors[body.name] - throw new constructor(`${body.message}`) - }) + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) }) .catch((error) => { if (error instanceof Errors.BadRequestError) throw new Errors.ServerError("Server in not connected") throw error - }); + }) } export default getAllUserLocations \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx b/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx index 497b04ed8..ce264b0a9 100644 --- a/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx @@ -3,13 +3,11 @@ import { Overview } from './authenticatedPages' function Authenticated({ onUserLoggedOut }) { return <> -
- - } /> - {/*Solamente deberia pasar el onuserloggedout a las pags/comp donde esta el boton de log out*/} - -
- + + } /> + {/*Solamente deberia pasar el onuserloggedout a las pags/comp donde esta el boton de log out*/} + + } diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index b6206fde7..f5dc3ef29 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -1,11 +1,18 @@ import LocationSearchBox from '../../components/Others/LocationSearchBox' +import LocationCard from '../../components/Cards/LocationCard' function Overview() { // do something here - return
+ + return
+ + +
+ // mirar el ejemplo en Home.jsx + // bring list of all cities for user logged in // getAllUserLocations is what I need to call From 9ec7f271925cdd558716af00d177a41791a9a815 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Wed, 29 Jan 2025 21:51:54 +0000 Subject: [PATCH 23/45] fix nominatim api issues #251 --- .../retrieveNominatimLocations.js | 12 ++++++++++ .../project/api/logic-weather/index.js | 5 +++++ .../retrieveNominatimLocations.js | 10 +++++---- .../retrieveNominatimLocations.spec.js | 22 +++++++++++++++++++ .../components/Others/LocationSearchBox.jsx | 1 + .../angela-bernaldez/project/services/test.js | 6 ++--- 6 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js create mode 100644 staff/angela-bernaldez/project/api/logic-weather/index.js create mode 100644 staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js diff --git a/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js new file mode 100644 index 000000000..a29b72b76 --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js @@ -0,0 +1,12 @@ +import logic from '../logic-weather/index.js' + +export default (req, res, next) => { + const locationString = req.body + + try { + logic.retrieveNominatimLocations(locationString) + .then(() => res.status(201).send()) + } catch(error) { + next(error) + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/index.js b/staff/angela-bernaldez/project/api/logic-weather/index.js new file mode 100644 index 000000000..056d131e2 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/index.js @@ -0,0 +1,5 @@ +import retrieveNominatimLocations from './retrieveNominatimLocations.js' + +export default { + retrieveNominatimLocations +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js index 5c215e97a..1862e0a39 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js @@ -6,18 +6,20 @@ export default (locationString) => { // user types something in the front and goes to the back. make sure to catch a string // limit is used to return only a specific number of results + const nominatim_url = `https://nominatim.openstreetmap.org/search?q=${locationString}&limit=5&format=json` - fetch(nominatim_url) + return fetch(nominatim_url) .then((response) => { - if (!response) throw new Error('Unable to stablish connection with Nominatim API') + if (!response.ok) throw new Error('Unable to stablish connection with Nominatim API') return response.json() .then((locationsFound) => { + if (!locationsFound || locationsFound.length === 0) { + throw new Error('No locations found') + } return locationsFound }) .catch((error) => { throw new Errors.UnexpectedError(error.message) }) }) } -// poner un setTimeOut desde el front -// podria hacerlo con ujn boolean de si se puede hacer o no la llamada en funcion de si se harealizado hace menos de 1 seg \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js new file mode 100644 index 000000000..519fea8b7 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js @@ -0,0 +1,22 @@ +import 'dotenv/config' +import retrieveNominatimLocations from './retrieveNominatimLocations.js' +import { describe, it } from 'mocha' +import { expect } from 'chai' + + +describe('retrieveNominatimLocations', () => { + + it('retrieve locations when a string is passed', () => { + return retrieveNominatimLocations('Brighton') + .then((locationsRetrieved) => { + console.log(locationsRetrieved) + // as limit has been set to 5, first 5 locations found should be retrieved + //expect(locationsRetrieved).to.have.lengthOf(5) + }) + }) +}) + + + + + diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index c5ae1a798..ede640f5a 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -20,6 +20,7 @@ function LocationSearchBox() { setLastCall(dateNow) // llamada a la nominatim api // event.target.value + const locationString = // call api console.log(event.target.value) } } diff --git a/staff/angela-bernaldez/project/services/test.js b/staff/angela-bernaldez/project/services/test.js index 020394f6b..0e4a4beb5 100644 --- a/staff/angela-bernaldez/project/services/test.js +++ b/staff/angela-bernaldez/project/services/test.js @@ -1,4 +1,4 @@ -import axios from 'axios' + // vamos a usar la libreria axios para hacer llamadas a una api externa @@ -8,7 +8,7 @@ import axios from 'axios' function fetchWeatherData(longitude, latitude, variables) { const url = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=temperature_2m,precipitation` - axios.get(url) + return fetch(url) .then(response => { const data = response.data if (typeof response.data !== 'object') { @@ -24,7 +24,7 @@ function fetchWeatherData(longitude, latitude, variables) { async function fetchCityCoordinates(city) { const url = `https://geocoding-api.open-meteo.com/v1/search?name=${city}&count=1&language=en&format=json` - return axios.get(url) + return fetch(url) .then(response => { const data = response.data.results[0] const { longitude, latitude } = data From cdf9ec3ed36fc11f25f17ace1f71f7ffafb310db Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Fri, 31 Jan 2025 16:19:51 +0000 Subject: [PATCH 24/45] add nominatim api logic handlers baby steps #251 --- .../project/api/handlers-weather/index.js | 5 +++ .../retrieveNominatimLocations.js | 5 +-- staff/angela-bernaldez/project/api/index.js | 3 ++ .../retrieveNominatimLocations.js | 36 +++++++++++-------- .../retrieveNominatimLocations.spec.js | 5 ++- .../project/api/logic/getAllUserLocations.js | 4 +++ .../project/api/middlewares/verifyToken.js | 3 ++ .../project/api/tests/authenticate-user.sh | 2 +- .../api/tests/retrieve-nominatim-location.sh | 3 ++ 9 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers-weather/index.js create mode 100644 staff/angela-bernaldez/project/api/tests/retrieve-nominatim-location.sh diff --git a/staff/angela-bernaldez/project/api/handlers-weather/index.js b/staff/angela-bernaldez/project/api/handlers-weather/index.js new file mode 100644 index 000000000..056d131e2 --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers-weather/index.js @@ -0,0 +1,5 @@ +import retrieveNominatimLocations from './retrieveNominatimLocations.js' + +export default { + retrieveNominatimLocations +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js index a29b72b76..b7afe27f2 100644 --- a/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js @@ -1,10 +1,11 @@ -import logic from '../logic-weather/index.js' +import logicWeather from '../logic-weather/index.js' export default (req, res, next) => { const locationString = req.body + const userId = req.id try { - logic.retrieveNominatimLocations(locationString) + logicWeather.retrieveNominatimLocations(userId, locationString) .then(() => res.status(201).send()) } catch(error) { next(error) diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index d5dd4c4b5..ce35db631 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -2,6 +2,7 @@ import cors from 'cors' import express, { json } from 'express' import mongoose from 'mongoose' import handlers from './handlers/index.js' +import handlersWeather from './handlers-weather/index.js' import { errorHandler, verifyToken } from './middlewares/index.js' import 'dotenv/config' @@ -38,6 +39,8 @@ mongoose.connect(process.env.MONGO_URI) server.delete('/users', verifyToken, jsonBodyParser, handlers.deleteUser) + server.get('/users/nominatim-locations/', verifyToken, jsonBodyParser, handlersWeather.retrieveNominatimLocations) + server.use(errorHandler) server.listen(process.env.PORT, () => { diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js index 1862e0a39..d5be2e518 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js @@ -1,25 +1,31 @@ -// among information returned, lat and lon coordinates are present -// they will be used to retrieve data using Weather API (open meteo) +import models from '../data/models.js' -export default (locationString) => { +const { User } = models + +export default (userId, locationString) => { // validate locationString? // user types something in the front and goes to the back. make sure to catch a string - // limit is used to return only a specific number of results + // userId is passed to make sure only registered users can use the api const nominatim_url = `https://nominatim.openstreetmap.org/search?q=${locationString}&limit=5&format=json` - return fetch(nominatim_url) - .then((response) => { - if (!response.ok) throw new Error('Unable to stablish connection with Nominatim API') - return response.json() - .then((locationsFound) => { - if (!locationsFound || locationsFound.length === 0) { - throw new Error('No locations found') - } - return locationsFound - }) - .catch((error) => { throw new Errors.UnexpectedError(error.message) }) + return User.findById(userId) + .then((user) => { + if (!user) throw new Errors.AuthError('User id does not belong to anyone') + return fetch(nominatim_url) + .then((response) => { + if (!response.ok) throw new Error('Unable to stablish connection with Nominatim API') + return response.json() + .then((locationsFound) => { + if (!locationsFound || locationsFound.length === 0) { + throw new Error('No locations found') + } + console.log(locationsFound) + return locationsFound + }) + .catch((error) => { throw new Errors.UnexpectedError(error.message) }) + }) }) } diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js index 519fea8b7..f4279d66e 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js @@ -2,7 +2,10 @@ import 'dotenv/config' import retrieveNominatimLocations from './retrieveNominatimLocations.js' import { describe, it } from 'mocha' import { expect } from 'chai' +import models from '../data/models.js' +import mongoose from 'mongoose' +const { User } = models describe('retrieveNominatimLocations', () => { @@ -11,7 +14,7 @@ describe('retrieveNominatimLocations', () => { .then((locationsRetrieved) => { console.log(locationsRetrieved) // as limit has been set to 5, first 5 locations found should be retrieved - //expect(locationsRetrieved).to.have.lengthOf(5) + expect(locationsRetrieved).to.have.lengthOf(5) }) }) }) diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js index 7872ed57c..1c8c6a1e2 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js @@ -9,6 +9,10 @@ export default (id) => { return User.findById(id) .then((user) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') + // currently this only returns location ids + // this function could potentially be modified to return all location info + // coords, altitude, lastTimeUpdates and variables + // then, only retrieve weather data again if last update was more than 1 hour ago return user.favLocations }) .catch((error) => { diff --git a/staff/angela-bernaldez/project/api/middlewares/verifyToken.js b/staff/angela-bernaldez/project/api/middlewares/verifyToken.js index dc1eb6ac9..60d8392ef 100644 --- a/staff/angela-bernaldez/project/api/middlewares/verifyToken.js +++ b/staff/angela-bernaldez/project/api/middlewares/verifyToken.js @@ -7,6 +7,9 @@ export default (req, res, next) => { req.id = id + console.log(token, 'this is the token') + console.log(id, 'id') + next() } diff --git a/staff/angela-bernaldez/project/api/tests/authenticate-user.sh b/staff/angela-bernaldez/project/api/tests/authenticate-user.sh index f26f7650b..98e076ca0 100644 --- a/staff/angela-bernaldez/project/api/tests/authenticate-user.sh +++ b/staff/angela-bernaldez/project/api/tests/authenticate-user.sh @@ -1,3 +1,3 @@ curl -X POST http://localhost:4321/users/auth \ -H "Content-Type: application/json" \ - -d '{"email":"angelabernaldez@gmail.com", "password": "123456789"}' -v \ No newline at end of file + -d '{"email":"angelabb@gmail.com", "password": "123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/retrieve-nominatim-location.sh b/staff/angela-bernaldez/project/api/tests/retrieve-nominatim-location.sh new file mode 100644 index 000000000..08665fa0e --- /dev/null +++ b/staff/angela-bernaldez/project/api/tests/retrieve-nominatim-location.sh @@ -0,0 +1,3 @@ +curl -X GET http://localhost:4321/users/nominatim-locations/ \ + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OWJiZmY2Mjk4NThkNDVjYmI3MTM4OCIsImlhdCI6MTczODI2MDUxM30.fJFw6iT77ZzwxZUCLwcTvYo-IjNHIEjbC8TzSoJdix8" \ + -H "locationString: Brighton" -v \ No newline at end of file From 28cdb65ad7d5d555c185a3123074d11f0708a80c Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Sat, 1 Feb 2025 21:00:23 +0000 Subject: [PATCH 25/45] add location search box logic and more #251 --- .../retrieveNominatimLocations.js | 7 +- staff/angela-bernaldez/project/api/index.js | 2 +- .../retrieveNominatimLocations.js | 3 + .../retrieveNominatimLocations.spec.js | 29 ++- .../project/api/logic/addUserLocation.js | 14 +- .../project/api/middlewares/verifyToken.js | 3 - .../angela-bernaldez/project/app/package.json | 1 + .../project/app/pnpm-lock.yaml | 226 ++++++++++++++++++ .../components/Others/LocationSearchBox.jsx | 88 ++++--- .../project/app/src/logic-weather/index.js | 5 + .../retrieveNominatimLocations.js | 35 +++ .../project/app/src/logic/addUserLocation.js | 8 +- .../app/src/logic/getAllUserLocations.js | 2 +- .../project/app/src/logic/index.js | 5 +- .../src/pages/authenticatedPages/Overview.jsx | 1 + 15 files changed, 376 insertions(+), 53 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/logic-weather/index.js create mode 100644 staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js diff --git a/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js index b7afe27f2..ef43973e3 100644 --- a/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/handlers-weather/retrieveNominatimLocations.js @@ -1,12 +1,15 @@ import logicWeather from '../logic-weather/index.js' export default (req, res, next) => { - const locationString = req.body + + const { locationString } = req.body const userId = req.id try { logicWeather.retrieveNominatimLocations(userId, locationString) - .then(() => res.status(201).send()) + .then((locationsFound) => { + res.status(200).json({ locationsFound }) + }) } catch(error) { next(error) } diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index ce35db631..d8668fb2f 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -39,7 +39,7 @@ mongoose.connect(process.env.MONGO_URI) server.delete('/users', verifyToken, jsonBodyParser, handlers.deleteUser) - server.get('/users/nominatim-locations/', verifyToken, jsonBodyParser, handlersWeather.retrieveNominatimLocations) + server.post('/users/nominatim-locations', verifyToken, jsonBodyParser, handlersWeather.retrieveNominatimLocations) server.use(errorHandler) diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js index d5be2e518..24249d1b3 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js @@ -1,4 +1,5 @@ import models from '../data/models.js' +import { Errors } from 'common' const { User } = models @@ -10,6 +11,8 @@ export default (userId, locationString) => { const nominatim_url = `https://nominatim.openstreetmap.org/search?q=${locationString}&limit=5&format=json` + console.log(locationString, 'locationString que me esta llegando al back end') + return User.findById(userId) .then((user) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js index f4279d66e..f07f7d9ff 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js @@ -4,18 +4,35 @@ import { describe, it } from 'mocha' import { expect } from 'chai' import models from '../data/models.js' import mongoose from 'mongoose' +import bcrypt from 'bcrypt' const { User } = models describe('retrieveNominatimLocations', () => { + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + it('retrieve locations when a string is passed', () => { - return retrieveNominatimLocations('Brighton') - .then((locationsRetrieved) => { - console.log(locationsRetrieved) - // as limit has been set to 5, first 5 locations found should be retrieved - expect(locationsRetrieved).to.have.lengthOf(5) - }) + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'nametest', + email: 'test@mail.com', + password: cryptPassword + } + return User.create(user) + .then((user) => { + const userId = user._id.toString() + return retrieveNominatimLocations(userId, 'Brighton') + .then((locationsRetrieved) => { + console.log(locationsRetrieved) + // as limit has been set to 5, first 5 locations found should be retrieved + expect(locationsRetrieved).to.have.lengthOf(5) + }) + }) + }) }) }) diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.js index cd72675aa..2e3b979db 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.js @@ -52,14 +52,14 @@ export default (id, locationData) => { return Location.findOne({name: name, latitude: latitude, longitude: longitude}) .then((location) => { return getOrCreateLocation(location, locationData) - .then((newLocation) => { - const foundLocation = user.favLocations.find((location) => location._id === newLocation._id) + .then((newLocation) => { + const foundLocation = user.favLocations.find((location) => location._id === newLocation._id) - if (!foundLocation) { - user.favLocations.push(newLocation._id) - return user.save() - } - }) + if (!foundLocation) { + user.favLocations.push(newLocation._id) + return user.save() + } + }) .catch((error) => { // change this to a specific type of error console.log(error) diff --git a/staff/angela-bernaldez/project/api/middlewares/verifyToken.js b/staff/angela-bernaldez/project/api/middlewares/verifyToken.js index 60d8392ef..dc1eb6ac9 100644 --- a/staff/angela-bernaldez/project/api/middlewares/verifyToken.js +++ b/staff/angela-bernaldez/project/api/middlewares/verifyToken.js @@ -7,9 +7,6 @@ export default (req, res, next) => { req.id = id - console.log(token, 'this is the token') - console.log(id, 'id') - next() } diff --git a/staff/angela-bernaldez/project/app/package.json b/staff/angela-bernaldez/project/app/package.json index cc07f20a2..b833e2f04 100644 --- a/staff/angela-bernaldez/project/app/package.json +++ b/staff/angela-bernaldez/project/app/package.json @@ -17,6 +17,7 @@ "react-router": "^7.0.2", "react-router-dom": "^7.0.2", "react-scripts": "^5.0.1", + "react-select": "^5.10.0", "react-use": "^17.6.0" }, "devDependencies": { diff --git a/staff/angela-bernaldez/project/app/pnpm-lock.yaml b/staff/angela-bernaldez/project/app/pnpm-lock.yaml index 1b9f1a8bb..0eb5ccbac 100644 --- a/staff/angela-bernaldez/project/app/pnpm-lock.yaml +++ b/staff/angela-bernaldez/project/app/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: react-scripts: specifier: ^5.0.1 version: 5.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0))(@types/babel__core@7.20.5)(eslint@9.16.0(jiti@1.21.6))(react@18.3.1)(type-fest@0.21.3)(typescript@4.9.5) + react-select: + specifier: ^5.10.0 + version: 5.10.0(@types/react@18.3.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-use: specifier: ^17.6.0 version: 17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -903,6 +906,47 @@ packages: peerDependencies: postcss-selector-parser: ^6.0.10 + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@esbuild/aix-ppc64@0.24.0': resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} engines: {node: '>=18'} @@ -1081,6 +1125,15 @@ packages: resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1573,6 +1626,11 @@ packages: '@types/react-dom@18.3.2': resolution: {integrity: sha512-Fqp+rcvem9wEnGr3RY8dYNvSQ8PoLqjZ9HLgaPUOjJJD120uDyOxOjc/39M4Kddp9JQCxpGQbnhVQF0C0ncYVg==} + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' + '@types/react@18.3.14': resolution: {integrity: sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==} @@ -2545,6 +2603,9 @@ packages: dom-converter@0.2.0: resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dom-serializer@0.2.2: resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} @@ -2978,6 +3039,9 @@ packages: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -3199,6 +3263,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hoopy@0.1.4: resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} engines: {node: '>= 6.0.0'} @@ -3918,6 +3985,9 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -4833,6 +4903,18 @@ packages: typescript: optional: true + react-select@5.10.0: + resolution: {integrity: sha512-k96gw+i6N3ExgDwPIg0lUPmexl1ygPe6u5BdQFNBhkpbwroIgCNXdubtIzHfThYXYYTubwOBafoMnn7ruEP1xA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + react-universal-interface@0.6.2: resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} peerDependencies: @@ -5181,6 +5263,10 @@ packages: resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} engines: {node: '>=0.10.0'} + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -5329,6 +5415,9 @@ packages: peerDependencies: postcss: ^8.2.15 + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + stylis@4.3.4: resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} @@ -5604,6 +5693,15 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + use-isomorphic-layout-effect@1.2.0: + resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -6917,6 +7015,70 @@ snapshots: dependencies: postcss-selector-parser: 6.1.2 + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.26.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@18.3.14)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.14 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + '@esbuild/aix-ppc64@0.24.0': optional: true @@ -7030,6 +7192,17 @@ snapshots: dependencies: levn: 0.4.1 + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/utils@0.2.9': {} + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -7623,6 +7796,10 @@ snapshots: dependencies: '@types/react': 18.3.14 + '@types/react-transition-group@4.4.12(@types/react@18.3.14)': + dependencies: + '@types/react': 18.3.14 + '@types/react@18.3.14': dependencies: '@types/prop-types': 15.7.14 @@ -8727,6 +8904,11 @@ snapshots: dependencies: utila: 0.4.0 + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.26.0 + csstype: 3.1.3 + dom-serializer@0.2.2: dependencies: domelementtype: 2.3.0 @@ -9348,6 +9530,8 @@ snapshots: make-dir: 3.1.0 pkg-dir: 4.2.0 + find-root@1.1.0: {} + find-up@3.0.0: dependencies: locate-path: 3.0.0 @@ -9565,6 +9749,10 @@ snapshots: he@1.2.0: {} + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + hoopy@0.1.4: {} hpack.js@2.1.6: @@ -10534,6 +10722,8 @@ snapshots: dependencies: fs-monkey: 1.0.6 + memoize-one@6.0.0: {} + merge-descriptors@1.0.3: {} merge-stream@2.0.0: {} @@ -11520,6 +11710,32 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve + react-select@5.10.0(@types/react@18.3.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/cache': 11.14.0 + '@emotion/react': 11.14.0(@types/react@18.3.14)(react@18.3.1) + '@floating-ui/dom': 1.6.13 + '@types/react-transition-group': 4.4.12(@types/react@18.3.14) + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.14)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - supports-color + + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-universal-interface@0.6.2(react@18.3.1)(tslib@2.8.1): dependencies: react: 18.3.1 @@ -11922,6 +12138,8 @@ snapshots: source-map@0.5.6: {} + source-map@0.5.7: {} + source-map@0.6.1: {} source-map@0.7.4: {} @@ -12097,6 +12315,8 @@ snapshots: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + stylis@4.2.0: {} + stylis@4.3.4: {} sucrase@3.35.0: @@ -12399,6 +12619,12 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 + use-isomorphic-layout-effect@1.2.0(@types/react@18.3.14)(react@18.3.1): + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.14 + util-deprecate@1.0.2: {} util.promisify@1.0.1: diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index ede640f5a..1264f5ec2 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -1,45 +1,77 @@ -import {useState, useEffect} from 'react' +import {useState, useEffect, useRef} from 'react' +import logicWeather from '../../logic-weather' +import Select from 'react-select' function LocationSearchBox() { - const [lastCall, setLastCall] = useState(Date.now()) - const [locations, setLocations] = useState([]) - // locations se ira actualizando con lo que me vaya devolviendo nominatim api - // setLocations(..... de lo que me devuelva la api) + const [inputValue, setInputValue] = useState('') + + const debounceTimeout = useRef(null) // used to store timeout between different renders - // renderizar un menu hacia abajo siempre y cuando haya localizaciones o cambios en las loc + const handleInputChange = (locationString) => { + setInputValue(locationString) - const onChangeInput = (event) => { - event.preventDefault() + if (debounceTimeout.current) { + clearTimeout(debounceTimeout.current); + } - const dateNow = Date.now() - console.log(dateNow - lastCall) + debounceTimeout.current = setTimeout(() => { - if (dateNow - lastCall > 1000) { - setLastCall(dateNow) - // llamada a la nominatim api - // event.target.value - const locationString = // call api - console.log(event.target.value) - } + if (locationString.trim() === '') { + setLocations([]) + return + } + logicWeather.retrieveNominatimLocations(locationString) + .then((locationsFound) => { + if (locationsFound && locationsFound.length > 0) { + setLocations(locationsFound.map((item) => ({ + label: item.display_name, + value: item.display_name, + fullData: item + }))) + } else { + setLocations([]) + } + }) + .catch((error) => { + console.error('Error fetching locations:', error) + }) + }, 1000) + } + + const handleSelect = (selectedLocation) => { + console.log('Selected location is:', selectedLocation); + setInputValue(selectedLocation ? selectedLocation.label : '') } return (
- ({ + ...provided, + minWidth: '100%', + maxWidth: '100%', + width: '100%', + }), + menu: (provided) => ({ + ...provided, + width: '100%', + maxHeight: 300, + overflowY: 'auto', + }), + }} /> - {/*componente a parte al que le pase como prop locations y lo renderice x cada loc - haciendo un map - y le pongo el useEffect con el locations como variable (antes del return)*/}
- // poner un onchange en lugar de onsubmit - // y poner un settimeout ) } diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/index.js b/staff/angela-bernaldez/project/app/src/logic-weather/index.js new file mode 100644 index 000000000..056d131e2 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic-weather/index.js @@ -0,0 +1,5 @@ +import retrieveNominatimLocations from './retrieveNominatimLocations.js' + +export default { + retrieveNominatimLocations +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js new file mode 100644 index 000000000..cd1becec7 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js @@ -0,0 +1,35 @@ +import { Errors } from 'common' + +const retrieveNominatimLocations = (locationString) => { + + // include validators de que sea un string + + const token = sessionStorage.getItem("token") + + console.log(locationString, 'printing locationString front-end logic') + + return fetch(`${import.meta.env.VITE_API_URL}users/nominatim-locations/`, { + method: 'POST', + headers: { + 'Content-type': 'application/json', + Authorization: `Bearer ${token}` + }, + body: JSON.stringify({ locationString: locationString }) + }) + .then((res) => { + if (res.status === 200) return res.json() + .then(body => body.locationsFound) + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) + }) + .catch((error) => { + if (error instanceof Errors.BadRequestError) + throw new Errors.ServerError("Server in not connected") + throw error + }) +} + +export default retrieveNominatimLocations \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js index d8364b85a..26ed4da01 100644 --- a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js @@ -1,12 +1,12 @@ import { Errors } from 'common' -export default (locationData) => { +const addUserLocation = (locationData) => { // include validators const token = sessionStorage.getItem("token") // aqui hago llamada a la api - return fetch(`${import.meta.env.VITE_API_URL}/users/locations`, { + return fetch(`${import.meta.env.VITE_API_URL}users/locations`, { method: 'POST', headers: { 'Content-type': 'application/json', @@ -27,4 +27,6 @@ export default (locationData) => { throw new Errors.ServerError("Server in not connected"); throw error }) -} \ No newline at end of file +} + +export default addUserLocation \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js index 007d4c1eb..9e2393ac8 100644 --- a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js @@ -4,7 +4,7 @@ const getAllUserLocations = () => { // tengo que pasar un isUserLoggedIn o algo asi para asegurarme de que solo sea con la sesion iniciada? - return fetch(`${import.meta.env.VITE_API_URL}/users/locations`, { + return fetch(`${import.meta.env.VITE_API_URL}users/locations`, { method: 'GET', headers: { Authorization: `Bearer ${token}` diff --git a/staff/angela-bernaldez/project/app/src/logic/index.js b/staff/angela-bernaldez/project/app/src/logic/index.js index fb3445e50..f083b2643 100644 --- a/staff/angela-bernaldez/project/app/src/logic/index.js +++ b/staff/angela-bernaldez/project/app/src/logic/index.js @@ -1,13 +1,14 @@ +import addUserLocation from './addUserLocation.js' import authenticateUser from './authenticateUser.js' import getAllUserLocations from './getAllUserLocations.js' import isUserLoggedIn from './isUserLoggedIn.js' import registerUser from './registerUser.js' -const logic = { +export default { + addUserLocation, authenticateUser, getAllUserLocations, isUserLoggedIn, registerUser } -export default logic \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index f5dc3ef29..c906abfdd 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -1,5 +1,6 @@ import LocationSearchBox from '../../components/Others/LocationSearchBox' import LocationCard from '../../components/Cards/LocationCard' +import isUserLoggedIn from '../../logic/isUserLoggedIn' function Overview() { // do something here From 4a228da819fae0667a25125a2f9cfd3884252dce Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Wed, 5 Feb 2025 18:44:34 +0000 Subject: [PATCH 26/45] add search box comments to implement things #251 --- .../angela-bernaldez/project/app/package.json | 1 - .../components/Others/LocationSearchBox.jsx | 42 +++++++------------ .../app/src/components/icons/icons.jsx | 18 +++++++- 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/staff/angela-bernaldez/project/app/package.json b/staff/angela-bernaldez/project/app/package.json index b833e2f04..cc07f20a2 100644 --- a/staff/angela-bernaldez/project/app/package.json +++ b/staff/angela-bernaldez/project/app/package.json @@ -17,7 +17,6 @@ "react-router": "^7.0.2", "react-router-dom": "^7.0.2", "react-scripts": "^5.0.1", - "react-select": "^5.10.0", "react-use": "^17.6.0" }, "devDependencies": { diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index 1264f5ec2..48f977e1f 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -1,6 +1,6 @@ import {useState, useEffect, useRef} from 'react' import logicWeather from '../../logic-weather' -import Select from 'react-select' +import { IconSearch } from '../icons/icons.jsx' function LocationSearchBox() { @@ -30,6 +30,7 @@ function LocationSearchBox() { value: item.display_name, fullData: item }))) + console.log(locations) } else { setLocations([]) } @@ -41,37 +42,22 @@ function LocationSearchBox() { } const handleSelect = (selectedLocation) => { - console.log('Selected location is:', selectedLocation); + console.log('Selected location is:', selectedLocation) + // llamar a la logica que lleva la nueva localizacion al back setInputValue(selectedLocation ? selectedLocation.label : '') } + // intentarlo haciendo combinando dos componentes de daisy + // usar un text input -> search box + // dropdown menu para las diferentes opciones + return ( -
- + + +
) } diff --git a/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx b/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx index b4b6f84ad..d8561a4fe 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx +++ b/staff/angela-bernaldez/project/app/src/components/icons/icons.jsx @@ -104,4 +104,20 @@ export function IconShowPassword(props) { ) -} \ No newline at end of file +} + +export function IconSearch(props) { + return ( + + + clipRule="evenodd" + + ) +} + + From a0d528f4b2688081c94d83c38507441792e184d1 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Wed, 5 Feb 2025 20:19:23 +0000 Subject: [PATCH 27/45] fix searchbar locations #251 --- .../project/api/tests/authenticate-user.sh | 2 +- .../components/Others/LocationSearchBox.jsx | 35 +++++++++++++++---- .../retrieveNominatimLocations.js | 2 -- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/staff/angela-bernaldez/project/api/tests/authenticate-user.sh b/staff/angela-bernaldez/project/api/tests/authenticate-user.sh index 98e076ca0..7b16a598f 100644 --- a/staff/angela-bernaldez/project/api/tests/authenticate-user.sh +++ b/staff/angela-bernaldez/project/api/tests/authenticate-user.sh @@ -1,3 +1,3 @@ curl -X POST http://localhost:4321/users/auth \ -H "Content-Type: application/json" \ - -d '{"email":"angelabb@gmail.com", "password": "123456789"}' -v \ No newline at end of file + -d '{"email": "angelabb@gmail.com", "password": "123456789"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index 48f977e1f..443eaef8d 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -9,8 +9,11 @@ function LocationSearchBox() { const debounceTimeout = useRef(null) // used to store timeout between different renders - const handleInputChange = (locationString) => { - setInputValue(locationString) + const handleInputChange = (event) => { + const newInputValue = event.target.value + setInputValue(newInputValue) + + console.log('locationString', newInputValue) if (debounceTimeout.current) { clearTimeout(debounceTimeout.current); @@ -18,19 +21,20 @@ function LocationSearchBox() { debounceTimeout.current = setTimeout(() => { - if (locationString.trim() === '') { + if (newInputValue.trim() === '') { setLocations([]) return } - logicWeather.retrieveNominatimLocations(locationString) + console.log('printing input value before calling api', newInputValue) + logicWeather.retrieveNominatimLocations(newInputValue) .then((locationsFound) => { + console.log(locationsFound, 'locations q me devuelve la api') if (locationsFound && locationsFound.length > 0) { setLocations(locationsFound.map((item) => ({ label: item.display_name, value: item.display_name, fullData: item }))) - console.log(locations) } else { setLocations([]) } @@ -45,6 +49,7 @@ function LocationSearchBox() { console.log('Selected location is:', selectedLocation) // llamar a la logica que lleva la nueva localizacion al back setInputValue(selectedLocation ? selectedLocation.label : '') + setLocations([]) } // intentarlo haciendo combinando dos componentes de daisy @@ -54,9 +59,27 @@ function LocationSearchBox() { return (
+
    + {locations.length > 0 && locations.map((location) => { + return
  • handleSelect(location)} + className="text-left p-2 cursor-pointer transition-colors duration-200 hover:bg-gray-200" + > + {location.label} +
  • + })} +
) } diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js index cd1becec7..9b0f738c6 100644 --- a/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js @@ -6,8 +6,6 @@ const retrieveNominatimLocations = (locationString) => { const token = sessionStorage.getItem("token") - console.log(locationString, 'printing locationString front-end logic') - return fetch(`${import.meta.env.VITE_API_URL}users/nominatim-locations/`, { method: 'POST', headers: { From 7afd5d9634e1ad92e14da7770e99d0691d9a1a2d Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Tue, 11 Feb 2025 17:52:05 +0000 Subject: [PATCH 28/45] finish location search box and render locations after adding a new one #251 --- .../project/api/data/models.js | 4 -- .../project/api/handlers/addUserLocation.js | 4 +- .../api/handlers/getAllUserLocations.js | 2 +- .../retrieveNominatimLocations.js | 3 -- .../project/api/logic/addUserLocation.js | 32 ++---------- .../project/api/logic/getAllUserLocations.js | 13 +++-- .../api/logic/getAllUserLocations.spec.js | 3 ++ .../components/Others/LocationSearchBox.jsx | 49 ++++++++++--------- .../project/app/src/logic/addUserLocation.js | 2 +- .../app/src/logic/getAllUserLocations.js | 4 +- .../src/pages/authenticatedPages/Overview.jsx | 46 ++++++++++++----- 11 files changed, 83 insertions(+), 79 deletions(-) diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js index 7ff02cb39..894a0a327 100644 --- a/staff/angela-bernaldez/project/api/data/models.js +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -17,10 +17,6 @@ const LocationSchema = new Schema({ type: Number, required: true }, - altitude: { - type: Number, - required: true - }, timeLastUpdated: { type: Date, required: true diff --git a/staff/angela-bernaldez/project/api/handlers/addUserLocation.js b/staff/angela-bernaldez/project/api/handlers/addUserLocation.js index bacfeddc2..867e24d7f 100644 --- a/staff/angela-bernaldez/project/api/handlers/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/handlers/addUserLocation.js @@ -2,11 +2,11 @@ import logic from '../logic/index.js' export default (req, res, next) => { const userId = req.id - const locationData = req.body + const { locationData } = req.body try { logic.addUserLocation(userId, locationData) - .then(() => res.status(201).send()) + .then(() => res.status(201).send()) } catch(error) { next(error) } diff --git a/staff/angela-bernaldez/project/api/handlers/getAllUserLocations.js b/staff/angela-bernaldez/project/api/handlers/getAllUserLocations.js index 68c27393d..75ea38f7d 100644 --- a/staff/angela-bernaldez/project/api/handlers/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/api/handlers/getAllUserLocations.js @@ -7,7 +7,7 @@ export default (req, res, next) => { logic.getAllUserLocations(userId) .then(favLocations => { // esta es la info que paso a donde hago la llamada del get? - res.status(200).json({ locations: favLocations }) + res.status(200).json({ favLocations: favLocations }) }) .catch(error => next(error)) } catch(error) { diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js index 24249d1b3..eefa015f3 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js @@ -11,8 +11,6 @@ export default (userId, locationString) => { const nominatim_url = `https://nominatim.openstreetmap.org/search?q=${locationString}&limit=5&format=json` - console.log(locationString, 'locationString que me esta llegando al back end') - return User.findById(userId) .then((user) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') @@ -24,7 +22,6 @@ export default (userId, locationString) => { if (!locationsFound || locationsFound.length === 0) { throw new Error('No locations found') } - console.log(locationsFound) return locationsFound }) .catch((error) => { throw new Errors.UnexpectedError(error.message) }) diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.js index 2e3b979db..c3921c34e 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.js @@ -12,7 +12,6 @@ const getOrCreateLocation = async (location, locationData) => { name: locationData.name, latitude: locationData.latitude, longitude: locationData.longitude, - altitude: locationData.altitude, timeLastUpdated: new Date(), // variables: call logic to add variables info }) @@ -23,28 +22,7 @@ const getOrCreateLocation = async (location, locationData) => { export default (id, locationData) => { // add validators - const { name, latitude, longitude, altitude } = locationData - - /* - podria quitar la funcion auxiliar - return Location.findOne({ name, latitude, longitude }) - .then((location) => { - // Si la ubicación no existe, la creamos usando Location.create - if (!location) { - return Location.create({ - name, - latitude, - longitude, - altitude, - timeLastUpdated: new Date(), - // Aquí puedes agregar lógica para otras variables adicionales si es necesario - }) - } - return location // Si la ubicación ya existe, la devolvemos tal cual - }) - .then((newLocation) => - ...) - */ + const { name, latitude, longitude } = locationData return User.findById(id) .then((user) => { @@ -60,10 +38,10 @@ export default (id, locationData) => { return user.save() } }) - .catch((error) => { - // change this to a specific type of error - console.log(error) - }) + .catch((error) => { + // change this to a specific type of error + console.log(error) + }) }) }) } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js index 1c8c6a1e2..4b2f093e8 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js @@ -1,6 +1,6 @@ import models from '../data/models.js' -const { User } = models +const { User, Location } = models export default (id) => { @@ -11,9 +11,16 @@ export default (id) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') // currently this only returns location ids // this function could potentially be modified to return all location info - // coords, altitude, lastTimeUpdates and variables + // coords, lastTimeUpdates and variables // then, only retrieve weather data again if last update was more than 1 hour ago - return user.favLocations + if (user.favLocations.length === 0) return [] + + return Location.find({ '_id': {$in: user.favLocations }}) + .then((locationsFound) => { + return locationsFound + + // need to check this works as expected + }) }) .catch((error) => { // change this to a specific type of error diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js index 1e8792126..6fd4153cf 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js @@ -14,6 +14,9 @@ describe('getAllUserLocations', () => { afterEach(() => User.deleteMany()) after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + // need to modify this test as the logic is returning location from Location + // instead of just the id + it('returns all user locations when at least one exists', () => { return bcrypt.hash('123456789', 1) diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index 443eaef8d..30c486626 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -1,8 +1,11 @@ import {useState, useEffect, useRef} from 'react' import logicWeather from '../../logic-weather' +import logic from '../../logic' import { IconSearch } from '../icons/icons.jsx' -function LocationSearchBox() { +function LocationSearchBox({ setStamp }) { + + /// ARREGLAAAR const [locations, setLocations] = useState([]) const [inputValue, setInputValue] = useState('') @@ -13,8 +16,6 @@ function LocationSearchBox() { const newInputValue = event.target.value setInputValue(newInputValue) - console.log('locationString', newInputValue) - if (debounceTimeout.current) { clearTimeout(debounceTimeout.current); } @@ -25,15 +26,14 @@ function LocationSearchBox() { setLocations([]) return } - console.log('printing input value before calling api', newInputValue) logicWeather.retrieveNominatimLocations(newInputValue) .then((locationsFound) => { - console.log(locationsFound, 'locations q me devuelve la api') if (locationsFound && locationsFound.length > 0) { setLocations(locationsFound.map((item) => ({ - label: item.display_name, - value: item.display_name, - fullData: item + display_name: item.display_name, + name: item.name, + latitude: item.lat, + longitude: item.lon }))) } else { setLocations([]) @@ -48,38 +48,39 @@ function LocationSearchBox() { const handleSelect = (selectedLocation) => { console.log('Selected location is:', selectedLocation) // llamar a la logica que lleva la nueva localizacion al back - setInputValue(selectedLocation ? selectedLocation.label : '') - setLocations([]) + return logic.addUserLocation(selectedLocation) + .then(() => { + setInputValue('') // para que se muestre vacia la barra de busqueda tras seleccionar localizacion + setLocations([]) + setStamp(Date.now()) + }) } - // intentarlo haciendo combinando dos componentes de daisy - // usar un text input -> search box - // dropdown menu para las diferentes opciones - return ( -
+
-
    - {locations.length > 0 && locations.map((location) => { - return
  • 0 && ( +
      + {locations.map((location, index) => ( +
    • handleSelect(location)} className="text-left p-2 cursor-pointer transition-colors duration-200 hover:bg-gray-200" > - {location.label} + {location.display_name}
    • - })} -
    + ))} +
+ )}
) } diff --git a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js index 26ed4da01..27cc31c33 100644 --- a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js @@ -12,7 +12,7 @@ const addUserLocation = (locationData) => { 'Content-type': 'application/json', Authorization: `Bearer ${token}` }, - body: JSON.stringify({ locationData: locationData }) + body: JSON.stringify({ locationData }) }) .then((res) => { if (res.status === 201) return diff --git a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js index 9e2393ac8..7d3c1a5e3 100644 --- a/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/app/src/logic/getAllUserLocations.js @@ -2,7 +2,7 @@ import { Errors } from 'common' const getAllUserLocations = () => { - // tengo que pasar un isUserLoggedIn o algo asi para asegurarme de que solo sea con la sesion iniciada? + const token = sessionStorage.getItem("token") return fetch(`${import.meta.env.VITE_API_URL}users/locations`, { method: 'GET', @@ -12,7 +12,7 @@ const getAllUserLocations = () => { }) .then((res) => { if (res.status === 200) return res.json() - .then(body => body.user.favLocations) + .then(body => body.favLocations) return res.json() .then(body => { const constructor = Errors[body.name] diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index c906abfdd..ff659329a 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -1,24 +1,46 @@ import LocationSearchBox from '../../components/Others/LocationSearchBox' import LocationCard from '../../components/Cards/LocationCard' -import isUserLoggedIn from '../../logic/isUserLoggedIn' +import logic from '../../logic' +import { useEffect, useState } from 'react' function Overview() { // do something here - return
- - - - -
+ // ARREGLARRRRRRRRRRRRRR + const [stamp, setStamp] = useState(Date.now()) + const [locations, setLocations] = useState([]) + + const fetchLocations = () => { + console.log('Fetching locations...') + return logic.getAllUserLocations() + .then((_locations) => { + console.log('Locations fetched:', _locations) + setLocations(_locations) + }) + .catch((error) => { + console.log('Error fetching locations:', error) + }) + } - // mirar el ejemplo en Home.jsx + useEffect(() => { + fetchLocations() + .then(() => { + }) + }, [stamp]) - // bring list of all cities for user logged in - // getAllUserLocations is what I need to call - + return
+ + {/* */} + {locations.length > 0 ? ( + locations.map((location, index) => ( + + )) + ) : ( +

No locations found

+ )} + +
- // then render one component (card for each city) } export default Overview From 495c5efed9f160e18c40dd650741cf1e5166f3c5 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Wed, 12 Feb 2025 19:42:09 +0000 Subject: [PATCH 29/45] add first steps update weather data and change some styles #251 --- .../project/api/logic-weather/index.js | 4 ++- .../retrieveNominatimLocations.js | 4 +-- .../api/logic-weather/retrieveWeatherData.js | 32 +++++++++++++++++++ .../project/api/logic-weather/test.js | 20 ++++++++++++ .../logic-weather/updateWeatherForLocation.js | 25 +++++++++++++++ staff/angela-bernaldez/project/app/index.html | 1 + .../project/app/src/index.css | 2 +- .../app/src/pages/publicPages/Landing.jsx | 4 +-- .../project/app/tailwind.config.js | 19 ++++++++--- 9 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js create mode 100644 staff/angela-bernaldez/project/api/logic-weather/test.js create mode 100644 staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js diff --git a/staff/angela-bernaldez/project/api/logic-weather/index.js b/staff/angela-bernaldez/project/api/logic-weather/index.js index 056d131e2..6f0c11f00 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/index.js +++ b/staff/angela-bernaldez/project/api/logic-weather/index.js @@ -1,5 +1,7 @@ import retrieveNominatimLocations from './retrieveNominatimLocations.js' +import retrieveWeatherData from './retrieveWeatherData.js' export default { - retrieveNominatimLocations + retrieveNominatimLocations, + retrieveWeatherData } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js index eefa015f3..e44bf3319 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js @@ -9,12 +9,12 @@ export default (userId, locationString) => { // userId is passed to make sure only registered users can use the api - const nominatim_url = `https://nominatim.openstreetmap.org/search?q=${locationString}&limit=5&format=json` + const nominatimUrl = `https://nominatim.openstreetmap.org/search?q=${locationString}&limit=5&format=json` return User.findById(userId) .then((user) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') - return fetch(nominatim_url) + return fetch(nominatimUrl) .then((response) => { if (!response.ok) throw new Error('Unable to stablish connection with Nominatim API') return response.json() diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js new file mode 100644 index 000000000..90b0020eb --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js @@ -0,0 +1,32 @@ +import models from '../data/models.js' + +const { Location, User } = models + +export default (userId, locationData) => { + + const { name, latitude, longitude } = locationData + + console.log(userId, 'user id') + console.log(typeof userId, 'type of userid') + + // add validators + const weatherUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=temperature_2m,precipitation` + + return User.findById(userId) + .then((user) => { + if (!user) throw new Errors.AuthError('User id does not belong to anyone') + return Location.findOne({name: name, latitude: latitude, longitude: longitude}) + .then((location) => { + if (!location) throw new Error('Location does not exist in the database. It needs to be added first.') + return fetch(weatherUrl) + .then((response) => { + if (!response.ok) throw new Error('Unable to stablish connection with Weather API') + return response.json() + .then((weatherData) => { + return weatherData + }) + .catch((error) => { throw new Errors.UnexpectedError(error.message) }) + }) + }) + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/test.js b/staff/angela-bernaldez/project/api/logic-weather/test.js new file mode 100644 index 000000000..d247f2f7f --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/test.js @@ -0,0 +1,20 @@ +import retrieveWeatherData from "./retrieveWeatherData.js" + + +// Marcar la función como asíncrona +async function getWeatherData() { + try { + // Esperar a que retrieveWeatherData resuelva la promesa + const weatherData = await retrieveWeatherData('678d681efc40efa6421fa89f', { name: 'Brighton', latitude: 50.8214626, longitude: -0.1400561 }); + + // Ahora puedes usar los datos + console.log(weatherData); + } catch (error) { + console.error('Error fetching weather data:', error); + } + } + + // Llamar a la función asíncrona + getWeatherData(); + + diff --git a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js new file mode 100644 index 000000000..9b782c04e --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js @@ -0,0 +1,25 @@ +import models from '../data/models.js' +import retrieveWeatherData from './' + +const { Location } = models + +export default (userId, locationData) => { + // this function is supposed to call retrieveWeatherData when needed + // only need to update/refresh weather data if timeLastUpdated was less than 15 mins ago + + // NEED TO CREATE ALL CUSTOMIZED ERRORS!!!!!!! + + return User.findById(userId) + .then((user) => { + if (!user) throw new Errors.AuthError('User id does not belong to anyone') + return retrieveWeatherData(userId, locationData) + .then((weatherData) => { + if (!weatherData) new Error('Unable to get data from Weather API') + // once data has been obtained, database needs to be updated + // need to find the location and modify it and save it + Location.findOne({name: name, latitude: latitude, longitude: longitude}) + + }) + + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/index.html b/staff/angela-bernaldez/project/app/index.html index c757095f0..61d79b97c 100644 --- a/staff/angela-bernaldez/project/app/index.html +++ b/staff/angela-bernaldez/project/app/index.html @@ -5,6 +5,7 @@ My Weather App +
diff --git a/staff/angela-bernaldez/project/app/src/index.css b/staff/angela-bernaldez/project/app/src/index.css index 243deca70..2d7787888 100644 --- a/staff/angela-bernaldez/project/app/src/index.css +++ b/staff/angela-bernaldez/project/app/src/index.css @@ -9,7 +9,7 @@ } body { - @apply bg-primary w-screen min-h-screen h-full max-w-full text-white font-mono; + @apply bg-base-100 w-screen min-h-screen h-full max-w-full text-secondary font-sans; } html { diff --git a/staff/angela-bernaldez/project/app/src/pages/publicPages/Landing.jsx b/staff/angela-bernaldez/project/app/src/pages/publicPages/Landing.jsx index 9077f8991..2116f6093 100644 --- a/staff/angela-bernaldez/project/app/src/pages/publicPages/Landing.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/publicPages/Landing.jsx @@ -13,7 +13,7 @@ function Landing() { to="/signup" target="_self" rel="next" - className="btn btn-primary btn-md" + className="btn btn-secondary btn-md" > Go to Sign Up Form @@ -21,7 +21,7 @@ function Landing() { to="/login" target="_self" rel="next" - className="btn btn-primary btn-md" + className="btn btn-secondary btn-md" > Go to Log In Form diff --git a/staff/angela-bernaldez/project/app/tailwind.config.js b/staff/angela-bernaldez/project/app/tailwind.config.js index 6c5704db2..ce700f923 100644 --- a/staff/angela-bernaldez/project/app/tailwind.config.js +++ b/staff/angela-bernaldez/project/app/tailwind.config.js @@ -33,7 +33,10 @@ module.exports = { "low-pulse": "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite", buzzing: "buzzing 2s ease-in-out infinite", }, - fontFamily: fontFamily, + fontFamily: { + ...fontFamily, + sans: ["Montserrat", "sans-serif"] + }, screens: { "3xs": { min: "320px" }, "2xs": { min: "380px" }, @@ -53,9 +56,17 @@ module.exports = { }, }, daisyui: { - themes: [ - "aqua" - ], + themes: [ + { + mytheme: { + "primary": "#B1F0F7", + "secondary": "#81BFDA", + "accent": "#F5F0CD", + "neutral": "#FADA7A", + "base-100": "#EEF5FF" + }, + }, + ], }, plugins: [require("@tailwindcss/typography"), require("daisyui")], }; From b024454cb4fc979f0bb60ce1f32b622da76c21dc Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Mon, 17 Feb 2025 17:45:59 +0000 Subject: [PATCH 30/45] add small changes & homepage new structure #251 --- .../src/components/Cards/FullDayForecast.jsx | 0 .../app/src/components/Cards/LocationCard.jsx | 2 +- .../src/components/Cards/NextDaysSummary.jsx | 0 .../src/pages/authenticatedPages/Overview.jsx | 36 ++++++++++++++----- 4 files changed, 29 insertions(+), 9 deletions(-) delete mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/FullDayForecast.jsx delete mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/NextDaysSummary.jsx diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/FullDayForecast.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/FullDayForecast.jsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx index 61cb316ed..6a793c74f 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx @@ -4,7 +4,7 @@ function LocationCard({locationName, temperature}) { // this component is to be called once for each favlocation for a specfic user return ( -
+

{locationName}

diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/NextDaysSummary.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/NextDaysSummary.jsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index ff659329a..8aa545a22 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -28,19 +28,39 @@ function Overview() { }) }, [stamp]) - return
- - {/* */} - {locations.length > 0 ? ( + return ( +
+ {/* Columna 1 en la Fila 1 */} +
+ Columna 1, Fila 1. Aqui iria la localizacion actual +
+ + {/* Columna 2 en la Fila 1 */} +
+ + {locations.length > 0 ? ( locations.map((location, index) => ( - + )) ) : ( -

No locations found

- )} +

No locations found

+ )} +
+ {/* Fila 2 (Ocupa todo el ancho, con 1/3 y 2/3) */} +
+ {/* Columna 1 (1/3 del ancho) */} +
+ Columna 1 (1/3 del ancho) +
-
+ {/* Columna 2 (2/3 del ancho) */} +
+ Columna 2 (2/3 del ancho) +
+
+
+ ) } export default Overview From f7ec843d7cd15ddec912d6a463491abb7f222e9d Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Mon, 17 Feb 2025 21:54:12 +0000 Subject: [PATCH 31/45] add current location functionality and fix minor issues #251 --- .../project/api/data/models.js | 4 ++ .../project/api/handlers/addUserLocation.js | 4 +- staff/angela-bernaldez/project/api/index.js | 7 --- .../api/logic-weather/getLocationFromIp.js | 31 +++++++++++++ .../logic-weather/getLocationFromIp.spec.js | 37 +++++++++++++++ .../project/api/logic-weather/index.js | 2 + .../retrieveNominatimLocations.js | 1 + .../project/api/logic-weather/test.js | 21 +++++---- .../project/api/logic/addUserLocation.js | 7 ++- .../project/api/logic/addUserLocation.spec.js | 15 ++++--- .../api/logic/getAllUserLocations.spec.js | 1 + .../project/api/logic/getUser.spec.js | 45 +++++++++++++++++++ .../project/api/logic/getUserLocationData.js | 17 +++++++ .../components/Cards/CurrentLocationBox.jsx | 11 +++++ .../components/Others/LocationSearchBox.jsx | 3 +- .../project/app/src/logic/getUser.js | 29 ++++++++++++ .../project/app/src/logic/index.js | 2 + .../src/pages/authenticatedPages/Overview.jsx | 7 +-- 18 files changed, 212 insertions(+), 32 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js create mode 100644 staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.spec.js create mode 100644 staff/angela-bernaldez/project/api/logic/getUserLocationData.js create mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx create mode 100644 staff/angela-bernaldez/project/app/src/logic/getUser.js diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js index 894a0a327..a09ed0760 100644 --- a/staff/angela-bernaldez/project/api/data/models.js +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -43,6 +43,10 @@ const UserSchema = new Schema({ type: String, required: true }, + currentLocation: { + type: ObjectId, + ref: 'Location' + }, favLocations: [{ type: ObjectId, ref: 'Location' diff --git a/staff/angela-bernaldez/project/api/handlers/addUserLocation.js b/staff/angela-bernaldez/project/api/handlers/addUserLocation.js index 867e24d7f..ec1170a8e 100644 --- a/staff/angela-bernaldez/project/api/handlers/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/handlers/addUserLocation.js @@ -2,10 +2,10 @@ import logic from '../logic/index.js' export default (req, res, next) => { const userId = req.id - const { locationData } = req.body + const { locationData, isCurrentLocation } = req.body try { - logic.addUserLocation(userId, locationData) + logic.addUserLocation(userId, locationData, isCurrentLocation) .then(() => res.status(201).send()) } catch(error) { next(error) diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index d8668fb2f..5eee24451 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -23,13 +23,6 @@ mongoose.connect(process.env.MONGO_URI) server.get('/users/auth', verifyToken, handlers.getUser) - // review paths here - - // da igual que toods los usaruios tengan la misma ruta - // porque entro con un otken asociado a mi usuario - // eñ id lo extrae del token - // no hace falta sacar el id en el front - // pasar el id solo lo haria si quisiera acceder a la info de otro usuario (id diferente) // x ejemplo si quisiera acceder a las localizaciones de mis amigos // desde el front lo haria accediendo a la info del usuario desde la base de datos diff --git a/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js b/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js new file mode 100644 index 000000000..2a2cf2947 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js @@ -0,0 +1,31 @@ +import models from '../data/models.js' +import { Errors } from 'common' + +const { User } = models + +export default (userId) => { + const ipApiUrl = 'http://ip-api.com/json' + + return User.findById(userId) + .then((user) => { + if (!user) throw new Errors.AuthError('User id does not belong to anyone') + return fetch(ipApiUrl) + .then((response) => { + if (!response.ok) throw new Error('Unable to stablish connection with IP API to obtain current location') + return response.json() + .then((data) => { + if (data.status === 'success') { + // not calling the logic to add that location to user.currentLocation here + // as it is prefered to have different functions performing different tasks + const locationDataFromIp = { + name: `${data.city}, ${data.regionName}, ${data.country}`, + latitude: data.lat, + longitude: data.lon + } + return locationDataFromIp + } + }) + .catch((error) => { throw new Errors.UnexpectedError(error.message) }) + }) + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.spec.js b/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.spec.js new file mode 100644 index 000000000..a4dfdf790 --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.spec.js @@ -0,0 +1,37 @@ +import 'dotenv/config' +import getLocationFromIp from './getLocationFromIp.js' +import { describe, it } from 'mocha' +import { expect } from 'chai' +import models from '../data/models.js' +import mongoose from 'mongoose' +import bcrypt from 'bcrypt' + +const { User } = models + +describe('getLocationFromIp', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + it('retrieve location data when user makes a request', () => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'nametest', + email: 'test@mail.com', + password: cryptPassword + } + return User.create(user) + .then((user) => { + const userId = user._id.toString() + return getLocationFromIp(userId) + .then((locationDataFromIp) => { + expect(locationDataFromIp).to.have.property('name'), + expect(locationDataFromIp).to.have.property('latitude'), + expect(locationDataFromIp).to.have.property('longitude') + }) + }) + }) + }) +}) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/index.js b/staff/angela-bernaldez/project/api/logic-weather/index.js index 6f0c11f00..d3b0b464d 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/index.js +++ b/staff/angela-bernaldez/project/api/logic-weather/index.js @@ -1,7 +1,9 @@ +import getLocationFromIp from './getLocationFromIp.js' import retrieveNominatimLocations from './retrieveNominatimLocations.js' import retrieveWeatherData from './retrieveWeatherData.js' export default { + getLocationFromIp, retrieveNominatimLocations, retrieveWeatherData } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js index e44bf3319..10a347399 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.js @@ -22,6 +22,7 @@ export default (userId, locationString) => { if (!locationsFound || locationsFound.length === 0) { throw new Error('No locations found') } + console.log(locationsFound) return locationsFound }) .catch((error) => { throw new Errors.UnexpectedError(error.message) }) diff --git a/staff/angela-bernaldez/project/api/logic-weather/test.js b/staff/angela-bernaldez/project/api/logic-weather/test.js index d247f2f7f..1daba1284 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/test.js +++ b/staff/angela-bernaldez/project/api/logic-weather/test.js @@ -4,17 +4,16 @@ import retrieveWeatherData from "./retrieveWeatherData.js" // Marcar la función como asíncrona async function getWeatherData() { try { - // Esperar a que retrieveWeatherData resuelva la promesa - const weatherData = await retrieveWeatherData('678d681efc40efa6421fa89f', { name: 'Brighton', latitude: 50.8214626, longitude: -0.1400561 }); - - // Ahora puedes usar los datos - console.log(weatherData); + // Esperar a que retrieveWeatherData resuelva la promesa + const weatherData = await retrieveWeatherData('678d681efc40efa6421fa89f', { name: 'Brighton', latitude: 50.8214626, longitude: -0.1400561 }); + + // Ahora puedes usar los datos + console.log(weatherData); } catch (error) { - console.error('Error fetching weather data:', error); + console.error('Error fetching weather data:', error); } - } - - // Llamar a la función asíncrona - getWeatherData(); - +} +// Llamar a la función asíncrona +getWeatherData(); + \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.js index c3921c34e..0f64d0aa9 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.js @@ -19,7 +19,7 @@ const getOrCreateLocation = async (location, locationData) => { return newLocation } -export default (id, locationData) => { +export default (id, locationData, isCurrentLocation = false) => { // add validators const { name, latitude, longitude } = locationData @@ -31,12 +31,15 @@ export default (id, locationData) => { .then((location) => { return getOrCreateLocation(location, locationData) .then((newLocation) => { + // if adding current location, save it or overwrite exisiting one + if (isCurrentLocation) user.currentLocation = newLocation._id + const foundLocation = user.favLocations.find((location) => location._id === newLocation._id) if (!foundLocation) { user.favLocations.push(newLocation._id) - return user.save() } + return user.save() }) .catch((error) => { // change this to a specific type of error diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js index c120f6f8c..f5bc7c197 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js @@ -26,8 +26,13 @@ describe('addUserLocation', () => { return User.create(user) .then((user) => { const userId = user._id.toString() - const locationData = { name: 'Brighton', latitude: 51, longitude: -0.5, altitude: 40 } - return addUserLocation(userId, locationData) + const locationData = { + name: 'Brighton', + latitude: 51, + longitude: -0.5, + timeLastUpdated: new Date()} + const isCurrentLocation = false + return addUserLocation(userId, locationData, isCurrentLocation) .then((userModified) => { return Location.findOne({ name: 'Brighton', latitude: 51, longitude: -0.5}) .then((newLocation) => { @@ -35,7 +40,6 @@ describe('addUserLocation', () => { expect(newLocation.name).to.equal('Brighton') expect(newLocation.latitude).to.equal(51) expect(newLocation.longitude).to.equal(-0.5) - expect(newLocation.altitude).to.equal(40) }) }) }) @@ -57,10 +61,10 @@ describe('addUserLocation', () => { name: 'Brighton', latitude: 51, longitude: -0.5, - altitude: 40, timeLastUpdated: new Date() } - return Location.create(locationData) + const isCurrentLocation = false + return Location.create(locationData, isCurrentLocation) .then((newLocation) => { return addUserLocation(userId, locationData) .then((userModified) => { @@ -68,7 +72,6 @@ describe('addUserLocation', () => { expect(newLocation.name).to.equal('Brighton') expect(newLocation.latitude).to.equal(51) expect(newLocation.longitude).to.equal(-0.5) - expect(newLocation.altitude).to.equal(40) }) }) }) diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js index 6fd4153cf..b2236da4d 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js @@ -28,6 +28,7 @@ describe('getAllUserLocations', () => { favLocations: [ new mongoose.Types.ObjectId(), new mongoose.Types.ObjectId()] + // need to add currentLocation } return User.create(user) .then((user) => { diff --git a/staff/angela-bernaldez/project/api/logic/getUser.spec.js b/staff/angela-bernaldez/project/api/logic/getUser.spec.js index e69de29bb..d6635ab7c 100644 --- a/staff/angela-bernaldez/project/api/logic/getUser.spec.js +++ b/staff/angela-bernaldez/project/api/logic/getUser.spec.js @@ -0,0 +1,45 @@ +import bcrypt from 'bcrypt' +import 'dotenv/config' +import getUser from './getUser.js' +import { describe, it } from 'mocha' +import models from '../data/models.js' +import mongoose, { Types } from 'mongoose' +import { expect } from 'chai' + +const { User } = models +const { ObjectId } = Types + +describe('getAllUserLocations', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + it('returns all user locations when at least one exists', () => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'nametest', + email: 'test@mail.com', + password: cryptPassword, + favLocations: [ + new mongoose.Types.ObjectId(), + new mongoose.Types.ObjectId()], + currentLocation: new mongoose.Types.ObjectId() + } + return User.create(user) + .then((user) => { + const userId = user._id.toString() + return getUser(userId) + .then((user) => { + expect(user.username).to.equal('nametest') + expect(user.email).to.equal('test@mail.com') + expect(user._id).to.be.instanceOf(ObjectId) + expect(user.favLocations.length).to.equal(2) + expect(user.currentLocation).to.be.instanceOf(ObjectId) + + }) + }) + }) + }) +}) \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic/getUserLocationData.js b/staff/angela-bernaldez/project/api/logic/getUserLocationData.js new file mode 100644 index 000000000..570596d4e --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic/getUserLocationData.js @@ -0,0 +1,17 @@ +import models from '../data/models.js' + +const { User, Location } = models + +export default(userId, locationId) => { + + return User.findById(userId) + .then((user) => { + if (!user) throw new Errors.AuthError('User id does not belong to anyone') + return Location.findById(locationId) + .then((locationFound) => { + if (!locationFound) throw new Errors.ExistenceError('Location does not exist') + + return locationFound + }) + }) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx new file mode 100644 index 000000000..00957e56b --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx @@ -0,0 +1,11 @@ +function CurrentLocationBox({ currentLocation }) { + // esto sera una box que contenga bonito el tiempo para current loc + // necesitare pasarle la currentLocation para ese user + // y aqui traerme el weatherData para current location llamando a la logica + + return ( +
+ ) +} + +export default CurrentLocationBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index 30c486626..accb5b03e 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -48,7 +48,8 @@ function LocationSearchBox({ setStamp }) { const handleSelect = (selectedLocation) => { console.log('Selected location is:', selectedLocation) // llamar a la logica que lleva la nueva localizacion al back - return logic.addUserLocation(selectedLocation) + const isCurrentLocation = false + return logic.addUserLocation(selectedLocation, isCurrentLocation) .then(() => { setInputValue('') // para que se muestre vacia la barra de busqueda tras seleccionar localizacion setLocations([]) diff --git a/staff/angela-bernaldez/project/app/src/logic/getUser.js b/staff/angela-bernaldez/project/app/src/logic/getUser.js new file mode 100644 index 000000000..e0aece362 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic/getUser.js @@ -0,0 +1,29 @@ +import { Errors } from 'common' + +const getUser = () => { + + const token = sessionStorage.getItem("token") + + return fetch(`${import.meta.env.VITE_API_URL}users/auth`, { + method: 'GET', + headers: { + Authorization: `Bearer ${token}` + }, + }) + .then((res) => { + if (res.status === 200) return res.json() + .then(body => body) + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) + }) + .catch((error) => { + if (error instanceof Errors.BadRequestError) + throw new Errors.ServerError("Server in not connected") + throw error + }) +} + +export default getUser \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic/index.js b/staff/angela-bernaldez/project/app/src/logic/index.js index f083b2643..0ebe22e1f 100644 --- a/staff/angela-bernaldez/project/app/src/logic/index.js +++ b/staff/angela-bernaldez/project/app/src/logic/index.js @@ -1,6 +1,7 @@ import addUserLocation from './addUserLocation.js' import authenticateUser from './authenticateUser.js' import getAllUserLocations from './getAllUserLocations.js' +import getUser from './getUser.js' import isUserLoggedIn from './isUserLoggedIn.js' import registerUser from './registerUser.js' @@ -8,6 +9,7 @@ export default { addUserLocation, authenticateUser, getAllUserLocations, + getUser, isUserLoggedIn, registerUser } diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index 8aa545a22..6d07238a6 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -2,11 +2,10 @@ import LocationSearchBox from '../../components/Others/LocationSearchBox' import LocationCard from '../../components/Cards/LocationCard' import logic from '../../logic' import { useEffect, useState } from 'react' +import { useParams } from "react-router" function Overview() { - // do something here - - // ARREGLARRRRRRRRRRRRRR + const [stamp, setStamp] = useState(Date.now()) const [locations, setLocations] = useState([]) @@ -28,6 +27,8 @@ function Overview() { }) }, [stamp]) + const usuario = logic.getUser() + return (
{/* Columna 1 en la Fila 1 */} From 25522df57aaae6baa9368d630862217050beda32 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Tue, 18 Feb 2025 19:16:15 +0000 Subject: [PATCH 32/45] continue adding current location functionality + fix minor issues #251 --- .../api/handlers-weather/getLocationFromIp.js | 16 ++++++++++ .../project/api/handlers-weather/index.js | 2 ++ staff/angela-bernaldez/project/api/index.js | 2 ++ .../api/logic-weather/getLocationFromIp.js | 4 +-- .../{ => tests}/getLocationFromIp.spec.js | 4 +-- .../retrieveNominatimLocations.spec.js | 4 +-- .../tests/updateWeatherForLocation.js | 0 .../logic/{ => tests}/addUserLocation.spec.js | 11 +++++-- .../{ => tests}/authenticateUser.spec.js | 4 +-- .../api/logic/{ => tests}/deleteUser.spec.js | 4 +-- .../{ => tests}/getAllUserLocations.spec.js | 4 +-- .../api/logic/{ => tests}/getUser.spec.js | 4 +-- .../logic/tests/getUserLocationData.spec.js | 0 .../logic/{ => tests}/registerUser.spec.js | 4 +-- .../project/api/tests/get-location-from-ip.sh | 2 ++ .../api/tests/retrieve-nominatim-location.sh | 5 ++-- .../components/Cards/CurrentLocationBox.jsx | 5 +++- .../src/logic-weather/getLocationFromIp.js | 30 +++++++++++++++++++ .../project/app/src/logic-weather/index.js | 2 ++ .../src/pages/authenticatedPages/Overview.jsx | 8 +++-- 20 files changed, 92 insertions(+), 23 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers-weather/getLocationFromIp.js rename staff/angela-bernaldez/project/api/logic-weather/{ => tests}/getLocationFromIp.spec.js (93%) rename staff/angela-bernaldez/project/api/logic-weather/{ => tests}/retrieveNominatimLocations.spec.js (92%) create mode 100644 staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.js rename staff/angela-bernaldez/project/api/logic/{ => tests}/addUserLocation.spec.js (91%) rename staff/angela-bernaldez/project/api/logic/{ => tests}/authenticateUser.spec.js (94%) rename staff/angela-bernaldez/project/api/logic/{ => tests}/deleteUser.spec.js (93%) rename staff/angela-bernaldez/project/api/logic/{ => tests}/getAllUserLocations.spec.js (93%) rename staff/angela-bernaldez/project/api/logic/{ => tests}/getUser.spec.js (95%) create mode 100644 staff/angela-bernaldez/project/api/logic/tests/getUserLocationData.spec.js rename staff/angela-bernaldez/project/api/logic/{ => tests}/registerUser.spec.js (93%) create mode 100644 staff/angela-bernaldez/project/api/tests/get-location-from-ip.sh create mode 100644 staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js diff --git a/staff/angela-bernaldez/project/api/handlers-weather/getLocationFromIp.js b/staff/angela-bernaldez/project/api/handlers-weather/getLocationFromIp.js new file mode 100644 index 000000000..ce852b0c1 --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers-weather/getLocationFromIp.js @@ -0,0 +1,16 @@ +import logicWeather from '../logic-weather/index.js' + +export default (req, res, next) => { + + const userId = req.id + + try { + logicWeather.getLocationFromIp(userId) + .then((currentLocation) => { + console.log(currentLocation) + res.status(200).json({ currentLocation }) + }) + } catch(error) { + next(error) + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers-weather/index.js b/staff/angela-bernaldez/project/api/handlers-weather/index.js index 056d131e2..909f57adf 100644 --- a/staff/angela-bernaldez/project/api/handlers-weather/index.js +++ b/staff/angela-bernaldez/project/api/handlers-weather/index.js @@ -1,5 +1,7 @@ +import getLocationFromIp from './getLocationFromIp.js' import retrieveNominatimLocations from './retrieveNominatimLocations.js' export default { + getLocationFromIp, retrieveNominatimLocations } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index 5eee24451..fa5540a0f 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -34,6 +34,8 @@ mongoose.connect(process.env.MONGO_URI) server.post('/users/nominatim-locations', verifyToken, jsonBodyParser, handlersWeather.retrieveNominatimLocations) + server.post('/users/current-location', verifyToken, jsonBodyParser, handlersWeather.getLocationFromIp) + server.use(errorHandler) server.listen(process.env.PORT, () => { diff --git a/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js b/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js index 2a2cf2947..8ec80cfcc 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js +++ b/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js @@ -17,12 +17,12 @@ export default (userId) => { if (data.status === 'success') { // not calling the logic to add that location to user.currentLocation here // as it is prefered to have different functions performing different tasks - const locationDataFromIp = { + const currentLocation = { name: `${data.city}, ${data.regionName}, ${data.country}`, latitude: data.lat, longitude: data.lon } - return locationDataFromIp + return currentLocation } }) .catch((error) => { throw new Errors.UnexpectedError(error.message) }) diff --git a/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.spec.js b/staff/angela-bernaldez/project/api/logic-weather/tests/getLocationFromIp.spec.js similarity index 93% rename from staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.spec.js rename to staff/angela-bernaldez/project/api/logic-weather/tests/getLocationFromIp.spec.js index a4dfdf790..3350c7416 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.spec.js +++ b/staff/angela-bernaldez/project/api/logic-weather/tests/getLocationFromIp.spec.js @@ -1,8 +1,8 @@ import 'dotenv/config' -import getLocationFromIp from './getLocationFromIp.js' +import getLocationFromIp from '../getLocationFromIp.js' import { describe, it } from 'mocha' import { expect } from 'chai' -import models from '../data/models.js' +import models from '../../data/models.js' import mongoose from 'mongoose' import bcrypt from 'bcrypt' diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js b/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveNominatimLocations.spec.js similarity index 92% rename from staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js rename to staff/angela-bernaldez/project/api/logic-weather/tests/retrieveNominatimLocations.spec.js index f07f7d9ff..b56d0f901 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveNominatimLocations.spec.js +++ b/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveNominatimLocations.spec.js @@ -1,8 +1,8 @@ import 'dotenv/config' -import retrieveNominatimLocations from './retrieveNominatimLocations.js' +import retrieveNominatimLocations from '../retrieveNominatimLocations.js' import { describe, it } from 'mocha' import { expect } from 'chai' -import models from '../data/models.js' +import models from '../../data/models.js' import mongoose from 'mongoose' import bcrypt from 'bcrypt' diff --git a/staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.js new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js b/staff/angela-bernaldez/project/api/logic/tests/addUserLocation.spec.js similarity index 91% rename from staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js rename to staff/angela-bernaldez/project/api/logic/tests/addUserLocation.spec.js index f5bc7c197..7ad9ae78a 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.spec.js +++ b/staff/angela-bernaldez/project/api/logic/tests/addUserLocation.spec.js @@ -1,7 +1,7 @@ import 'dotenv/config' -import addUserLocation from './addUserLocation.js' +import addUserLocation from '../addUserLocation.js' import { describe, it } from 'mocha' -import models from '../data/models.js' +import models from '../../data/models.js' import mongoose from 'mongoose' import bcrypt from 'bcrypt' import { expect } from 'chai' @@ -10,6 +10,13 @@ const { User, Location } = models describe('addUserLocation', () => { + // BEFORE EACH CREAR USUARIO Y LOCATION SI LO NECESITO + // Y ASI NO TENGO QUE CREARLO EN CADA TEST INDIVIDUAL + // ANTES DE CADA TEST SE CREA + // Y CON EL AFTEREACH SE BORRA + + // CREATE ANOTHER FOLDER INSIDE LOGIC FOR TESTS + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) afterEach(() => User.deleteMany()) afterEach(() => Location.deleteMany()) diff --git a/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js b/staff/angela-bernaldez/project/api/logic/tests/authenticateUser.spec.js similarity index 94% rename from staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js rename to staff/angela-bernaldez/project/api/logic/tests/authenticateUser.spec.js index 82b1fa1f9..c5ab31727 100644 --- a/staff/angela-bernaldez/project/api/logic/authenticateUser.spec.js +++ b/staff/angela-bernaldez/project/api/logic/tests/authenticateUser.spec.js @@ -1,7 +1,7 @@ import 'dotenv/config' -import authenticateUser from './authenticateUser.js' +import authenticateUser from '../authenticateUser.js' import { describe, it } from 'mocha' -import models from '../data/models.js' +import models from '../../data/models.js' import mongoose from 'mongoose' import bcrypt from 'bcrypt' import { expect } from 'chai' diff --git a/staff/angela-bernaldez/project/api/logic/deleteUser.spec.js b/staff/angela-bernaldez/project/api/logic/tests/deleteUser.spec.js similarity index 93% rename from staff/angela-bernaldez/project/api/logic/deleteUser.spec.js rename to staff/angela-bernaldez/project/api/logic/tests/deleteUser.spec.js index b35a323bf..b17a76caf 100644 --- a/staff/angela-bernaldez/project/api/logic/deleteUser.spec.js +++ b/staff/angela-bernaldez/project/api/logic/tests/deleteUser.spec.js @@ -1,7 +1,7 @@ import 'dotenv/config' -import deleteUser from './deleteUser.js' +import deleteUser from '../deleteUser.js' import { describe, it } from 'mocha' -import models from '../data/models.js' +import models from '../../data/models.js' import mongoose from 'mongoose' import bcrypt from 'bcrypt' import { expect } from 'chai' diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js b/staff/angela-bernaldez/project/api/logic/tests/getAllUserLocations.spec.js similarity index 93% rename from staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js rename to staff/angela-bernaldez/project/api/logic/tests/getAllUserLocations.spec.js index b2236da4d..6ec6b4608 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.spec.js +++ b/staff/angela-bernaldez/project/api/logic/tests/getAllUserLocations.spec.js @@ -1,7 +1,7 @@ import 'dotenv/config' -import getAllUserLocations from './getAllUserLocations.js' +import getAllUserLocations from '../getAllUserLocations.js' import { describe, it } from 'mocha' -import models from '../data/models.js' +import models from '../../data/models.js' import mongoose from 'mongoose' import bcrypt from 'bcrypt' import { expect } from 'chai' diff --git a/staff/angela-bernaldez/project/api/logic/getUser.spec.js b/staff/angela-bernaldez/project/api/logic/tests/getUser.spec.js similarity index 95% rename from staff/angela-bernaldez/project/api/logic/getUser.spec.js rename to staff/angela-bernaldez/project/api/logic/tests/getUser.spec.js index d6635ab7c..a70e0d044 100644 --- a/staff/angela-bernaldez/project/api/logic/getUser.spec.js +++ b/staff/angela-bernaldez/project/api/logic/tests/getUser.spec.js @@ -1,8 +1,8 @@ import bcrypt from 'bcrypt' import 'dotenv/config' -import getUser from './getUser.js' +import getUser from '../getUser.js' import { describe, it } from 'mocha' -import models from '../data/models.js' +import models from '../../data/models.js' import mongoose, { Types } from 'mongoose' import { expect } from 'chai' diff --git a/staff/angela-bernaldez/project/api/logic/tests/getUserLocationData.spec.js b/staff/angela-bernaldez/project/api/logic/tests/getUserLocationData.spec.js new file mode 100644 index 000000000..e69de29bb diff --git a/staff/angela-bernaldez/project/api/logic/registerUser.spec.js b/staff/angela-bernaldez/project/api/logic/tests/registerUser.spec.js similarity index 93% rename from staff/angela-bernaldez/project/api/logic/registerUser.spec.js rename to staff/angela-bernaldez/project/api/logic/tests/registerUser.spec.js index 63314efe6..2ee37efd7 100644 --- a/staff/angela-bernaldez/project/api/logic/registerUser.spec.js +++ b/staff/angela-bernaldez/project/api/logic/tests/registerUser.spec.js @@ -1,7 +1,7 @@ import 'dotenv/config' -import registerUser from './registerUser.js' +import registerUser from '../registerUser.js' import { describe, it } from 'mocha' -import models from '../data/models.js' +import models from '../../data/models.js' import mongoose, { Types } from 'mongoose' import { expect } from 'chai' diff --git a/staff/angela-bernaldez/project/api/tests/get-location-from-ip.sh b/staff/angela-bernaldez/project/api/tests/get-location-from-ip.sh new file mode 100644 index 000000000..86794a293 --- /dev/null +++ b/staff/angela-bernaldez/project/api/tests/get-location-from-ip.sh @@ -0,0 +1,2 @@ +curl -X POST http://localhost:4321/users/current-location \ + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OGQ2ODFlZmM0MGVmYTY0MjFmYTg5ZiIsImlhdCI6MTczOTg5ODU3M30.Kloh4spQ7sKnVh1N9YUewepPLH08VausQ823354vNrE" -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/retrieve-nominatim-location.sh b/staff/angela-bernaldez/project/api/tests/retrieve-nominatim-location.sh index 08665fa0e..6d995757f 100644 --- a/staff/angela-bernaldez/project/api/tests/retrieve-nominatim-location.sh +++ b/staff/angela-bernaldez/project/api/tests/retrieve-nominatim-location.sh @@ -1,3 +1,4 @@ -curl -X GET http://localhost:4321/users/nominatim-locations/ \ +curl -X POST http://localhost:4321/users/nominatim-locations/ \ + -H "Content-Type: application/json" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OWJiZmY2Mjk4NThkNDVjYmI3MTM4OCIsImlhdCI6MTczODI2MDUxM30.fJFw6iT77ZzwxZUCLwcTvYo-IjNHIEjbC8TzSoJdix8" \ - -H "locationString: Brighton" -v \ No newline at end of file + -d '{"locationString": "Brighton"}' -v \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx index 00957e56b..35f6e5622 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx @@ -1,8 +1,11 @@ -function CurrentLocationBox({ currentLocation }) { +function CurrentLocationBox() { // esto sera una box que contenga bonito el tiempo para current loc // necesitare pasarle la currentLocation para ese user // y aqui traerme el weatherData para current location llamando a la logica + + // me traigo currentLocation + return (
) diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js b/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js new file mode 100644 index 000000000..48a1103d5 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js @@ -0,0 +1,30 @@ +import { Errors } from 'common' + +const getLocationFromIp = () => { + + const token = sessionStorage.getItem("token") + + return fetch(`${import.meta.env.VITE_API_URL}users/current-location/`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}` + }, + body: JSON.stringify({ currentLocation: currentLocation }) + }) + .then((res) => { + if (res.status === 200) return res.json() + .then(body => body.currentLocation) + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) + }) + .catch((error) => { + if (error instanceof Errors.BadRequestError) + throw new Errors.ServerError("Server in not connected") + throw error + }) +} + +export default getLocationFromIp \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/index.js b/staff/angela-bernaldez/project/app/src/logic-weather/index.js index 056d131e2..909f57adf 100644 --- a/staff/angela-bernaldez/project/app/src/logic-weather/index.js +++ b/staff/angela-bernaldez/project/app/src/logic-weather/index.js @@ -1,5 +1,7 @@ +import getLocationFromIp from './getLocationFromIp.js' import retrieveNominatimLocations from './retrieveNominatimLocations.js' export default { + getLocationFromIp, retrieveNominatimLocations } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index 6d07238a6..4d98691d3 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -1,6 +1,7 @@ import LocationSearchBox from '../../components/Others/LocationSearchBox' import LocationCard from '../../components/Cards/LocationCard' import logic from '../../logic' +import logicWeather from '../../logic-weather' import { useEffect, useState } from 'react' import { useParams } from "react-router" @@ -21,14 +22,17 @@ function Overview() { }) } + const fetchCurrentLocation = () => { + console.log('Fetching current location...') + // call getCurrentLocation + } + useEffect(() => { fetchLocations() .then(() => { }) }, [stamp]) - const usuario = logic.getUser() - return (
{/* Columna 1 en la Fila 1 */} From beb747ad569477c9d7e56996355a355aa91eef60 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Wed, 19 Feb 2025 18:03:47 +0000 Subject: [PATCH 33/45] add bring current location to front end #251 --- .../logic-weather/updateWeatherForLocation.js | 2 ++ .../src/logic-weather/getLocationFromIp.js | 3 +- .../project/app/src/logic/addUserLocation.js | 4 +-- .../src/pages/authenticatedPages/Overview.jsx | 32 ++++++++++++++++--- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js index 9b782c04e..fc47ebfa5 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js +++ b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js @@ -12,6 +12,8 @@ export default (userId, locationData) => { return User.findById(userId) .then((user) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') + // comprobar que esa loc existe para ese usuario + return retrieveWeatherData(userId, locationData) .then((weatherData) => { if (!weatherData) new Error('Unable to get data from Weather API') diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js b/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js index 48a1103d5..e38e59aae 100644 --- a/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js +++ b/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js @@ -8,8 +8,7 @@ const getLocationFromIp = () => { method: 'POST', headers: { Authorization: `Bearer ${token}` - }, - body: JSON.stringify({ currentLocation: currentLocation }) + } }) .then((res) => { if (res.status === 200) return res.json() diff --git a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js index 27cc31c33..09658f32a 100644 --- a/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/app/src/logic/addUserLocation.js @@ -1,6 +1,6 @@ import { Errors } from 'common' -const addUserLocation = (locationData) => { +const addUserLocation = (locationData, isCurrentLocation = false) => { // include validators const token = sessionStorage.getItem("token") @@ -12,7 +12,7 @@ const addUserLocation = (locationData) => { 'Content-type': 'application/json', Authorization: `Bearer ${token}` }, - body: JSON.stringify({ locationData }) + body: JSON.stringify({ locationData, isCurrentLocation }) }) .then((res) => { if (res.status === 201) return diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index 4d98691d3..6f3ee8a9e 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -9,12 +9,11 @@ function Overview() { const [stamp, setStamp] = useState(Date.now()) const [locations, setLocations] = useState([]) + const [currentLocation, setCurrentLocation] = useState(null) const fetchLocations = () => { - console.log('Fetching locations...') return logic.getAllUserLocations() .then((_locations) => { - console.log('Locations fetched:', _locations) setLocations(_locations) }) .catch((error) => { @@ -23,10 +22,25 @@ function Overview() { } const fetchCurrentLocation = () => { - console.log('Fetching current location...') - // call getCurrentLocation + return logicWeather.getLocationFromIp() + .then((currentLocation) => { + return logic.addUserLocation(currentLocation, true) + .then(() => { + setCurrentLocation(currentLocation) + }) + .catch((error) => { + // IMPROVE THIS ERROR LATER + console.error('Error adding user current location', error) + }) + }) } + useEffect(() => { + fetchCurrentLocation() + .then(() => { + }) + }, []) + useEffect(() => { fetchLocations() .then(() => { @@ -37,7 +51,15 @@ function Overview() {
{/* Columna 1 en la Fila 1 */}
- Columna 1, Fila 1. Aqui iria la localizacion actual + Columna 1, Fila 1. Aqui iria la localizacion actual, que es + {currentLocation ? + (
+

{currentLocation.name}

+

Latitude: {currentLocation.latitude}

+

Longitude: {currentLocation.longitude}

+
) : + (

Getting current location...

) + }
{/* Columna 2 en la Fila 1 */} From 47fc6b87c285ce467c67e0bdc113220562ff2d7d Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Wed, 19 Feb 2025 21:55:08 +0000 Subject: [PATCH 34/45] finish retrieve weather data and continue implementing logic to update weather for a location #251 --- .../project/api/data/models.js | 7 ++- .../api/logic-weather/retrieveWeatherData.js | 9 ++-- .../project/api/logic-weather/test.js | 19 -------- .../tests/retrieveWeatherData.spec.js | 45 +++++++++++++++++++ ...on.js => updateWeatherForLocation.spec.js} | 0 .../logic-weather/updateWeatherForLocation.js | 26 ++++++----- .../angela-bernaldez/project/api/package.json | 2 +- 7 files changed, 68 insertions(+), 40 deletions(-) delete mode 100644 staff/angela-bernaldez/project/api/logic-weather/test.js create mode 100644 staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js rename staff/angela-bernaldez/project/api/logic-weather/tests/{updateWeatherForLocation.js => updateWeatherForLocation.spec.js} (100%) diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js index a09ed0760..3727ae41d 100644 --- a/staff/angela-bernaldez/project/api/data/models.js +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -21,10 +21,9 @@ const LocationSchema = new Schema({ type: Date, required: true }, - variables: [{ - precipitation: [Number], - temperature: [Number] - }] + current: [{ + }], + forecast: [] }) const Location = mongoose.model('Location', LocationSchema) diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js index 90b0020eb..ec48c5649 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js @@ -5,12 +5,11 @@ const { Location, User } = models export default (userId, locationData) => { const { name, latitude, longitude } = locationData + // add validators - console.log(userId, 'user id') - console.log(typeof userId, 'type of userid') + console.log(userId) - // add validators - const weatherUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=temperature_2m,precipitation` + const weatherUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,relative_humidity_2m,is_day,precipitation,weather_code&hourly=temperature_2m,relative_humidity_2m,precipitation,weather_code,is_day` return User.findById(userId) .then((user) => { @@ -28,5 +27,5 @@ export default (userId, locationData) => { .catch((error) => { throw new Errors.UnexpectedError(error.message) }) }) }) - }) + }) } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/test.js b/staff/angela-bernaldez/project/api/logic-weather/test.js deleted file mode 100644 index 1daba1284..000000000 --- a/staff/angela-bernaldez/project/api/logic-weather/test.js +++ /dev/null @@ -1,19 +0,0 @@ -import retrieveWeatherData from "./retrieveWeatherData.js" - - -// Marcar la función como asíncrona -async function getWeatherData() { - try { - // Esperar a que retrieveWeatherData resuelva la promesa - const weatherData = await retrieveWeatherData('678d681efc40efa6421fa89f', { name: 'Brighton', latitude: 50.8214626, longitude: -0.1400561 }); - - // Ahora puedes usar los datos - console.log(weatherData); - } catch (error) { - console.error('Error fetching weather data:', error); - } -} - -// Llamar a la función asíncrona -getWeatherData(); - \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js b/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js new file mode 100644 index 000000000..653ed887b --- /dev/null +++ b/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js @@ -0,0 +1,45 @@ +import 'dotenv/config' +import retrieveWeatherData from '../retrieveWeatherData.js' +import { describe, it } from 'mocha' +import { expect } from 'chai' +import models from '../../data/models.js' +import mongoose from 'mongoose' +import bcrypt from 'bcrypt' + +const { Location, User } = models + +describe('retrieveWeatherData', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + afterEach(() => Location.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + it('retrieve weather data', () => { + const location = { + name: 'Brighton', + latitude: 50.1245, + longitude: -0.154, + timeLastUpdated: Date.now() + } + return Location.create(location) + .then((location) => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'nametest', + email: 'test@mail.com', + password: cryptPassword, + currentLocation: location._id + } + return User.create(user) + .then((user) => { + return retrieveWeatherData(user._id, location) + .then((weatherData) => { + console.log(weatherData.current, 'imprimiendo weather data aqui en el test') + }) + }) + }) + }) + }) +}) diff --git a/staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.spec.js similarity index 100% rename from staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.js rename to staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.spec.js diff --git a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js index fc47ebfa5..6e5682810 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js +++ b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js @@ -1,7 +1,7 @@ import models from '../data/models.js' -import retrieveWeatherData from './' +import retrieveWeatherData from './retrieveWeatherData.js' -const { Location } = models +const { User, Location } = models export default (userId, locationData) => { // this function is supposed to call retrieveWeatherData when needed @@ -13,15 +13,19 @@ export default (userId, locationData) => { .then((user) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') // comprobar que esa loc existe para ese usuario - - return retrieveWeatherData(userId, locationData) - .then((weatherData) => { - if (!weatherData) new Error('Unable to get data from Weather API') - // once data has been obtained, database needs to be updated - // need to find the location and modify it and save it - Location.findOne({name: name, latitude: latitude, longitude: longitude}) - + return Location.findOne({name: locationData.name, latitude: locationData.latitude, longitude: locationData.longitude}) + .then((location) => { + // comprobar que loc id esta en user.favlocs o user.current + const isUserLoc = user.favLocations.some(favLoc => favLoc._id === location._id) || (user.currentLocation._id === location._id) + if (!isUserLoc) new Error('User does not have the requested location to fetch weather data') + return retrieveWeatherData(userId, locationData) + .then((weatherData) => { + if (!weatherData) new Error('Unable to get data from Weather API') + // update location + console.log('need to update locations') + // once data has been obtained, database needs to be updated + // need to find the location and modify it and save it + }) }) - }) } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/package.json b/staff/angela-bernaldez/project/api/package.json index 5de8a8428..afbe7407b 100644 --- a/staff/angela-bernaldez/project/api/package.json +++ b/staff/angela-bernaldez/project/api/package.json @@ -6,7 +6,7 @@ "main": "index.js", "scripts": { "start": "node index.js", - "test": "mocha --timeout 50000 ./logic/*.spec.js" + "test": "mocha --timeout 50000 ./logic/tests/*.spec.js" }, "keywords": [], "author": "", From 2f9f6bd892264466b970a8aaa6017951541844a4 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Thu, 20 Feb 2025 21:22:13 +0000 Subject: [PATCH 35/45] add first icons #251 --- .../project/api/data/models.js | 9 +- .../tests/retrieveWeatherData.spec.js | 2 +- .../app/src/components/icons/clear.jsx | 81 ++++++++++++ .../project/app/src/components/icons/index.js | 20 +++ .../app/src/components/icons/mostlyClear.jsx | 123 ++++++++++++++++++ .../src/pages/authenticatedPages/Overview.jsx | 2 + 6 files changed, 233 insertions(+), 4 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/clear.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/index.js create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/mostlyClear.jsx diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js index 3727ae41d..4c8550a7d 100644 --- a/staff/angela-bernaldez/project/api/data/models.js +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -21,9 +21,12 @@ const LocationSchema = new Schema({ type: Date, required: true }, - current: [{ - }], - forecast: [] + current: { + type: Object + }, + forecast: { + type: Object + } }) const Location = mongoose.model('Location', LocationSchema) diff --git a/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js b/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js index 653ed887b..9a67a536a 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js +++ b/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js @@ -36,7 +36,7 @@ describe('retrieveWeatherData', () => { .then((user) => { return retrieveWeatherData(user._id, location) .then((weatherData) => { - console.log(weatherData.current, 'imprimiendo weather data aqui en el test') + console.log(weatherData, 'imprimiendo weather data aqui en el test') }) }) }) diff --git a/staff/angela-bernaldez/project/app/src/components/icons/clear.jsx b/staff/angela-bernaldez/project/app/src/components/icons/clear.jsx new file mode 100644 index 000000000..1d1f6dd50 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/clear.jsx @@ -0,0 +1,81 @@ +export default function () { + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/index.js b/staff/angela-bernaldez/project/app/src/components/icons/index.js new file mode 100644 index 000000000..9e33ab434 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/index.js @@ -0,0 +1,20 @@ +// puedo indexar todos los icons +// con el nombre uqe me de la gana +// matcheando el tipo de tiempo o algo asi para cuando los quiera renderizar + +// asi puedo importar icons directamente desde otro sitio (la carpeta entera) + +// tengo que usar el useContext con las alertas personalizadas para los errores x ejemplo + + +import ClearIcon from './clear.jsx' +import MostlyClearIcon from './mostlyClear.jsx' + +const icons = { + ClearIcon, + MostlyClearIcon +} + +export default icons + + diff --git a/staff/angela-bernaldez/project/app/src/components/icons/mostlyClear.jsx b/staff/angela-bernaldez/project/app/src/components/icons/mostlyClear.jsx new file mode 100644 index 000000000..f961e2772 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/mostlyClear.jsx @@ -0,0 +1,123 @@ +export default function ({ size = 24}) { + return ( + , + width={size} + height={size} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index 6f3ee8a9e..8efa209c0 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -4,6 +4,7 @@ import logic from '../../logic' import logicWeather from '../../logic-weather' import { useEffect, useState } from 'react' import { useParams } from "react-router" +import icons from '../../components/icons' function Overview() { @@ -60,6 +61,7 @@ function Overview() {
) : (

Getting current location...

) } +
{/* Columna 2 en la Fila 1 */} From 3f17ee03401febce5275b99ce60b168a040ebed0 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Thu, 20 Feb 2025 21:39:18 +0000 Subject: [PATCH 36/45] add more icons #251 --- .../components/icons/{ => iconsDay}/clear.jsx | 0 .../components/icons/{ => iconsDay}/index.js | 9 +- .../icons/{ => iconsDay}/mostlyClear.jsx | 50 ++++---- .../icons/iconsDay/partlyCloudy.jsx | 113 ++++++++++++++++++ .../src/pages/authenticatedPages/Overview.jsx | 4 +- 5 files changed, 147 insertions(+), 29 deletions(-) rename staff/angela-bernaldez/project/app/src/components/icons/{ => iconsDay}/clear.jsx (100%) rename staff/angela-bernaldez/project/app/src/components/icons/{ => iconsDay}/index.js (63%) rename staff/angela-bernaldez/project/app/src/components/icons/{ => iconsDay}/mostlyClear.jsx (77%) create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/partlyCloudy.jsx diff --git a/staff/angela-bernaldez/project/app/src/components/icons/clear.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/clear.jsx similarity index 100% rename from staff/angela-bernaldez/project/app/src/components/icons/clear.jsx rename to staff/angela-bernaldez/project/app/src/components/icons/iconsDay/clear.jsx diff --git a/staff/angela-bernaldez/project/app/src/components/icons/index.js b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js similarity index 63% rename from staff/angela-bernaldez/project/app/src/components/icons/index.js rename to staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js index 9e33ab434..58ac52989 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons/index.js +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js @@ -7,12 +7,19 @@ // tengo que usar el useContext con las alertas personalizadas para los errores x ejemplo +// think of which icons go which each weather_code +// some icons from airycons will not be used as they do not correspond with any weather code +// use table given in github + + import ClearIcon from './clear.jsx' import MostlyClearIcon from './mostlyClear.jsx' +import PartlyCloudyIcon from './partlyCloudy.jsx' const icons = { ClearIcon, - MostlyClearIcon + MostlyClearIcon, + PartlyCloudyIcon } export default icons diff --git a/staff/angela-bernaldez/project/app/src/components/icons/mostlyClear.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/mostlyClear.jsx similarity index 77% rename from staff/angela-bernaldez/project/app/src/components/icons/mostlyClear.jsx rename to staff/angela-bernaldez/project/app/src/components/icons/iconsDay/mostlyClear.jsx index f961e2772..41999f45b 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons/mostlyClear.jsx +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/mostlyClear.jsx @@ -1,12 +1,10 @@ -export default function ({ size = 24}) { +export default function () { return ( , - width={size} - height={size} - - + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - + + - - + + - - - + + + diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/partlyCloudy.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/partlyCloudy.jsx new file mode 100644 index 000000000..7b3a5d19c --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/partlyCloudy.jsx @@ -0,0 +1,113 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx index 8efa209c0..dfb797a00 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx @@ -4,7 +4,7 @@ import logic from '../../logic' import logicWeather from '../../logic-weather' import { useEffect, useState } from 'react' import { useParams } from "react-router" -import icons from '../../components/icons' +import icons from '../../components/icons/iconsDay' function Overview() { @@ -61,7 +61,7 @@ function Overview() {
) : (

Getting current location...

) } - +
{/* Columna 2 en la Fila 1 */} From 0cd68d2c6ce2dfa101031b7f26d7bd92416b567b Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Fri, 21 Feb 2025 19:02:11 +0000 Subject: [PATCH 37/45] add more weather icons #251 --- .../src/components/icons/iconsDay/clear.jsx | 1 - .../app/src/components/icons/iconsDay/fog.jsx | 68 +++++++++++ .../src/components/icons/iconsDay/icyFog.jsx | 81 +++++++++++++ .../src/components/icons/iconsDay/index.js | 22 +++- .../components/icons/iconsDay/lightSnow.jsx | 59 +++++++++ .../icons/iconsDay/moderateSnow.jsx | 65 ++++++++++ .../components/icons/iconsDay/overcast.jsx | 44 +++++++ .../components/icons/iconsDay/snowGrain.jsx | 39 ++++++ .../icons/iconsDay/thunderstorm.jsx | 86 +++++++++++++ .../icons/iconsDay/thunderstormHail.jsx | 113 ++++++++++++++++++ .../src/components/icons/iconsNight/clear.jsx | 42 +++++++ .../src/components/icons/iconsNight/index.js | 13 ++ .../icons/iconsNight/mostlyClear.jsx | 83 +++++++++++++ .../icons/iconsNight/partlyCloudy.jsx | 65 ++++++++++ .../icons/iconsNight/thunderstorm.jsx | 82 +++++++++++++ .../project/app/src/pages/Authenticated.jsx | 4 +- .../{Overview.jsx => Dashboard.jsx} | 7 +- .../src/pages/authenticatedPages/index.jsx | 4 +- 18 files changed, 868 insertions(+), 10 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/fog.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyFog.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightSnow.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/moderateSnow.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/overcast.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/snowGrain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/thunderstorm.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/thunderstormHail.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/clear.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/index.js create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/mostlyClear.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/partlyCloudy.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/thunderstorm.jsx rename staff/angela-bernaldez/project/app/src/pages/authenticatedPages/{Overview.jsx => Dashboard.jsx} (93%) diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/clear.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/clear.jsx index 1d1f6dd50..01bb5febb 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/clear.jsx +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/clear.jsx @@ -1,5 +1,4 @@ export default function () { - return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyFog.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyFog.jsx new file mode 100644 index 000000000..8986696a5 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyFog.jsx @@ -0,0 +1,81 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js index 58ac52989..c5f888ea6 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js @@ -13,15 +13,31 @@ import ClearIcon from './clear.jsx' +import FogIcon from './fog.jsx' +import IcyFogIcon from './icyFog.jsx' +import ModerateSnowIcon from './moderateSnow.jsx' import MostlyClearIcon from './mostlyClear.jsx' +import LightSnowIcon from './lightSnow.jsx' +import OvercastIcon from './overcast.jsx' import PartlyCloudyIcon from './partlyCloudy.jsx' +import SnowGrainIcon from './snowGrain.jsx' +import ThunderstormIcon from './thunderstorm.jsx' +import thunderstormHailIcon from './thunderstormHail.jsx' -const icons = { +const iconsDay = { ClearIcon, + FogIcon, + IcyFogIcon, + ModerateSnowIcon, MostlyClearIcon, - PartlyCloudyIcon + LightSnowIcon, + OvercastIcon, + PartlyCloudyIcon, + SnowGrainIcon, + ThunderstormIcon, + thunderstormHailIcon } -export default icons +export default iconsDay diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightSnow.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightSnow.jsx new file mode 100644 index 000000000..0652e44f8 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightSnow.jsx @@ -0,0 +1,59 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/moderateSnow.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/moderateSnow.jsx new file mode 100644 index 000000000..e5b900cff --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/moderateSnow.jsx @@ -0,0 +1,65 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/overcast.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/overcast.jsx new file mode 100644 index 000000000..4437297fb --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/overcast.jsx @@ -0,0 +1,44 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/snowGrain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/snowGrain.jsx new file mode 100644 index 000000000..65ab8fb66 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/snowGrain.jsx @@ -0,0 +1,39 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/thunderstorm.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/thunderstorm.jsx new file mode 100644 index 000000000..1a99b7569 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/thunderstorm.jsx @@ -0,0 +1,86 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/thunderstormHail.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/thunderstormHail.jsx new file mode 100644 index 000000000..bb40fca91 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/thunderstormHail.jsx @@ -0,0 +1,113 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/clear.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/clear.jsx new file mode 100644 index 000000000..94ce8ae02 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/clear.jsx @@ -0,0 +1,42 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/index.js b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/index.js new file mode 100644 index 000000000..68d0aeff8 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/index.js @@ -0,0 +1,13 @@ +import ClearIcon from './clear.jsx' +import MostlyClearIcon from './mostlyClear.jsx' +import PartlyCloudyIcon from './partlyCloudy.jsx' +import ThunderstormIcon from './thunderstorm.jsx' + +const iconsNight = { + ClearIcon, + MostlyClearIcon, + PartlyCloudyIcon, + ThunderstormIcon +} + +export default iconsNight \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/mostlyClear.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/mostlyClear.jsx new file mode 100644 index 000000000..19bd6397d --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/mostlyClear.jsx @@ -0,0 +1,83 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/partlyCloudy.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/partlyCloudy.jsx new file mode 100644 index 000000000..2c281adcf --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/partlyCloudy.jsx @@ -0,0 +1,65 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/thunderstorm.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/thunderstorm.jsx new file mode 100644 index 000000000..6171e738c --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/thunderstorm.jsx @@ -0,0 +1,82 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx b/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx index ce264b0a9..b1d03887a 100644 --- a/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/Authenticated.jsx @@ -1,10 +1,10 @@ import { Outlet, Route, Routes } from 'react-router' -import { Overview } from './authenticatedPages' +import { Dashboard } from './authenticatedPages' function Authenticated({ onUserLoggedOut }) { return <> - } /> + } /> {/*Solamente deberia pasar el onuserloggedout a las pags/comp donde esta el boton de log out*/} diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx similarity index 93% rename from staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx rename to staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx index dfb797a00..e7128857b 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Overview.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx @@ -4,7 +4,8 @@ import logic from '../../logic' import logicWeather from '../../logic-weather' import { useEffect, useState } from 'react' import { useParams } from "react-router" -import icons from '../../components/icons/iconsDay' +import iconsDay from '../../components/icons/iconsDay' +import iconsNight from '../../components/icons/iconsNight' function Overview() { @@ -61,7 +62,9 @@ function Overview() {
) : (

Getting current location...

) } - +
+ +
{/* Columna 2 en la Fila 1 */} diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/index.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/index.jsx index b5614a410..3113c098a 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/index.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/index.jsx @@ -1,3 +1,3 @@ -import _Overview from './Overview.jsx' +import _Dashboard from './Dashboard.jsx' -export const Overview = _Overview \ No newline at end of file +export const Dashboard = _Dashboard \ No newline at end of file From b330e9710f6b8cff7523c5a104857f4b13bd263c Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Fri, 21 Feb 2025 21:23:12 +0000 Subject: [PATCH 38/45] add modifications to retrieveWeatherData and updateWeatherData - some tests failing --- .../project/api/data/models.js | 2 +- .../project/api/handlers-weather/index.js | 4 +- .../handlers-weather/retrieveWeatherData.js | 18 ++++ .../project/api/handlers/addUserLocation.js | 2 + staff/angela-bernaldez/project/api/index.js | 2 + .../project/api/logic-weather/index.js | 4 +- .../api/logic-weather/retrieveWeatherData.js | 2 +- .../tests/retrieveWeatherData.spec.js | 6 +- .../tests/updateWeatherForLocation.spec.js | 85 +++++++++++++++++++ .../logic-weather/updateWeatherForLocation.js | 15 ++-- .../project/api/tests/add-user-location.sh | 15 ++-- .../api/tests/retrieve-weather-data.sh | 7 ++ .../pages/authenticatedPages/Dashboard.jsx | 9 ++ 13 files changed, 151 insertions(+), 20 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers-weather/retrieveWeatherData.js create mode 100644 staff/angela-bernaldez/project/api/tests/retrieve-weather-data.sh diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js index 4c8550a7d..2afcd6434 100644 --- a/staff/angela-bernaldez/project/api/data/models.js +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -24,7 +24,7 @@ const LocationSchema = new Schema({ current: { type: Object }, - forecast: { + dailyForecast: { type: Object } }) diff --git a/staff/angela-bernaldez/project/api/handlers-weather/index.js b/staff/angela-bernaldez/project/api/handlers-weather/index.js index 909f57adf..d3b0b464d 100644 --- a/staff/angela-bernaldez/project/api/handlers-weather/index.js +++ b/staff/angela-bernaldez/project/api/handlers-weather/index.js @@ -1,7 +1,9 @@ import getLocationFromIp from './getLocationFromIp.js' import retrieveNominatimLocations from './retrieveNominatimLocations.js' +import retrieveWeatherData from './retrieveWeatherData.js' export default { getLocationFromIp, - retrieveNominatimLocations + retrieveNominatimLocations, + retrieveWeatherData } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers-weather/retrieveWeatherData.js b/staff/angela-bernaldez/project/api/handlers-weather/retrieveWeatherData.js new file mode 100644 index 000000000..78b072512 --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers-weather/retrieveWeatherData.js @@ -0,0 +1,18 @@ +import logicWeather from '../logic-weather/index.js' + +export default (req, res, next) => { + + const { locationData } = req.body + const userId = req.id + + console.log(locationData, 'THIS IS LOC DATA IN THE HANDLER') + + try { + logicWeather.retrieveWeatherData(userId, locationData) + .then((weatherData) => { + res.status(200).json({ weatherData }) + }) + } catch(error) { + next(error) + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers/addUserLocation.js b/staff/angela-bernaldez/project/api/handlers/addUserLocation.js index ec1170a8e..6c5018d90 100644 --- a/staff/angela-bernaldez/project/api/handlers/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/handlers/addUserLocation.js @@ -4,6 +4,8 @@ export default (req, res, next) => { const userId = req.id const { locationData, isCurrentLocation } = req.body + console.log('add user locccc handler', locationData) + try { logic.addUserLocation(userId, locationData, isCurrentLocation) .then(() => res.status(201).send()) diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index fa5540a0f..8ae7fb682 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -36,6 +36,8 @@ mongoose.connect(process.env.MONGO_URI) server.post('/users/current-location', verifyToken, jsonBodyParser, handlersWeather.getLocationFromIp) + server.post('/users/weather-data', verifyToken, jsonBodyParser, handlersWeather.retrieveWeatherData) + server.use(errorHandler) server.listen(process.env.PORT, () => { diff --git a/staff/angela-bernaldez/project/api/logic-weather/index.js b/staff/angela-bernaldez/project/api/logic-weather/index.js index d3b0b464d..e0085b19b 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/index.js +++ b/staff/angela-bernaldez/project/api/logic-weather/index.js @@ -1,9 +1,11 @@ import getLocationFromIp from './getLocationFromIp.js' import retrieveNominatimLocations from './retrieveNominatimLocations.js' import retrieveWeatherData from './retrieveWeatherData.js' +import updateWeatherForLocation from './updateWeatherForLocation.js' export default { getLocationFromIp, retrieveNominatimLocations, - retrieveWeatherData + retrieveWeatherData, + updateWeatherForLocation } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js index ec48c5649..25e562281 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js @@ -9,7 +9,7 @@ export default (userId, locationData) => { console.log(userId) - const weatherUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,relative_humidity_2m,is_day,precipitation,weather_code&hourly=temperature_2m,relative_humidity_2m,precipitation,weather_code,is_day` + const weatherUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,relative_humidity_2m,is_day,precipitation,weather_code,wind_speed_10m&daily=weather_code,temperature_2m_max,temperature_2m_min,sunrise,sunset,daylight_duration,sunshine_duration,uv_index_max,precipitation_sum,precipitation_probability_max&timezone=auto` return User.findById(userId) .then((user) => { diff --git a/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js b/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js index 9a67a536a..5ae5f9f24 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js +++ b/staff/angela-bernaldez/project/api/logic-weather/tests/retrieveWeatherData.spec.js @@ -36,7 +36,11 @@ describe('retrieveWeatherData', () => { .then((user) => { return retrieveWeatherData(user._id, location) .then((weatherData) => { - console.log(weatherData, 'imprimiendo weather data aqui en el test') + // console.log(weatherData) + // console.log(Object.keys(weatherData)) + // console.log(weatherData, 'imprimiendo weather data aqui en el test') + expect(weatherData).to.have.property('current') + expect(weatherData).to.have.property('daily') }) }) }) diff --git a/staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.spec.js b/staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.spec.js index e69de29bb..09fe97874 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.spec.js +++ b/staff/angela-bernaldez/project/api/logic-weather/tests/updateWeatherForLocation.spec.js @@ -0,0 +1,85 @@ +import 'dotenv/config' +import updateWeatherForLocation from '../updateWeatherForLocation.js' +import { describe, it } from 'mocha' +import { expect } from 'chai' +import models from '../../data/models.js' +import mongoose from 'mongoose' +import bcrypt from 'bcrypt' + +const { Location, User } = models + +describe('updateWeatherForLocation', () => { + + before(() => mongoose.connect(process.env.MONGO_URI_TEST)) + afterEach(() => User.deleteMany()) + afterEach(() => Location.deleteMany()) + after(() => mongoose.disconnect(process.env.MONGO_URI_TEST)) + + it('update weather data', () => { + const location = { + name: 'Brighton', + latitude: 50.1245, + longitude: -0.154, + timeLastUpdated: Date.now() + } + const weatherData = { + current: { + time: '2025-02-21T20:45', + interval: 900, + temperature_2m: 11.5, + relative_humidity_2m: 87, + is_day: 0, + precipitation: 0, + weather_code: 61, + wind_speed_10m: 31.7 + }, + daily: { + time: [ + '2025-02-21', + '2025-02-22', + '2025-02-23', + '2025-02-24', + '2025-02-25', + '2025-02-26', + '2025-02-27' + ], + weather_code: [ + 80, 61, 61, 61, + 61, 80, 3 + ], + temperature_2m_max: [ + 12.4, 10.7, 11.2, + 10.5, 9.8, 8.6, + 7.7 + ], + temperature_2m_min: [ + 10.9, 9.8, 8.4, + 9.9, 8.4, 7.7, + 6.6 + ] + } + } + return Location.create(location) + .then((location) => { + return bcrypt.hash('123456789', 1) + .then((cryptPassword) => { + const user = { + username: 'nametest', + email: 'test@mail.com', + password: cryptPassword, + currentLocation: location._id + } + return User.create(user) + .then((user) => { + return updateWeatherForLocation(user._id, location, weatherData) + .then((locationWeatherUpdated) => { + console.log(Object.keys(locationWeatherUpdated._doc)) + console.log(locationWeatherUpdated, 'imprimiendo weather updated aqui en el test') + expect(locationWeatherUpdated).to.have.property('current') + expect(locationWeatherUpdated).to.have.property('dailyForecast') + }) + }) + }) + }) + }) +}) diff --git a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js index 6e5682810..65430ea28 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js +++ b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js @@ -3,7 +3,7 @@ import retrieveWeatherData from './retrieveWeatherData.js' const { User, Location } = models -export default (userId, locationData) => { +export default (userId, locationData, weatherData) => { // this function is supposed to call retrieveWeatherData when needed // only need to update/refresh weather data if timeLastUpdated was less than 15 mins ago @@ -18,14 +18,11 @@ export default (userId, locationData) => { // comprobar que loc id esta en user.favlocs o user.current const isUserLoc = user.favLocations.some(favLoc => favLoc._id === location._id) || (user.currentLocation._id === location._id) if (!isUserLoc) new Error('User does not have the requested location to fetch weather data') - return retrieveWeatherData(userId, locationData) - .then((weatherData) => { - if (!weatherData) new Error('Unable to get data from Weather API') - // update location - console.log('need to update locations') - // once data has been obtained, database needs to be updated - // need to find the location and modify it and save it - }) + location.current = weatherData.current + location.dailyForecast = weatherData.daily + location.timeLastUpdated = Date.now() + return location.save() }) + .catch((error) => { throw new Errors.UnexpectedError(error.message) }) }) } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/add-user-location.sh b/staff/angela-bernaldez/project/api/tests/add-user-location.sh index 4f7267897..3974269b6 100644 --- a/staff/angela-bernaldez/project/api/tests/add-user-location.sh +++ b/staff/angela-bernaldez/project/api/tests/add-user-location.sh @@ -1,9 +1,12 @@ curl -X POST http://localhost:4321/locations/676d2fc251e575dc812fb568/ \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NmQyZmMyNTFlNTc1ZGM4MTJmYjU2OCIsImlhdCI6MTczNTIwODkxNH0.BNkoQBtVM5dFwGM-gzTwo0wTbIYy61yDDbPEFH_ienM" \ - -d '{"name":"Brighton", "latitude": "50.49", "longitude": "0.08", "altitude": "64"}' -v + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OGQ2ODFlZmM0MGVmYTY0MjFmYTg5ZiIsImlhdCI6MTc0MDE2MTE3N30.MWYQbReOykhdzDTiiTU0GigtzGsPS3STzfWZyWelQ4o" \ + -d '{ + "name": "Asssjsjjjj", + "latitude": 30.99, + "longitude": 2.05, + "altitude": 64, + "isCurrentLocation": false + }' -v - -# necesito encontrar el user id para hacer el post -# con el authenticate user lo que tengo es el token -# creo una logica adicional que me devuelva user info y ahi tenga el id de forma que pueda usarlo \ No newline at end of file +# no me funciona el test \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/tests/retrieve-weather-data.sh b/staff/angela-bernaldez/project/api/tests/retrieve-weather-data.sh new file mode 100644 index 000000000..959b089e1 --- /dev/null +++ b/staff/angela-bernaldez/project/api/tests/retrieve-weather-data.sh @@ -0,0 +1,7 @@ +curl -X POST http://localhost:4321/users/weather-data/ \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3OWJiZmY2Mjk4NThkNDVjYmI3MTM4OCIsImlhdCI6MTczODI2MDUxM30.fJFw6iT77ZzwxZUCLwcTvYo-IjNHIEjbC8TzSoJdix8" \ + -d '{"name": "Sevilla", "latitude": "37.3886303", "longitude": "-5.9953403"}' -v + + +# tampoco me funciona el test no se xq \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx index e7128857b..b12e36d82 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx @@ -16,7 +16,16 @@ function Overview() { const fetchLocations = () => { return logic.getAllUserLocations() .then((_locations) => { + // need to update weather data for each location + const fifteenMinInMs = 15 * 60 * 1000 + _locations.map((location) => { + if (location.timeLastUpdated - Date.now() > fifteenMinInMs) { + // need to update location weather data + + } + }) setLocations(_locations) + }) .catch((error) => { console.log('Error fetching locations:', error) From 9c5ecd29ecaa3b290d4dd0026f2ada85c84cdd55 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Sat, 22 Feb 2025 20:20:03 +0000 Subject: [PATCH 39/45] finalise adding all weather icons #251 --- .../api/logic-weather/getLocationFromIp.js | 3 +- .../project/api/logic/addUserLocation.js | 5 +- .../project/api/logic/getAllUserLocations.js | 1 - .../app/src/components/Forms/LogInForm.jsx | 2 +- .../components/Others/LocationSearchBox.jsx | 2 +- .../icons/iconsDay/heavyDrizzle.jsx | 66 ++++++++++ .../components/icons/iconsDay/heavyRain.jsx | 92 ++++++++++++++ .../components/icons/iconsDay/heavySnow.jsx | 71 +++++++++++ .../components/icons/iconsDay/icyDrizzle.jsx | 83 ++++++++++++ .../src/components/icons/iconsDay/icyRain.jsx | 107 ++++++++++++++++ .../src/components/icons/iconsDay/index.js | 24 +++- .../icons/iconsDay/lightDrizzle.jsx | 77 ++++++++++++ .../icons/iconsDay/lightIcyDrizzle.jsx | 93 ++++++++++++++ .../icons/iconsDay/lightIcyRain.jsx | 93 ++++++++++++++ .../components/icons/iconsDay/lightRain.jsx | 78 ++++++++++++ .../icons/iconsDay/moderateRain.jsx | 78 ++++++++++++ .../src/components/icons/iconsNight/fog.jsx | 79 ++++++++++++ .../icons/iconsNight/heavyDrizzle.jsx | 77 ++++++++++++ .../components/icons/iconsNight/heavyRain.jsx | 103 +++++++++++++++ .../components/icons/iconsNight/heavySnow.jsx | 82 ++++++++++++ .../icons/iconsNight/icyDrizzle.jsx | 90 +++++++++++++ .../components/icons/iconsNight/icyFog.jsx | 92 ++++++++++++++ .../components/icons/iconsNight/icyRain.jsx | 118 ++++++++++++++++++ .../src/components/icons/iconsNight/index.js | 36 +++++- .../icons/iconsNight/lightDrizzle.jsx | 88 +++++++++++++ .../icons/iconsNight/lightIcyDrizzle.jsx | 106 ++++++++++++++++ .../icons/iconsNight/lightIcyRain.jsx | 104 +++++++++++++++ .../components/icons/iconsNight/lightRain.jsx | 91 ++++++++++++++ .../components/icons/iconsNight/lightSnow.jsx | 68 ++++++++++ .../icons/iconsNight/moderateRain.jsx | 89 +++++++++++++ .../icons/iconsNight/moredateSnow.jsx | 76 +++++++++++ .../components/icons/iconsNight/overcast.jsx | 53 ++++++++ .../components/icons/iconsNight/snowGrain.jsx | 39 ++++++ .../icons/iconsNight/thunderstormHail.jsx | 109 ++++++++++++++++ .../pages/authenticatedPages/Dashboard.jsx | 4 +- 35 files changed, 2367 insertions(+), 12 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavyDrizzle.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavyRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavySnow.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyDrizzle.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightDrizzle.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightIcyDrizzle.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightIcyRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/moderateRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/fog.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavyDrizzle.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavyRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavySnow.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyDrizzle.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyFog.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightDrizzle.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightIcyDrizzle.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightIcyRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightSnow.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/moderateRain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/moredateSnow.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/overcast.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/snowGrain.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/thunderstormHail.jsx diff --git a/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js b/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js index 8ec80cfcc..a23d96d2e 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js +++ b/staff/angela-bernaldez/project/api/logic-weather/getLocationFromIp.js @@ -18,7 +18,8 @@ export default (userId) => { // not calling the logic to add that location to user.currentLocation here // as it is prefered to have different functions performing different tasks const currentLocation = { - name: `${data.city}, ${data.regionName}, ${data.country}`, + displayName: `${data.city}, ${data.regionName}, ${data.country}`, + name: data.city, latitude: data.lat, longitude: data.lon } diff --git a/staff/angela-bernaldez/project/api/logic/addUserLocation.js b/staff/angela-bernaldez/project/api/logic/addUserLocation.js index 0f64d0aa9..741035a7d 100644 --- a/staff/angela-bernaldez/project/api/logic/addUserLocation.js +++ b/staff/angela-bernaldez/project/api/logic/addUserLocation.js @@ -9,6 +9,7 @@ const getOrCreateLocation = async (location, locationData) => { // variables añadir las variables que tenga elegidas por defecto const newLocation = await Location.create({ + displayName: locationData.displayName, name: locationData.name, latitude: locationData.latitude, longitude: locationData.longitude, @@ -22,12 +23,12 @@ const getOrCreateLocation = async (location, locationData) => { export default (id, locationData, isCurrentLocation = false) => { // add validators - const { name, latitude, longitude } = locationData + const { display_name, name, latitude, longitude } = locationData return User.findById(id) .then((user) => { if (!user) throw new Errors.AuthError('User id does not belong to anyone') - return Location.findOne({name: name, latitude: latitude, longitude: longitude}) + return Location.findOne({display_name: display_name, name: name, latitude: latitude, longitude: longitude}) .then((location) => { return getOrCreateLocation(location, locationData) .then((newLocation) => { diff --git a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js index 4b2f093e8..f6bc79e8f 100644 --- a/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js +++ b/staff/angela-bernaldez/project/api/logic/getAllUserLocations.js @@ -18,7 +18,6 @@ export default (id) => { return Location.find({ '_id': {$in: user.favLocations }}) .then((locationsFound) => { return locationsFound - // need to check this works as expected }) }) diff --git a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx index 0cc46816c..1749615e2 100644 --- a/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Forms/LogInForm.jsx @@ -26,7 +26,7 @@ function LogInForm({ onUserLoggedIn, className }) { try { logic.authenticateUser(email.value, password.value) .then(() => { - navigate('/overview') + navigate('/dashboard') onUserLoggedIn() }) .catch((error) => alert(error.message)) diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index accb5b03e..3dc3428b3 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -30,7 +30,7 @@ function LocationSearchBox({ setStamp }) { .then((locationsFound) => { if (locationsFound && locationsFound.length > 0) { setLocations(locationsFound.map((item) => ({ - display_name: item.display_name, + displayName: item.display_name, name: item.name, latitude: item.lat, longitude: item.lon diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavyDrizzle.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavyDrizzle.jsx new file mode 100644 index 000000000..c2b7d1f91 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavyDrizzle.jsx @@ -0,0 +1,66 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavyRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavyRain.jsx new file mode 100644 index 000000000..750c41268 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavyRain.jsx @@ -0,0 +1,92 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavySnow.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavySnow.jsx new file mode 100644 index 000000000..fe71b172d --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/heavySnow.jsx @@ -0,0 +1,71 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyDrizzle.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyDrizzle.jsx new file mode 100644 index 000000000..c30f8a4c8 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyDrizzle.jsx @@ -0,0 +1,83 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyRain.jsx new file mode 100644 index 000000000..5a9062233 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/icyRain.jsx @@ -0,0 +1,107 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js index c5f888ea6..bee8c4208 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/index.js @@ -6,18 +6,26 @@ // tengo que usar el useContext con las alertas personalizadas para los errores x ejemplo - // think of which icons go which each weather_code // some icons from airycons will not be used as they do not correspond with any weather code // use table given in github - import ClearIcon from './clear.jsx' import FogIcon from './fog.jsx' +import HeavyDrizzleIcon from './heavyDrizzle.jsx' +import HeavyRainIcon from './heavyRain.jsx' +import HeavySnowIcon from './heavySnow.jsx' +import IcyDrizzleIcon from './icyDrizzle.jsx' import IcyFogIcon from './icyFog.jsx' +import IcyRainIcon from './icyRain.jsx' +import LightDrizzleIcon from './lightDrizzle.jsx' +import LightIcyDrizzleIcon from './lightIcyDrizzle.jsx' +import LightIcyRainIcon from './lightIcyRain.jsx' +import LightRainIcon from './lightRain.jsx' +import LightSnowIcon from './lightSnow.jsx' +import ModerateRainIcon from './moderateRain.jsx' import ModerateSnowIcon from './moderateSnow.jsx' import MostlyClearIcon from './mostlyClear.jsx' -import LightSnowIcon from './lightSnow.jsx' import OvercastIcon from './overcast.jsx' import PartlyCloudyIcon from './partlyCloudy.jsx' import SnowGrainIcon from './snowGrain.jsx' @@ -27,9 +35,19 @@ import thunderstormHailIcon from './thunderstormHail.jsx' const iconsDay = { ClearIcon, FogIcon, + HeavyDrizzleIcon, + HeavyRainIcon, + HeavySnowIcon, + IcyDrizzleIcon, IcyFogIcon, + IcyRainIcon, + ModerateRainIcon, ModerateSnowIcon, MostlyClearIcon, + LightDrizzleIcon, + LightIcyDrizzleIcon, + LightIcyRainIcon, + LightRainIcon, LightSnowIcon, OvercastIcon, PartlyCloudyIcon, diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightDrizzle.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightDrizzle.jsx new file mode 100644 index 000000000..dd650964d --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightDrizzle.jsx @@ -0,0 +1,77 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightIcyDrizzle.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightIcyDrizzle.jsx new file mode 100644 index 000000000..468fc322f --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightIcyDrizzle.jsx @@ -0,0 +1,93 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightIcyRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightIcyRain.jsx new file mode 100644 index 000000000..2957ddc81 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightIcyRain.jsx @@ -0,0 +1,93 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightRain.jsx new file mode 100644 index 000000000..384439d0b --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/lightRain.jsx @@ -0,0 +1,78 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/moderateRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/moderateRain.jsx new file mode 100644 index 000000000..b26ad05e7 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsDay/moderateRain.jsx @@ -0,0 +1,78 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/fog.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/fog.jsx new file mode 100644 index 000000000..7253ddb77 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/fog.jsx @@ -0,0 +1,79 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavyDrizzle.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavyDrizzle.jsx new file mode 100644 index 000000000..0c981a7a8 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavyDrizzle.jsx @@ -0,0 +1,77 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavyRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavyRain.jsx new file mode 100644 index 000000000..7bf988ab6 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavyRain.jsx @@ -0,0 +1,103 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavySnow.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavySnow.jsx new file mode 100644 index 000000000..da2c26389 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/heavySnow.jsx @@ -0,0 +1,82 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyDrizzle.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyDrizzle.jsx new file mode 100644 index 000000000..5a459e6b7 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyDrizzle.jsx @@ -0,0 +1,90 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyFog.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyFog.jsx new file mode 100644 index 000000000..1c8771d7e --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyFog.jsx @@ -0,0 +1,92 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyRain.jsx new file mode 100644 index 000000000..bb2e1a18d --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/icyRain.jsx @@ -0,0 +1,118 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/index.js b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/index.js index 68d0aeff8..c47bc855d 100644 --- a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/index.js +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/index.js @@ -1,13 +1,47 @@ import ClearIcon from './clear.jsx' +import FogIcon from './fog.jsx' +import HeavyDrizzleIcon from './heavyDrizzle.jsx' +import HeavyRainIcon from './heavyRain.jsx' +import HeavySnowIcon from './heavySnow.jsx' +import IcyDrizzleIcon from './icyDrizzle.jsx' +import IcyFogIcon from './icyFog.jsx' +import IcyRainIcon from './icyRain.jsx' +import LightDrizzleIcon from './lightDrizzle.jsx' +import LightIcyDrizzleIcon from './lightIcyDrizzle.jsx' +import LightIcyRainIcon from './lightIcyRain.jsx' +import LightRainIcon from './lightRain.jsx' +import LightSnowIcon from './lightSnow.jsx' +import ModerateRainIcon from './moderateRain.jsx' +import ModerateSnowIcon from './moredateSnow.jsx' import MostlyClearIcon from './mostlyClear.jsx' +import OvercastIcon from './overcast.jsx' import PartlyCloudyIcon from './partlyCloudy.jsx' +import SnowGrainIcon from './snowGrain.jsx' import ThunderstormIcon from './thunderstorm.jsx' +import ThunderstormHailIcon from './thunderstormHail.jsx' const iconsNight = { ClearIcon, + FogIcon, + HeavyDrizzleIcon, + HeavyRainIcon, + HeavySnowIcon, + IcyDrizzleIcon, + IcyFogIcon, + IcyRainIcon, + LightDrizzleIcon, + LightIcyDrizzleIcon, + LightIcyRainIcon, + LightRainIcon, + LightSnowIcon, MostlyClearIcon, + OvercastIcon, PartlyCloudyIcon, - ThunderstormIcon + ModerateRainIcon, + ModerateSnowIcon, + SnowGrainIcon, + ThunderstormIcon, + ThunderstormHailIcon } export default iconsNight \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightDrizzle.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightDrizzle.jsx new file mode 100644 index 000000000..45de25bf7 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightDrizzle.jsx @@ -0,0 +1,88 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightIcyDrizzle.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightIcyDrizzle.jsx new file mode 100644 index 000000000..8964d822a --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightIcyDrizzle.jsx @@ -0,0 +1,106 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightIcyRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightIcyRain.jsx new file mode 100644 index 000000000..d8889d033 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightIcyRain.jsx @@ -0,0 +1,104 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightRain.jsx new file mode 100644 index 000000000..6b7236634 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightRain.jsx @@ -0,0 +1,91 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightSnow.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightSnow.jsx new file mode 100644 index 000000000..3aeeb7fa6 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/lightSnow.jsx @@ -0,0 +1,68 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/moderateRain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/moderateRain.jsx new file mode 100644 index 000000000..b2596f463 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/moderateRain.jsx @@ -0,0 +1,89 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/moredateSnow.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/moredateSnow.jsx new file mode 100644 index 000000000..e6eea1318 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/moredateSnow.jsx @@ -0,0 +1,76 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/overcast.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/overcast.jsx new file mode 100644 index 000000000..f53a47470 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/overcast.jsx @@ -0,0 +1,53 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/snowGrain.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/snowGrain.jsx new file mode 100644 index 000000000..65ab8fb66 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/snowGrain.jsx @@ -0,0 +1,39 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/thunderstormHail.jsx b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/thunderstormHail.jsx new file mode 100644 index 000000000..67194a982 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/icons/iconsNight/thunderstormHail.jsx @@ -0,0 +1,109 @@ +export default function () { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx index b12e36d82..9dd7f0bae 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx @@ -71,8 +71,8 @@ function Overview() {
) : (

Getting current location...

) } -
- +
+
From dfcf66171c7d48f0695d1bdbc7b7ff5323915fef Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Sat, 22 Feb 2025 21:22:43 +0000 Subject: [PATCH 40/45] add logic to dinamically get weather icon based on weather code #251 --- .../app/src/logic-weather/getWeatherIcon.js | 50 +++++++++++++++++++ .../project/app/src/logic-weather/index.js | 2 + .../pages/authenticatedPages/Dashboard.jsx | 5 +- 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/logic-weather/getWeatherIcon.js diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/getWeatherIcon.js b/staff/angela-bernaldez/project/app/src/logic-weather/getWeatherIcon.js new file mode 100644 index 000000000..91359c66c --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic-weather/getWeatherIcon.js @@ -0,0 +1,50 @@ +import iconsDay from '../components/icons/iconsDay' +import iconsNight from '../components/icons/iconsNight' +import React from 'react' + +const weatherMap = { + 0: 'ClearIcon', + 1: 'MostlyClearIcon', + 2: 'PartlyCloudyIcon', + 3: 'OvercastIcon', + 45: 'FogIcon', + 48: 'IcyFogIcon', + 51: 'LightDrizzleIcon', + 53: 'HeavyDrizzleIcon', + 55: 'HeavyDrizzleIcon', + 56: 'LightIcyDrizzleIcon', + 57: 'IcyDrizzleIcon', + 61: 'LightRainIcon', + 63: 'ModerateRainIcon', + 65: 'HeavyRainIcon', + 66: 'LightIcyRainIcon', + 67: 'IcyRainIcon', + 71: 'LightSnowIcon', + 73: 'ModerateSnowIcon', + 75: 'HeavySnowIcon', + 77: 'SnowGrainIcon', + 80: 'LightRainIcon', + 81: 'ModerateRainIcon', + 82: 'HeavyRainIcon', + 85: 'LightSnowIcon', + 86: 'HeavySnowIcon', + 95: 'ThunderstormIcon', + 96: 'ThunderstormHailIcon', + 99: 'ThunderstormHailIcon' +} + +const getWeatherIcon = (weatherCode, isDay) => { + + //isDay would be 1 for true and 0 for false + const iconFolder = isDay ? iconsDay : iconsNight + const iconName = weatherMap[weatherCode] + const Icon = iconFolder[iconName] + + if (Icon) { + return React.createElement(Icon) + } else { + console.log('No icon has been found for the requested weather code', weatherCode) + } +} + +export default getWeatherIcon \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/index.js b/staff/angela-bernaldez/project/app/src/logic-weather/index.js index 909f57adf..f6a55ed4a 100644 --- a/staff/angela-bernaldez/project/app/src/logic-weather/index.js +++ b/staff/angela-bernaldez/project/app/src/logic-weather/index.js @@ -1,7 +1,9 @@ import getLocationFromIp from './getLocationFromIp.js' +import getWeatherIcon from './getWeatherIcon.js' import retrieveNominatimLocations from './retrieveNominatimLocations.js' export default { getLocationFromIp, + getWeatherIcon, retrieveNominatimLocations } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx index 9dd7f0bae..0d9b29836 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx @@ -5,7 +5,6 @@ import logicWeather from '../../logic-weather' import { useEffect, useState } from 'react' import { useParams } from "react-router" import iconsDay from '../../components/icons/iconsDay' -import iconsNight from '../../components/icons/iconsNight' function Overview() { @@ -71,8 +70,8 @@ function Overview() {
) : (

Getting current location...

) } -
- +
+ {logicWeather.getWeatherIcon(0, 1)}
From 4a53460cfb46f7412df29f227c21bee38c2d47ac Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Sat, 22 Feb 2025 22:09:56 +0000 Subject: [PATCH 41/45] add retrieve weather data and update weather for location to front end #251 --- .../project/api/handlers-weather/index.js | 4 ++- .../updateWeatherForLocation.js | 16 +++++++++ staff/angela-bernaldez/project/api/index.js | 2 ++ .../logic-weather/updateWeatherForLocation.js | 3 ++ .../src/logic-weather/getLocationFromIp.js | 2 +- .../project/app/src/logic-weather/index.js | 6 +++- .../retrieveNominatimLocations.js | 2 +- .../src/logic-weather/retrieveWeatherData.js | 33 +++++++++++++++++ .../logic-weather/updateWeatherForLocation.js | 35 +++++++++++++++++++ .../pages/authenticatedPages/Dashboard.jsx | 18 +++++++--- 10 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 staff/angela-bernaldez/project/api/handlers-weather/updateWeatherForLocation.js create mode 100644 staff/angela-bernaldez/project/app/src/logic-weather/retrieveWeatherData.js create mode 100644 staff/angela-bernaldez/project/app/src/logic-weather/updateWeatherForLocation.js diff --git a/staff/angela-bernaldez/project/api/handlers-weather/index.js b/staff/angela-bernaldez/project/api/handlers-weather/index.js index d3b0b464d..cbbf06c7c 100644 --- a/staff/angela-bernaldez/project/api/handlers-weather/index.js +++ b/staff/angela-bernaldez/project/api/handlers-weather/index.js @@ -1,9 +1,11 @@ import getLocationFromIp from './getLocationFromIp.js' import retrieveNominatimLocations from './retrieveNominatimLocations.js' import retrieveWeatherData from './retrieveWeatherData.js' +import updateWeatherForLocation from './updateWeatherForLocation.js' export default { getLocationFromIp, retrieveNominatimLocations, - retrieveWeatherData + retrieveWeatherData, + updateWeatherForLocation } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/handlers-weather/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/handlers-weather/updateWeatherForLocation.js new file mode 100644 index 000000000..8f3c89b8a --- /dev/null +++ b/staff/angela-bernaldez/project/api/handlers-weather/updateWeatherForLocation.js @@ -0,0 +1,16 @@ +import logicWeather from '../logic-weather/index.js' + +export default (req, res, next) => { + + const { locationData, weatherData } = req.body + const userId = req.id + + try { + logicWeather.updateWeatherForLocation(userId, locationData, weatherData) + .then((locationUpdated) => { + res.status(200).json({ locationUpdated }) + }) + } catch(error) { + next(error) + } +} \ No newline at end of file diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index 8ae7fb682..d22db6b42 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -38,6 +38,8 @@ mongoose.connect(process.env.MONGO_URI) server.post('/users/weather-data', verifyToken, jsonBodyParser, handlersWeather.retrieveWeatherData) + server.put('/users/weather-data', verifyToken, jsonBodyParser, handlersWeather.updateWeatherForLocation) + server.use(errorHandler) server.listen(process.env.PORT, () => { diff --git a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js index 65430ea28..a6954bd07 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js +++ b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js @@ -18,6 +18,9 @@ export default (userId, locationData, weatherData) => { // comprobar que loc id esta en user.favlocs o user.current const isUserLoc = user.favLocations.some(favLoc => favLoc._id === location._id) || (user.currentLocation._id === location._id) if (!isUserLoc) new Error('User does not have the requested location to fetch weather data') + + // NEED TO MODIFY KEYS HAVING _ WITH CAMELCASE + // replace wmo_code with wmoCode. location.current = weatherData.current location.dailyForecast = weatherData.daily location.timeLastUpdated = Date.now() diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js b/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js index e38e59aae..d27d928fe 100644 --- a/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js +++ b/staff/angela-bernaldez/project/app/src/logic-weather/getLocationFromIp.js @@ -21,7 +21,7 @@ const getLocationFromIp = () => { }) .catch((error) => { if (error instanceof Errors.BadRequestError) - throw new Errors.ServerError("Server in not connected") + throw new Errors.ServerError('Server in not connected') throw error }) } diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/index.js b/staff/angela-bernaldez/project/app/src/logic-weather/index.js index f6a55ed4a..33391fbf2 100644 --- a/staff/angela-bernaldez/project/app/src/logic-weather/index.js +++ b/staff/angela-bernaldez/project/app/src/logic-weather/index.js @@ -1,9 +1,13 @@ import getLocationFromIp from './getLocationFromIp.js' import getWeatherIcon from './getWeatherIcon.js' import retrieveNominatimLocations from './retrieveNominatimLocations.js' +import retrieveWeatherData from './retrieveWeatherData.js' +import updateWeatherForLocation from './updateWeatherForLocation.js' export default { getLocationFromIp, getWeatherIcon, - retrieveNominatimLocations + retrieveNominatimLocations, + retrieveWeatherData, + updateWeatherForLocation } \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js b/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js index 9b0f738c6..4639a5425 100644 --- a/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js +++ b/staff/angela-bernaldez/project/app/src/logic-weather/retrieveNominatimLocations.js @@ -25,7 +25,7 @@ const retrieveNominatimLocations = (locationString) => { }) .catch((error) => { if (error instanceof Errors.BadRequestError) - throw new Errors.ServerError("Server in not connected") + throw new Errors.ServerError('Server in not connected') throw error }) } diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/retrieveWeatherData.js b/staff/angela-bernaldez/project/app/src/logic-weather/retrieveWeatherData.js new file mode 100644 index 000000000..7e9fc8db2 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic-weather/retrieveWeatherData.js @@ -0,0 +1,33 @@ +import { Errors } from 'common' + +const retrieveWeatherData = (locationData) => { + + const token = sessionStorage.getItem("token") + + // necesito userId(sale del token) y locationData + + return fetch(`${import.meta.env.VITE_API_URL}users/weather-data/`, { + method: 'POST', + headers: { + 'Content-type': 'application/json', + Authorization: `Bearer ${token}` + }, + body: JSON.stringify({ locationData: locationData }) + }) + .then((res) => { + if (res.status === 200) return res.json() + .then(body => body.weatherData) + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) + }) + .catch((error) => { + if (error instanceof Errors.BadRequestError) + throw new Errors.ServerError('Server in not connected') + throw error + }) +} + +export default retrieveWeatherData \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/logic-weather/updateWeatherForLocation.js b/staff/angela-bernaldez/project/app/src/logic-weather/updateWeatherForLocation.js new file mode 100644 index 000000000..74d11b2ce --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/logic-weather/updateWeatherForLocation.js @@ -0,0 +1,35 @@ +import { Errors } from 'common' + +const updateWeatherForLocation = (locationData, weatherData) => { + + // need to get token to then get userId + const token = sessionStorage.getItem("token") + + return fetch(`${import.meta.env.VITE_API_URL}users/weather-data/`, { + method: 'PUT', + headers: { + 'Content-type': 'application/json', + Authorization: `Bearer ${token}` + }, + body: JSON.stringify({ + locationData: locationData, + weatherData: weatherData + }) + }) + .then((res) => { + if (res.status === 200) return res.json() + .then(body => body.locationUpdated) + return res.json() + .then(body => { + const constructor = Errors[body.name] + throw new constructor(`${body.message}`) + }) + }) + .catch((error) => { + if (error instanceof Errors.BadRequestError) + throw new Errors.ServerError('Server in not connected') + throw error + }) +} + +export default updateWeatherForLocation \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx index 0d9b29836..7c4768353 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx @@ -4,9 +4,8 @@ import logic from '../../logic' import logicWeather from '../../logic-weather' import { useEffect, useState } from 'react' import { useParams } from "react-router" -import iconsDay from '../../components/icons/iconsDay' -function Overview() { +function Dashboard() { const [stamp, setStamp] = useState(Date.now()) const [locations, setLocations] = useState([]) @@ -36,7 +35,14 @@ function Overview() { .then((currentLocation) => { return logic.addUserLocation(currentLocation, true) .then(() => { - setCurrentLocation(currentLocation) + return logicWeather.retrieveWeatherData(currentLocation) + .then((weatherData) => { + console.log(weatherData, 'THIS IS WEATHER DATA FROM THE FRONT END') + return logicWeather.updateWeatherForLocation(currentLocation, weatherData) + .then((locationUpdated) => { + setCurrentLocation(locationUpdated) + }) + }) }) .catch((error) => { // IMPROVE THIS ERROR LATER @@ -60,6 +66,8 @@ function Overview() { return (
{/* Columna 1 en la Fila 1 */} + {/* Seria mejor crear un componente y solo pasarle como objeto currentLocation*/} + {/* currentLocation contendria toda la info, tanto nombre, como variables*/}
Columna 1, Fila 1. Aqui iria la localizacion actual, que es {currentLocation ? @@ -71,7 +79,7 @@ function Overview() { (

Getting current location...

) }
- {logicWeather.getWeatherIcon(0, 1)} + {logicWeather.getWeatherIcon(3, false)}
@@ -103,4 +111,4 @@ function Overview() { ) } -export default Overview +export default Dashboard From 675d12c472f5066c8342b998a40cb0573f47f6c4 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Sun, 23 Feb 2025 23:08:53 +0000 Subject: [PATCH 42/45] add current location weather box to fron end #251 --- .../project/api/data/models.js | 6 ++ .../api/logic-weather/retrieveWeatherData.js | 2 +- .../logic-weather/updateWeatherForLocation.js | 2 + .../components/Cards/CurrentLocationBox.jsx | 77 +++++++++++++++++-- .../app/src/components/Cards/SunInfoBox.jsx | 12 +++ .../app/src/components/Cards/index.jsx | 6 +- .../pages/authenticatedPages/Dashboard.jsx | 28 +++---- 7 files changed, 107 insertions(+), 26 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx diff --git a/staff/angela-bernaldez/project/api/data/models.js b/staff/angela-bernaldez/project/api/data/models.js index 2afcd6434..64198dfbe 100644 --- a/staff/angela-bernaldez/project/api/data/models.js +++ b/staff/angela-bernaldez/project/api/data/models.js @@ -24,8 +24,14 @@ const LocationSchema = new Schema({ current: { type: Object }, + current_units: { + type: Object + }, dailyForecast: { type: Object + }, + dailyForecast_units: { + type: Object } }) diff --git a/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js b/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js index 25e562281..1aa549edc 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js +++ b/staff/angela-bernaldez/project/api/logic-weather/retrieveWeatherData.js @@ -9,7 +9,7 @@ export default (userId, locationData) => { console.log(userId) - const weatherUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,relative_humidity_2m,is_day,precipitation,weather_code,wind_speed_10m&daily=weather_code,temperature_2m_max,temperature_2m_min,sunrise,sunset,daylight_duration,sunshine_duration,uv_index_max,precipitation_sum,precipitation_probability_max&timezone=auto` + const weatherUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,relative_humidity_2m,apparent_temperature,is_day,precipitation,weather_code,wind_speed_10m&daily=weather_code,temperature_2m_max,temperature_2m_min,sunrise,sunset,daylight_duration,sunshine_duration,uv_index_max,precipitation_sum,precipitation_probability_max&timezone=auto` return User.findById(userId) .then((user) => { diff --git a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js index a6954bd07..6d0ab28c2 100644 --- a/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js +++ b/staff/angela-bernaldez/project/api/logic-weather/updateWeatherForLocation.js @@ -22,7 +22,9 @@ export default (userId, locationData, weatherData) => { // NEED TO MODIFY KEYS HAVING _ WITH CAMELCASE // replace wmo_code with wmoCode. location.current = weatherData.current + location.current_units = weatherData.current_units location.dailyForecast = weatherData.daily + location.dailyForecast_units = weatherData.daily_units location.timeLastUpdated = Date.now() return location.save() }) diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx index 35f6e5622..801e4399a 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx @@ -1,14 +1,77 @@ -function CurrentLocationBox() { - // esto sera una box que contenga bonito el tiempo para current loc - // necesitare pasarle la currentLocation para ese user - // y aqui traerme el weatherData para current location llamando a la logica +import logicWeather from '../../logic-weather' - - // me traigo currentLocation +function CurrentLocationBox({ currentLocation }) { + const currentWeather = currentLocation.current return ( -
+
+ {/* Columna izquierda */} +
+ {/* 📍 Ubicación + Información general */} +
+
📍 {currentLocation.name}
+
Weather
+
Now
+
+ + {/* Temperaturas */} +
+ {/* Temperatura actual */} +
+ {currentWeather.temperature_2m} {currentLocation.current_units.temperature_2m} +
+ + {/* Temperatura aparente */} +
+ Feels like {currentWeather.apparent_temperature} {currentLocation.current_units.apparent_temperature} +
+
+
+ {/* Columna derecha */} +
+ {/* Icono del clima */} +
+
+ {logicWeather.getWeatherIcon(currentWeather.weather_code, currentWeather.is_day)} +
+
+ {/* Otras variables del clima */} +
+ {/* Recuadro de Precipitación (vertical) */} +
+
🌧️
+
Precipitation
+
+ {currentWeather.precipitation} {currentLocation.current_units.precipitation} +
+
+ + {/* Recuadro de Humedad (vertical) */} +
+
💧
+
Humidity
+
+ {currentWeather.relative_humidity_2m} {currentLocation.current_units.relative_humidity_2m} +
+
+ + {/* Recuadro de Viento (vertical) */} +
+
💨
+
Wind
+
+ {currentWeather.wind_speed_10m} {currentLocation.current_units.wind_speed_10m} +
+
+
+
+ + +
) } + + + export default CurrentLocationBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx new file mode 100644 index 000000000..6d173e502 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx @@ -0,0 +1,12 @@ +function SunInfoBox({ currentLocation }) { + return ( +
+ Sunrise + Sunset + Sunshine duration + Sunlight duration +
+ ) +} + +export default SunInfoBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/index.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/index.jsx index 44169eacb..05b532ef3 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/index.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/index.jsx @@ -1,3 +1,7 @@ +import _CurrentLocationBox from './CurrentLocationBox.jsx' import _LocationCard from './LocationCard.jsx' +import _SunInfoBox from './SunInfoBox.jsx' -export const LocationCard = _LocationCard \ No newline at end of file +export const LocationCard = _LocationCard +export const CurrentLocationBox = _CurrentLocationBox +export const SunInfoBox = _SunInfoBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx index 7c4768353..64c4671ab 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx @@ -3,7 +3,8 @@ import LocationCard from '../../components/Cards/LocationCard' import logic from '../../logic' import logicWeather from '../../logic-weather' import { useEffect, useState } from 'react' -import { useParams } from "react-router" +import CurrentLocationBox from '../../components/Cards/CurrentLocationBox' +import { SunInfoBox } from '../../components/Cards' function Dashboard() { @@ -19,8 +20,10 @@ function Dashboard() { _locations.map((location) => { if (location.timeLastUpdated - Date.now() > fifteenMinInMs) { // need to update location weather data - - } + console.log('need to update weather data') + } else { + console.log('there is no need to update weather data') + } }) setLocations(_locations) @@ -39,8 +42,8 @@ function Dashboard() { .then((weatherData) => { console.log(weatherData, 'THIS IS WEATHER DATA FROM THE FRONT END') return logicWeather.updateWeatherForLocation(currentLocation, weatherData) - .then((locationUpdated) => { - setCurrentLocation(locationUpdated) + .then((currentLocation) => { + setCurrentLocation(currentLocation) }) }) }) @@ -69,18 +72,12 @@ function Dashboard() { {/* Seria mejor crear un componente y solo pasarle como objeto currentLocation*/} {/* currentLocation contendria toda la info, tanto nombre, como variables*/}
- Columna 1, Fila 1. Aqui iria la localizacion actual, que es {currentLocation ? - (
-

{currentLocation.name}

-

Latitude: {currentLocation.latitude}

-

Longitude: {currentLocation.longitude}

+ (
+
) : (

Getting current location...

) } -
- {logicWeather.getWeatherIcon(3, false)} -
{/* Columna 2 en la Fila 1 */} @@ -96,10 +93,7 @@ function Dashboard() {
{/* Fila 2 (Ocupa todo el ancho, con 1/3 y 2/3) */}
- {/* Columna 1 (1/3 del ancho) */} -
- Columna 1 (1/3 del ancho) -
+ {/* Columna 2 (2/3 del ancho) */}
From d6496a0bfff154d4d3e9d90736c3255160a73eb4 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Mon, 24 Feb 2025 22:18:03 +0000 Subject: [PATCH 43/45] add improvements to suninfo box #251 --- .../app/src/components/Cards/SunInfoBox.jsx | 43 ++++++++++++++++--- .../pages/authenticatedPages/Dashboard.jsx | 8 +++- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx index 6d173e502..f6478a5f4 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx @@ -1,12 +1,43 @@ +function secondsToHoursMinutes(seconds) { + const hours = Math.floor(seconds / 3600) + const minutes = Math.floor((seconds % 3600) / 60) + return `${hours}h ${minutes}m` +} + +function getDateFromTimeString(timeString) { + const date = new Date(timeString) + const hours = date.getHours(); + const minutes = date.getMinutes(); + return `${hours}:${minutes.toString().padStart(2, "0")}` +} + function SunInfoBox({ currentLocation }) { + + console.log(currentLocation.dailyForecast) return ( -
- Sunrise - Sunset - Sunshine duration - Sunlight duration +
+
+
+ 🌅 Sunrise
+ {getDateFromTimeString(currentLocation.dailyForecast.sunrise[0])} +
+
+ 🌇 Sunset
+ {getDateFromTimeString(currentLocation.dailyForecast.sunset[0])} +
+
+ ☀️ Sunshine Duration
+ {secondsToHoursMinutes(currentLocation.dailyForecast.sunshine_duration[0])} +
+
+ 🌤️ Sunlight Duration
+ {secondsToHoursMinutes(currentLocation.dailyForecast.daylight_duration[0])} +
+
- ) + ); + } + export default SunInfoBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx index 64c4671ab..dd3a7a776 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx @@ -93,8 +93,12 @@ function Dashboard() {
{/* Fila 2 (Ocupa todo el ancho, con 1/3 y 2/3) */}
- - + {currentLocation ? + (
+ +
) : + (

Getting current location...

) + } {/* Columna 2 (2/3 del ancho) */}
Columna 2 (2/3 del ancho) From 1a7ba4d1becc5fca20a18e5fb4a954738c68fe3a Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Wed, 26 Feb 2025 20:03:38 +0000 Subject: [PATCH 44/45] add header and location search box inside header #251 --- .../components/Cards/CurrentLocationBox.jsx | 6 +- .../app/src/components/Others/Header.jsx | 26 +++++++ .../components/Others/LocationSearchBox.jsx | 53 +++++++------ .../app/src/components/Others/index.jsx | 4 +- .../pages/authenticatedPages/Dashboard.jsx | 75 ++++++++++--------- 5 files changed, 97 insertions(+), 67 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/components/Others/Header.jsx diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx index 801e4399a..f0b3a53a0 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx @@ -30,13 +30,13 @@ function CurrentLocationBox({ currentLocation }) { {/* Columna derecha */}
{/* Icono del clima */} -
-
+
+
{logicWeather.getWeatherIcon(currentWeather.weather_code, currentWeather.is_day)}
{/* Otras variables del clima */} -
+
{/* Recuadro de Precipitación (vertical) */}
🌧️
diff --git a/staff/angela-bernaldez/project/app/src/components/Others/Header.jsx b/staff/angela-bernaldez/project/app/src/components/Others/Header.jsx new file mode 100644 index 000000000..7d700d974 --- /dev/null +++ b/staff/angela-bernaldez/project/app/src/components/Others/Header.jsx @@ -0,0 +1,26 @@ +import { useLocation } from 'react-router-dom' +import LocationSearchBox from './LocationSearchBox' + +function Header({ setStamp }) { + const location = useLocation() + + return ( +
+
+

+ 🌤️ Weather App +

+ + {location.pathname === '/dashboard' ? ( +
+ +
+ ) : null} +
+
+ ) +} + + + +export default Header \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index 3dc3428b3..7bbc93160 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -5,8 +5,6 @@ import { IconSearch } from '../icons/icons.jsx' function LocationSearchBox({ setStamp }) { - /// ARREGLAAAR - const [locations, setLocations] = useState([]) const [inputValue, setInputValue] = useState('') @@ -58,32 +56,33 @@ function LocationSearchBox({ setStamp }) { } return ( -
- - {locations.length > 0 && ( -
    - {locations.map((location, index) => ( -
  • handleSelect(location)} - className="text-left p-2 cursor-pointer transition-colors duration-200 hover:bg-gray-200" - > - {location.display_name} -
  • - ))} -
- )} -
+
+ + {locations.length > 0 && ( +
    + {locations.map((location, index) => ( +
  • handleSelect(location)} + className="text-left p-2 cursor-pointer transition-colors duration-200 hover:bg-gray-200 text-black" + > + {location.displayName} +
  • + ))} +
+ )} +
) + } export default LocationSearchBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Others/index.jsx b/staff/angela-bernaldez/project/app/src/components/Others/index.jsx index 228867c53..cd7b968c8 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/index.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/index.jsx @@ -1,3 +1,5 @@ +import _Header from './LocationSearchBox.jsx' import _LocationSearchBox from './LocationSearchBox.jsx' -export const LocationSearchBox = _LocationSearchBox \ No newline at end of file +export const LocationSearchBox = _LocationSearchBox +export const Header = _Header \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx index dd3a7a776..589e71c65 100644 --- a/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx +++ b/staff/angela-bernaldez/project/app/src/pages/authenticatedPages/Dashboard.jsx @@ -4,6 +4,7 @@ import logic from '../../logic' import logicWeather from '../../logic-weather' import { useEffect, useState } from 'react' import CurrentLocationBox from '../../components/Cards/CurrentLocationBox' +import Header from '../../components/Others/Header' import { SunInfoBox } from '../../components/Cards' function Dashboard() { @@ -67,45 +68,47 @@ function Dashboard() { }, [stamp]) return ( -
- {/* Columna 1 en la Fila 1 */} - {/* Seria mejor crear un componente y solo pasarle como objeto currentLocation*/} - {/* currentLocation contendria toda la info, tanto nombre, como variables*/} -
- {currentLocation ? - (
- -
) : - (

Getting current location...

) - } -
- - {/* Columna 2 en la Fila 1 */} -
- - {locations.length > 0 ? ( - locations.map((location, index) => ( - - )) - ) : ( -

No locations found

- )} -
- {/* Fila 2 (Ocupa todo el ancho, con 1/3 y 2/3) */} -
- {currentLocation ? - (
- -
) : - (

Getting current location...

) - } - {/* Columna 2 (2/3 del ancho) */} -
- Columna 2 (2/3 del ancho) +
+
+ +
+ {/* Columna 1 en la Fila 1 */} +
+ {currentLocation ? + (
+ +
) : + (

Getting current location...

) + } +
+ + {/* Columna 2 en la Fila 1 */} +
+
+ {locations.length > 0 ? ( + locations.map((location, index) => ( + + )) + ) : ( +

No locations found

+ )} +
+
+ {/* Fila 2 (Ocupa todo el ancho, con 1/3 y 2/3) */} +
+ {currentLocation ? + (
+ +
) : + (

Getting current location...

) + } + {/* Columna 2 (2/3 del ancho) */} +
+ Columna 2 (2/3 del ancho) +
- ) } From becbb73777c8331bf4e1188594643b2f96048729 Mon Sep 17 00:00:00 2001 From: angelabernaldz Date: Fri, 28 Feb 2025 19:21:32 +0000 Subject: [PATCH 45/45] solve issue with mixing icon classes and add icons to all location cards #251 --- staff/angela-bernaldez/project/api/index.js | 2 +- .../components/Cards/CurrentLocationBox.jsx | 2 - .../app/src/components/Cards/LocationCard.jsx | 21 +++-- .../app/src/components/Cards/SunInfoBox.jsx | 15 ++- .../app/src/components/Others/Header.jsx | 7 +- .../components/Others/LocationSearchBox.jsx | 2 +- .../src/components/icons/iconsDay/clear.jsx | 36 +++---- .../app/src/components/icons/iconsDay/fog.jsx | 24 ++--- .../icons/iconsDay/heavyDrizzle.jsx | 20 ++-- .../components/icons/iconsDay/heavyRain.jsx | 32 +++---- .../components/icons/iconsDay/heavySnow.jsx | 24 ++--- .../components/icons/iconsDay/icyDrizzle.jsx | 24 ++--- .../src/components/icons/iconsDay/icyFog.jsx | 28 +++--- .../src/components/icons/iconsDay/icyRain.jsx | 36 +++---- .../src/components/icons/iconsDay/index.js | 2 + .../icons/iconsDay/lightDrizzle.jsx | 28 +++--- .../icons/iconsDay/lightIcyDrizzle.jsx | 32 +++---- .../icons/iconsDay/lightIcyRain.jsx | 32 +++---- .../components/icons/iconsDay/lightRain.jsx | 28 +++--- .../components/icons/iconsDay/lightSnow.jsx | 16 ++-- .../icons/iconsDay/moderateRain.jsx | 28 +++--- .../icons/iconsDay/moderateSnow.jsx | 20 ++-- .../components/icons/iconsDay/mostlyClear.jsx | 52 +++++------ .../components/icons/iconsDay/overcast.jsx | 12 +-- .../icons/iconsDay/partlyCloudy.jsx | 48 +++++----- .../components/icons/iconsDay/snowGrain.jsx | 8 +- .../src/components/icons/iconsDay/sunrise.jsx | 93 +++++++++++++++++++ .../icons/iconsDay/thunderstorm.jsx | 28 +++--- .../icons/iconsDay/thunderstormHail.jsx | 44 ++++----- .../src/components/icons/iconsNight/clear.jsx | 12 +-- .../src/components/icons/iconsNight/fog.jsx | 24 ++--- .../icons/iconsNight/heavyDrizzle.jsx | 20 ++-- .../components/icons/iconsNight/heavyRain.jsx | 32 +++---- .../components/icons/iconsNight/heavySnow.jsx | 24 ++--- .../icons/iconsNight/icyDrizzle.jsx | 24 ++--- .../components/icons/iconsNight/icyFog.jsx | 28 +++--- .../components/icons/iconsNight/icyRain.jsx | 36 +++---- .../src/components/icons/iconsNight/index.js | 2 + .../icons/iconsNight/lightDrizzle.jsx | 28 +++--- .../icons/iconsNight/lightIcyDrizzle.jsx | 32 +++---- .../icons/iconsNight/lightIcyRain.jsx | 32 +++---- .../components/icons/iconsNight/lightRain.jsx | 28 +++--- .../components/icons/iconsNight/lightSnow.jsx | 16 ++-- .../icons/iconsNight/moderateRain.jsx | 28 +++--- .../icons/iconsNight/moredateSnow.jsx | 20 ++-- .../icons/iconsNight/mostlyClear.jsx | 28 +++--- .../components/icons/iconsNight/overcast.jsx | 12 +-- .../icons/iconsNight/partlyCloudy.jsx | 64 ++++++------- .../components/icons/iconsNight/snowGrain.jsx | 8 +- .../components/icons/iconsNight/sunset.jsx | 89 ++++++++++++++++++ .../icons/iconsNight/thunderstorm.jsx | 28 +++--- .../icons/iconsNight/thunderstormHail.jsx | 44 ++++----- .../logic-weather/updateWeatherForLocation.js | 2 +- .../pages/authenticatedPages/Dashboard.jsx | 32 +++++-- 54 files changed, 824 insertions(+), 613 deletions(-) create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsDay/sunrise.jsx create mode 100644 staff/angela-bernaldez/project/app/src/components/icons/iconsNight/sunset.jsx diff --git a/staff/angela-bernaldez/project/api/index.js b/staff/angela-bernaldez/project/api/index.js index d22db6b42..910f5c1f2 100644 --- a/staff/angela-bernaldez/project/api/index.js +++ b/staff/angela-bernaldez/project/api/index.js @@ -38,7 +38,7 @@ mongoose.connect(process.env.MONGO_URI) server.post('/users/weather-data', verifyToken, jsonBodyParser, handlersWeather.retrieveWeatherData) - server.put('/users/weather-data', verifyToken, jsonBodyParser, handlersWeather.updateWeatherForLocation) + server.patch('/users/weather-data', verifyToken, jsonBodyParser, handlersWeather.updateWeatherForLocation) server.use(errorHandler) diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx index f0b3a53a0..ece42db7e 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/CurrentLocationBox.jsx @@ -72,6 +72,4 @@ function CurrentLocationBox({ currentLocation }) { } - - export default CurrentLocationBox \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx index 6a793c74f..154988c2a 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/LocationCard.jsx @@ -1,18 +1,21 @@ -function LocationCard({locationName, temperature}) { - // I guess I´d need to pass as an argument of this function the location data - // location name, min and max temperature, etc. +import getWeatherIcon from '../../logic-weather/getWeatherIcon' - // this component is to be called once for each favlocation for a specfic user +function LocationCard({ locationData }) { return ( -
-
-

{locationName}

+
+ {/* Contenedor principal de la información */} +
+

{locationData.name}

+

{locationData.current.temperature_2m}°C

-
-

{temperature}

+ + {/* Icono del clima */} +
+ {getWeatherIcon(locationData.current.weather_code)}
) } + export default LocationCard \ No newline at end of file diff --git a/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx b/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx index f6478a5f4..446a0b793 100644 --- a/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Cards/SunInfoBox.jsx @@ -1,3 +1,7 @@ +import iconsDay from '../icons/iconsDay' +import iconsNight from '../icons/iconsNight' + + function secondsToHoursMinutes(seconds) { const hours = Math.floor(seconds / 3600) const minutes = Math.floor((seconds % 3600) / 60) @@ -13,16 +17,21 @@ function getDateFromTimeString(timeString) { function SunInfoBox({ currentLocation }) { - console.log(currentLocation.dailyForecast) return (
- 🌅 Sunrise
+ 🌅 Sunrise +
+ +
{getDateFromTimeString(currentLocation.dailyForecast.sunrise[0])}
- 🌇 Sunset
+ 🌇 Sunset +
+ +
{getDateFromTimeString(currentLocation.dailyForecast.sunset[0])}
diff --git a/staff/angela-bernaldez/project/app/src/components/Others/Header.jsx b/staff/angela-bernaldez/project/app/src/components/Others/Header.jsx index 7d700d974..a9a4cf5ee 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/Header.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/Header.jsx @@ -6,16 +6,19 @@ function Header({ setStamp }) { return (
-
+

🌤️ Weather App

{location.pathname === '/dashboard' ? ( -
+
) : null} +
+ boton de log out +
) diff --git a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx index 7bbc93160..0e73cdc29 100644 --- a/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx +++ b/staff/angela-bernaldez/project/app/src/components/Others/LocationSearchBox.jsx @@ -56,7 +56,7 @@ function LocationSearchBox({ setStamp }) { } return ( -
+