diff --git a/.dockerignore b/.dockerignore index 5bb5709..2d29730 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,9 +1,11 @@ /.git +/.gitea /.github +/bundle /node_modules /target -.dockerignore +/.dockerignore /docker-compose-dev.yaml /docker-compose-prod.yaml /docker-compose.yaml diff --git a/.env.dev b/.env.dev index 5e21dd0..487e456 100644 --- a/.env.dev +++ b/.env.dev @@ -1,2 +1,2 @@ -DATABASE_URL=postgres://app:app@db/todo_baggins LANGUAGE_CODE=en-US +MOBILE_SERVER_URL= diff --git a/.github/workflows/rust-check.yaml b/.github/workflows/rust-check.yaml index 386ac6b..a676a51 100644 --- a/.github/workflows/rust-check.yaml +++ b/.github/workflows/rust-check.yaml @@ -34,9 +34,7 @@ jobs: with: fetch-depth: 0 - name: .env symlink creation - run: ln -s .env.example .env - - name: npm build - run: npm install && npm run build + run: ln -s .env.dev .env - name: rustfmt check run: cargo fmt --all --check - name: Clippy check diff --git a/.gitignore b/.gitignore index c91900d..d89c005 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ +/.env + +/docker-compose.yaml + /node_modules /target +/bundle /**/*.rs.bk /.DS_Store -/.env -/.env.prod - -/docker-compose.yaml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b58b603..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index ee2ed39..0000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123..0000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml deleted file mode 100644 index d0d7ee8..0000000 --- a/.idea/dataSources.local.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - " - - - master_key - app - - - - - - - - - - \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml deleted file mode 100644 index 3c9bcff..0000000 --- a/.idea/dataSources.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - postgresql - true - org.postgresql.Driver - jdbc:postgresql://localhost:5432/todo_baggins - $ProjectFileDir$ - - - \ No newline at end of file diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml deleted file mode 100644 index df15cc8..0000000 --- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml +++ /dev/null @@ -1,5170 +0,0 @@ - - - - - mdy - 1||-9223372036854775808|c|G -1||10|c|G -1||10|C|G -1||10|T|G -4||-9223372036854775808|c|G -4||10|c|G -4||10|C|G -4||10|T|G - 946 - 16.4 - 1738185155 - true ACDT -true ACSST -false ACST -false ACT -false ACWST -true ADT -true AEDT -true AESST -false AEST -false AFT -true AKDT -false AKST -true ALMST -false ALMT -false AMST -false AMT -false ANAST -false ANAT -false ARST -false ART -false AST -true AWSST -false AWST -true AZOST -false AZOT -false AZST -false AZT -false Africa/Abidjan -false Africa/Accra -false Africa/Addis_Ababa -false Africa/Algiers -false Africa/Asmara -false Africa/Asmera -false Africa/Bamako -false Africa/Bangui -false Africa/Banjul -false Africa/Bissau -false Africa/Blantyre -false Africa/Brazzaville -false Africa/Bujumbura -false Africa/Cairo -false Africa/Casablanca -false Africa/Ceuta -false Africa/Conakry -false Africa/Dakar -false Africa/Dar_es_Salaam -false Africa/Djibouti -false Africa/Douala -false Africa/El_Aaiun -false Africa/Freetown -false Africa/Gaborone -false Africa/Harare -false Africa/Johannesburg -false Africa/Juba -false Africa/Kampala -false Africa/Khartoum -false Africa/Kigali -false Africa/Kinshasa -false Africa/Lagos -false Africa/Libreville -false Africa/Lome -false Africa/Luanda -false Africa/Lubumbashi -false Africa/Lusaka -false Africa/Malabo -false Africa/Maputo -false Africa/Maseru -false Africa/Mbabane -false Africa/Mogadishu -false Africa/Monrovia -false Africa/Nairobi -false Africa/Ndjamena -false Africa/Niamey -false Africa/Nouakchott -false Africa/Ouagadougou -false Africa/Porto-Novo -false Africa/Sao_Tome -false Africa/Timbuktu -false Africa/Tripoli -false Africa/Tunis -false Africa/Windhoek -false America/Adak -false America/Anchorage -false America/Anguilla -false America/Antigua -false America/Araguaina -false America/Argentina/Buenos_Aires -false America/Argentina/Catamarca -false America/Argentina/ComodRivadavia -false America/Argentina/Cordoba -false America/Argentina/Jujuy -false America/Argentina/La_Rioja -false America/Argentina/Mendoza -false America/Argentina/Rio_Gallegos -false America/Argentina/Salta -false America/Argentina/San_Juan -false America/Argentina/San_Luis -false America/Argentina/Tucuman -false America/Argentina/Ushuaia -false America/Aruba -true America/Asuncion -false America/Atikokan -false America/Atka -false America/Bahia -false America/Bahia_Banderas -false America/Barbados -false America/Belem -false America/Belize -false America/Blanc-Sablon -false America/Boa_Vista -false America/Bogota -false America/Boise -false America/Buenos_Aires -false America/Cambridge_Bay -false America/Campo_Grande -false America/Cancun -false America/Caracas -false America/Catamarca -false America/Cayenne -false America/Cayman -false America/Chicago -false America/Chihuahua -false America/Ciudad_Juarez -false America/Coral_Harbour -false America/Cordoba -false America/Costa_Rica -false America/Creston -false America/Cuiaba -false America/Curacao -false America/Danmarkshavn -false America/Dawson -false America/Dawson_Creek -false America/Denver -false America/Detroit -false America/Dominica -false America/Edmonton -false America/Eirunepe -false America/El_Salvador -false America/Ensenada -false America/Fort_Nelson -false America/Fort_Wayne -false America/Fortaleza -false America/Glace_Bay -false America/Godthab -false America/Goose_Bay -false America/Grand_Turk -false America/Grenada -false America/Guadeloupe -false America/Guatemala -false America/Guayaquil -false America/Guyana -false America/Halifax -false America/Havana -false America/Hermosillo -false America/Indiana/Indianapolis -false America/Indiana/Knox -false America/Indiana/Marengo -false America/Indiana/Petersburg -false America/Indiana/Tell_City -false America/Indiana/Vevay -false America/Indiana/Vincennes -false America/Indiana/Winamac -false America/Indianapolis -false America/Inuvik -false America/Iqaluit -false America/Jamaica -false America/Jujuy -false America/Juneau -false America/Kentucky/Louisville -false America/Kentucky/Monticello -false America/Knox_IN -false America/Kralendijk -false America/La_Paz -false America/Lima -false America/Los_Angeles -false America/Louisville -false America/Lower_Princes -false America/Maceio -false America/Managua -false America/Manaus -false America/Marigot -false America/Martinique -false America/Matamoros -false America/Mazatlan -false America/Mendoza -false America/Menominee -false America/Merida -false America/Metlakatla -false America/Mexico_City -false America/Miquelon -false America/Moncton -false America/Monterrey -false America/Montevideo -false America/Montreal -false America/Montserrat -false America/Nassau -false America/New_York -false America/Nipigon -false America/Nome -false America/Noronha -false America/North_Dakota/Beulah -false America/North_Dakota/Center -false America/North_Dakota/New_Salem -false America/Nuuk -false America/Ojinaga -false America/Panama -false America/Pangnirtung -false America/Paramaribo -false America/Phoenix -false America/Port-au-Prince -false America/Port_of_Spain -false America/Porto_Acre -false America/Porto_Velho -false America/Puerto_Rico -false America/Punta_Arenas -false America/Rainy_River -false America/Rankin_Inlet -false America/Recife -false America/Regina -false America/Resolute -false America/Rio_Branco -false America/Rosario -false America/Santa_Isabel -false America/Santarem -true America/Santiago -false America/Santo_Domingo -false America/Sao_Paulo -false America/Scoresbysund -false America/Shiprock -false America/Sitka -false America/St_Barthelemy -false America/St_Johns -false America/St_Kitts -false America/St_Lucia -false America/St_Thomas -false America/St_Vincent -false America/Swift_Current -false America/Tegucigalpa -false America/Thule -false America/Thunder_Bay -false America/Tijuana -false America/Toronto -false America/Tortola -false America/Vancouver -false America/Virgin -false America/Whitehorse -false America/Winnipeg -false America/Yakutat -false America/Yellowknife -false Antarctica/Casey -false Antarctica/Davis -false Antarctica/DumontDUrville -true Antarctica/Macquarie -false Antarctica/Mawson -true Antarctica/McMurdo -false Antarctica/Palmer -false Antarctica/Rothera -true Antarctica/South_Pole -false Antarctica/Syowa -false Antarctica/Troll -false Antarctica/Vostok -false Arctic/Longyearbyen -false Asia/Aden -false Asia/Almaty -false Asia/Amman -false Asia/Anadyr -false Asia/Aqtau -false Asia/Aqtobe -false Asia/Ashgabat -false Asia/Ashkhabad -false Asia/Atyrau -false Asia/Baghdad -false Asia/Bahrain -false Asia/Baku -false Asia/Bangkok -false Asia/Barnaul -false Asia/Beirut -false Asia/Bishkek -false Asia/Brunei -false Asia/Calcutta -false Asia/Chita -false Asia/Choibalsan -false Asia/Chongqing -false Asia/Chungking -false Asia/Colombo -false Asia/Dacca -false Asia/Damascus -false Asia/Dhaka -false Asia/Dili -false Asia/Dubai -false Asia/Dushanbe -false Asia/Famagusta -false Asia/Gaza -false Asia/Harbin -false Asia/Hebron -false Asia/Ho_Chi_Minh -false Asia/Hong_Kong -false Asia/Hovd -false Asia/Irkutsk -false Asia/Istanbul -false Asia/Jakarta -false Asia/Jayapura -false Asia/Jerusalem -false Asia/Kabul -false Asia/Kamchatka -false Asia/Karachi -false Asia/Kashgar -false Asia/Kathmandu -false Asia/Katmandu -false Asia/Khandyga -false Asia/Kolkata -false Asia/Krasnoyarsk -false Asia/Kuala_Lumpur -false Asia/Kuching -false Asia/Kuwait -false Asia/Macao -false Asia/Macau -false Asia/Magadan -false Asia/Makassar -false Asia/Manila -false Asia/Muscat -false Asia/Nicosia -false Asia/Novokuznetsk -false Asia/Novosibirsk -false Asia/Omsk -false Asia/Oral -false Asia/Phnom_Penh -false Asia/Pontianak -false Asia/Pyongyang -false Asia/Qatar -false Asia/Qostanay -false Asia/Qyzylorda -false Asia/Rangoon -false Asia/Riyadh -false Asia/Saigon -false Asia/Sakhalin -false Asia/Samarkand -false Asia/Seoul -false Asia/Shanghai -false Asia/Singapore -false Asia/Srednekolymsk -false Asia/Taipei -false Asia/Tashkent -false Asia/Tbilisi -false Asia/Tehran -false Asia/Tel_Aviv -false Asia/Thimbu -false Asia/Thimphu -false Asia/Tokyo -false Asia/Tomsk -false Asia/Ujung_Pandang -false Asia/Ulaanbaatar -false Asia/Ulan_Bator -false Asia/Urumqi -false Asia/Ust-Nera -false Asia/Vientiane -false Asia/Vladivostok -false Asia/Yakutsk -false Asia/Yangon -false Asia/Yekaterinburg -false Asia/Yerevan -false Atlantic/Azores -false Atlantic/Bermuda -false Atlantic/Canary -false Atlantic/Cape_Verde -false Atlantic/Faeroe -false Atlantic/Faroe -false Atlantic/Jan_Mayen -false Atlantic/Madeira -false Atlantic/Reykjavik -false Atlantic/South_Georgia -false Atlantic/St_Helena -false Atlantic/Stanley -true Australia/ACT -true Australia/Adelaide -false Australia/Brisbane -true Australia/Broken_Hill -true Australia/Canberra -true Australia/Currie -false Australia/Darwin -false Australia/Eucla -true Australia/Hobart -true Australia/LHI -false Australia/Lindeman -true Australia/Lord_Howe -true Australia/Melbourne -true Australia/NSW -false Australia/North -false Australia/Perth -false Australia/Queensland -true Australia/South -true Australia/Sydney -true Australia/Tasmania -true Australia/Victoria -false Australia/West -true Australia/Yancowinna -true BDST -false BDT -false BNT -false BORT -false BOT -false BRA -true BRST -false BRT -true BST -false BTT -false Brazil/Acre -false Brazil/DeNoronha -false Brazil/East -false Brazil/West -true CADT -false CAST -false CCT -true CDT -true CEST -false CET -true CETDST -true CHADT -false CHAST -false CHUT -false CKT -true CLST -true CLT -false COT -false CST -false CST6CDT -false CXT -false Canada/Atlantic -false Canada/Central -false Canada/Eastern -false Canada/Mountain -false Canada/Newfoundland -false Canada/Pacific -false Canada/Saskatchewan -false Canada/Yukon -true Chile/Continental -true Chile/EasterIsland -false Cuba -false DAVT -false DDUT -true EASST -true EAST -false EAT -true EDT -true EEST -false EET -true EETDST -true EGST -false EGT -false EST -false EST5EDT -false Egypt -true Eire -false Etc/GMT -false Etc/GMT+0 -false Etc/GMT+1 -false Etc/GMT+10 -false Etc/GMT+11 -false Etc/GMT+12 -false Etc/GMT+2 -false Etc/GMT+3 -false Etc/GMT+4 -false Etc/GMT+5 -false Etc/GMT+6 -false Etc/GMT+7 -false Etc/GMT+8 -false Etc/GMT+9 -false Etc/GMT-0 -false Etc/GMT-1 -false Etc/GMT-10 -false Etc/GMT-11 -false Etc/GMT-12 -false Etc/GMT-13 -false Etc/GMT-14 -false Etc/GMT-2 -false Etc/GMT-3 -false Etc/GMT-4 -false Etc/GMT-5 -false Etc/GMT-6 -false Etc/GMT-7 -false Etc/GMT-8 -false Etc/GMT-9 -false Etc/GMT0 -false Etc/Greenwich -false Etc/UCT -false Etc/UTC -false Etc/Universal -false Etc/Zulu -false Europe/Amsterdam -false Europe/Andorra -false Europe/Astrakhan -false Europe/Athens -false Europe/Belfast -false Europe/Belgrade -false Europe/Berlin -false Europe/Bratislava -false Europe/Brussels -false Europe/Bucharest -false Europe/Budapest -false Europe/Busingen -false Europe/Chisinau -false Europe/Copenhagen -true Europe/Dublin -false Europe/Gibraltar -false Europe/Guernsey -false Europe/Helsinki -false Europe/Isle_of_Man -false Europe/Istanbul -false Europe/Jersey -false Europe/Kaliningrad -false Europe/Kiev -false Europe/Kirov -false Europe/Kyiv -false Europe/Lisbon -false Europe/Ljubljana -false Europe/London -false Europe/Luxembourg -false Europe/Madrid -false Europe/Malta -false Europe/Mariehamn -false Europe/Minsk -false Europe/Monaco -false Europe/Moscow -false Europe/Nicosia -false Europe/Oslo -false Europe/Paris -false Europe/Podgorica -false Europe/Prague -false Europe/Riga -false Europe/Rome -false Europe/Samara -false Europe/San_Marino -false Europe/Sarajevo -false Europe/Saratov -false Europe/Simferopol -false Europe/Skopje -false Europe/Sofia -false Europe/Stockholm -false Europe/Tallinn -false Europe/Tirane -false Europe/Tiraspol -false Europe/Ulyanovsk -false Europe/Uzhgorod -false Europe/Vaduz -false Europe/Vatican -false Europe/Vienna -false Europe/Vilnius -false Europe/Volgograd -false Europe/Warsaw -false Europe/Zagreb -false Europe/Zaporozhye -false Europe/Zurich -false FET -true FJST -false FJT -false FKST -false FKT -true FNST -false FNT -false Factory -false GALT -false GAMT -false GB -false GB-Eire -false GEST -false GET -false GFT -false GILT -false GMT -false GMT+0 -false GMT-0 -false GMT0 -false GYT -false Greenwich -false HKT -false HST -false Hongkong -false ICT -true IDT -false IOT -false IRKST -false IRKT -false IRT -false IST -false Iceland -false Indian/Antananarivo -false Indian/Chagos -false Indian/Christmas -false Indian/Cocos -false Indian/Comoro -false Indian/Kerguelen -false Indian/Mahe -false Indian/Maldives -false Indian/Mauritius -false Indian/Mayotte -false Indian/Reunion -false Iran -false Israel -false JAYT -false JST -false Jamaica -false Japan -true KDT -true KGST -false KGT -false KOST -false KRAST -false KRAT -false KST -false Kwajalein -true LHDT -false LHST -false LIGT -false LINT -false LKT -false Libya -false MAGST -false MAGT -false MART -false MAWT -true MDT -true MEST -true MESZ -false MET -true METDST -false MEZ -false MHT -false MMT -false MPT -true MSD -false MSK -false MST -false MST7MDT -true MUST -false MUT -false MVT -false MYT -false Mexico/BajaNorte -false Mexico/BajaSur -false Mexico/General -true NDT -false NFT -false NOVST -false NOVT -false NPT -false NST -false NUT -true NZ -true NZ-CHAT -true NZDT -false NZST -false NZT -false Navajo -false OMSST -false OMST -true PDT -false PET -false PETST -false PETT -false PGT -false PHT -true PKST -false PKT -true PMDT -false PMST -false PONT -false PRC -false PST -false PST8PDT -false PWT -true PYST -true PYT -false Pacific/Apia -true Pacific/Auckland -false Pacific/Bougainville -true Pacific/Chatham -false Pacific/Chuuk -true Pacific/Easter -false Pacific/Efate -false Pacific/Enderbury -false Pacific/Fakaofo -false Pacific/Fiji -false Pacific/Funafuti -false Pacific/Galapagos -false Pacific/Gambier -false Pacific/Guadalcanal -false Pacific/Guam -false Pacific/Honolulu -false Pacific/Johnston -false Pacific/Kanton -false Pacific/Kiritimati -false Pacific/Kosrae -false Pacific/Kwajalein -false Pacific/Majuro -false Pacific/Marquesas -false Pacific/Midway -false Pacific/Nauru -false Pacific/Niue -true Pacific/Norfolk -false Pacific/Noumea -false Pacific/Pago_Pago -false Pacific/Palau -false Pacific/Pitcairn -false Pacific/Pohnpei -false Pacific/Ponape -false Pacific/Port_Moresby -false Pacific/Rarotonga -false Pacific/Saipan -false Pacific/Samoa -false Pacific/Tahiti -false Pacific/Tarawa -false Pacific/Tongatapu -false Pacific/Truk -false Pacific/Wake -false Pacific/Wallis -false Pacific/Yap -false Poland -false Portugal -false RET -false ROC -false ROK -true SADT -false SAST -false SCT -false SGT -false Singapore -false TAHT -false TFT -false TJT -false TKT -false TMT -false TOT -false TRUT -false TVT -false Turkey -false UCT -true ULAST -false ULAT -false US/Alaska -false US/Aleutian -false US/Arizona -false US/Central -false US/East-Indiana -false US/Eastern -false US/Hawaii -false US/Indiana-Starke -false US/Michigan -false US/Mountain -false US/Pacific -false US/Samoa -false UT -false UTC -true UYST -false UYT -true UZST -false UZT -false Universal -false VET -false VLAST -false VLAT -false VOLT -false VUT -false W-SU -true WADT -false WAKT -false WAST -false WAT -true WDT -false WET -true WETDST -false WFT -true WGST -false WGT -false XJT -false YAKST -false YAKT -false YAPT -true YEKST -false YEKT -false Z -false Zulu -false localtime -false posix/Africa/Abidjan -false posix/Africa/Accra -false posix/Africa/Addis_Ababa -false posix/Africa/Algiers -false posix/Africa/Asmara -false posix/Africa/Asmera -false posix/Africa/Bamako -false posix/Africa/Bangui -false posix/Africa/Banjul -false posix/Africa/Bissau -false posix/Africa/Blantyre -false posix/Africa/Brazzaville -false posix/Africa/Bujumbura -false posix/Africa/Cairo -false posix/Africa/Casablanca -false posix/Africa/Ceuta -false posix/Africa/Conakry -false posix/Africa/Dakar -false posix/Africa/Dar_es_Salaam -false posix/Africa/Djibouti -false posix/Africa/Douala -false posix/Africa/El_Aaiun -false posix/Africa/Freetown -false posix/Africa/Gaborone -false posix/Africa/Harare -false posix/Africa/Johannesburg -false posix/Africa/Juba -false posix/Africa/Kampala -false posix/Africa/Khartoum -false posix/Africa/Kigali -false posix/Africa/Kinshasa -false posix/Africa/Lagos -false posix/Africa/Libreville -false posix/Africa/Lome -false posix/Africa/Luanda -false posix/Africa/Lubumbashi -false posix/Africa/Lusaka -false posix/Africa/Malabo -false posix/Africa/Maputo -false posix/Africa/Maseru -false posix/Africa/Mbabane -false posix/Africa/Mogadishu -false posix/Africa/Monrovia -false posix/Africa/Nairobi -false posix/Africa/Ndjamena -false posix/Africa/Niamey -false posix/Africa/Nouakchott -false posix/Africa/Ouagadougou -false posix/Africa/Porto-Novo -false posix/Africa/Sao_Tome -false posix/Africa/Timbuktu -false posix/Africa/Tripoli -false posix/Africa/Tunis -false posix/Africa/Windhoek -false posix/America/Adak -false posix/America/Anchorage -false posix/America/Anguilla -false posix/America/Antigua -false posix/America/Araguaina -false posix/America/Argentina/Buenos_Aires -false posix/America/Argentina/Catamarca -false posix/America/Argentina/ComodRivadavia -false posix/America/Argentina/Cordoba -false posix/America/Argentina/Jujuy -false posix/America/Argentina/La_Rioja -false posix/America/Argentina/Mendoza -false posix/America/Argentina/Rio_Gallegos -false posix/America/Argentina/Salta -false posix/America/Argentina/San_Juan -false posix/America/Argentina/San_Luis -false posix/America/Argentina/Tucuman -false posix/America/Argentina/Ushuaia -false posix/America/Aruba -true posix/America/Asuncion -false posix/America/Atikokan -false posix/America/Atka -false posix/America/Bahia -false posix/America/Bahia_Banderas -false posix/America/Barbados -false posix/America/Belem -false posix/America/Belize -false posix/America/Blanc-Sablon -false posix/America/Boa_Vista -false posix/America/Bogota -false posix/America/Boise -false posix/America/Buenos_Aires -false posix/America/Cambridge_Bay -false posix/America/Campo_Grande -false posix/America/Cancun -false posix/America/Caracas -false posix/America/Catamarca -false posix/America/Cayenne -false posix/America/Cayman -false posix/America/Chicago -false posix/America/Chihuahua -false posix/America/Ciudad_Juarez -false posix/America/Coral_Harbour -false posix/America/Cordoba -false posix/America/Costa_Rica -false posix/America/Creston -false posix/America/Cuiaba -false posix/America/Curacao -false posix/America/Danmarkshavn -false posix/America/Dawson -false posix/America/Dawson_Creek -false posix/America/Denver -false posix/America/Detroit -false posix/America/Dominica -false posix/America/Edmonton -false posix/America/Eirunepe -false posix/America/El_Salvador -false posix/America/Ensenada -false posix/America/Fort_Nelson -false posix/America/Fort_Wayne -false posix/America/Fortaleza -false posix/America/Glace_Bay -false posix/America/Godthab -false posix/America/Goose_Bay -false posix/America/Grand_Turk -false posix/America/Grenada -false posix/America/Guadeloupe -false posix/America/Guatemala -false posix/America/Guayaquil -false posix/America/Guyana -false posix/America/Halifax -false posix/America/Havana -false posix/America/Hermosillo -false posix/America/Indiana/Indianapolis -false posix/America/Indiana/Knox -false posix/America/Indiana/Marengo -false posix/America/Indiana/Petersburg -false posix/America/Indiana/Tell_City -false posix/America/Indiana/Vevay -false posix/America/Indiana/Vincennes -false posix/America/Indiana/Winamac -false posix/America/Indianapolis -false posix/America/Inuvik -false posix/America/Iqaluit -false posix/America/Jamaica -false posix/America/Jujuy -false posix/America/Juneau -false posix/America/Kentucky/Louisville -false posix/America/Kentucky/Monticello -false posix/America/Knox_IN -false posix/America/Kralendijk -false posix/America/La_Paz -false posix/America/Lima -false posix/America/Los_Angeles -false posix/America/Louisville -false posix/America/Lower_Princes -false posix/America/Maceio -false posix/America/Managua -false posix/America/Manaus -false posix/America/Marigot -false posix/America/Martinique -false posix/America/Matamoros -false posix/America/Mazatlan -false posix/America/Mendoza -false posix/America/Menominee -false posix/America/Merida -false posix/America/Metlakatla -false posix/America/Mexico_City -false posix/America/Miquelon -false posix/America/Moncton -false posix/America/Monterrey -false posix/America/Montevideo -false posix/America/Montreal -false posix/America/Montserrat -false posix/America/Nassau -false posix/America/New_York -false posix/America/Nipigon -false posix/America/Nome -false posix/America/Noronha -false posix/America/North_Dakota/Beulah -false posix/America/North_Dakota/Center -false posix/America/North_Dakota/New_Salem -false posix/America/Nuuk -false posix/America/Ojinaga -false posix/America/Panama -false posix/America/Pangnirtung -false posix/America/Paramaribo -false posix/America/Phoenix -false posix/America/Port-au-Prince -false posix/America/Port_of_Spain -false posix/America/Porto_Acre -false posix/America/Porto_Velho -false posix/America/Puerto_Rico -false posix/America/Punta_Arenas -false posix/America/Rainy_River -false posix/America/Rankin_Inlet -false posix/America/Recife -false posix/America/Regina -false posix/America/Resolute -false posix/America/Rio_Branco -false posix/America/Rosario -false posix/America/Santa_Isabel -false posix/America/Santarem -true posix/America/Santiago -false posix/America/Santo_Domingo -false posix/America/Sao_Paulo -false posix/America/Scoresbysund -false posix/America/Shiprock -false posix/America/Sitka -false posix/America/St_Barthelemy -false posix/America/St_Johns -false posix/America/St_Kitts -false posix/America/St_Lucia -false posix/America/St_Thomas -false posix/America/St_Vincent -false posix/America/Swift_Current -false posix/America/Tegucigalpa -false posix/America/Thule -false posix/America/Thunder_Bay -false posix/America/Tijuana -false posix/America/Toronto -false posix/America/Tortola -false posix/America/Vancouver -false posix/America/Virgin -false posix/America/Whitehorse -false posix/America/Winnipeg -false posix/America/Yakutat -false posix/America/Yellowknife -false posix/Antarctica/Casey -false posix/Antarctica/Davis -false posix/Antarctica/DumontDUrville -true posix/Antarctica/Macquarie -false posix/Antarctica/Mawson -true posix/Antarctica/McMurdo -false posix/Antarctica/Palmer -false posix/Antarctica/Rothera -true posix/Antarctica/South_Pole -false posix/Antarctica/Syowa -false posix/Antarctica/Troll -false posix/Antarctica/Vostok -false posix/Arctic/Longyearbyen -false posix/Asia/Aden -false posix/Asia/Almaty -false posix/Asia/Amman -false posix/Asia/Anadyr -false posix/Asia/Aqtau -false posix/Asia/Aqtobe -false posix/Asia/Ashgabat -false posix/Asia/Ashkhabad -false posix/Asia/Atyrau -false posix/Asia/Baghdad -false posix/Asia/Bahrain -false posix/Asia/Baku -false posix/Asia/Bangkok -false posix/Asia/Barnaul -false posix/Asia/Beirut -false posix/Asia/Bishkek -false posix/Asia/Brunei -false posix/Asia/Calcutta -false posix/Asia/Chita -false posix/Asia/Choibalsan -false posix/Asia/Chongqing -false posix/Asia/Chungking -false posix/Asia/Colombo -false posix/Asia/Dacca -false posix/Asia/Damascus -false posix/Asia/Dhaka -false posix/Asia/Dili -false posix/Asia/Dubai -false posix/Asia/Dushanbe -false posix/Asia/Famagusta -false posix/Asia/Gaza -false posix/Asia/Harbin -false posix/Asia/Hebron -false posix/Asia/Ho_Chi_Minh -false posix/Asia/Hong_Kong -false posix/Asia/Hovd -false posix/Asia/Irkutsk -false posix/Asia/Istanbul -false posix/Asia/Jakarta -false posix/Asia/Jayapura -false posix/Asia/Jerusalem -false posix/Asia/Kabul -false posix/Asia/Kamchatka -false posix/Asia/Karachi -false posix/Asia/Kashgar -false posix/Asia/Kathmandu -false posix/Asia/Katmandu -false posix/Asia/Khandyga -false posix/Asia/Kolkata -false posix/Asia/Krasnoyarsk -false posix/Asia/Kuala_Lumpur -false posix/Asia/Kuching -false posix/Asia/Kuwait -false posix/Asia/Macao -false posix/Asia/Macau -false posix/Asia/Magadan -false posix/Asia/Makassar -false posix/Asia/Manila -false posix/Asia/Muscat -false posix/Asia/Nicosia -false posix/Asia/Novokuznetsk -false posix/Asia/Novosibirsk -false posix/Asia/Omsk -false posix/Asia/Oral -false posix/Asia/Phnom_Penh -false posix/Asia/Pontianak -false posix/Asia/Pyongyang -false posix/Asia/Qatar -false posix/Asia/Qostanay -false posix/Asia/Qyzylorda -false posix/Asia/Rangoon -false posix/Asia/Riyadh -false posix/Asia/Saigon -false posix/Asia/Sakhalin -false posix/Asia/Samarkand -false posix/Asia/Seoul -false posix/Asia/Shanghai -false posix/Asia/Singapore -false posix/Asia/Srednekolymsk -false posix/Asia/Taipei -false posix/Asia/Tashkent -false posix/Asia/Tbilisi -false posix/Asia/Tehran -false posix/Asia/Tel_Aviv -false posix/Asia/Thimbu -false posix/Asia/Thimphu -false posix/Asia/Tokyo -false posix/Asia/Tomsk -false posix/Asia/Ujung_Pandang -false posix/Asia/Ulaanbaatar -false posix/Asia/Ulan_Bator -false posix/Asia/Urumqi -false posix/Asia/Ust-Nera -false posix/Asia/Vientiane -false posix/Asia/Vladivostok -false posix/Asia/Yakutsk -false posix/Asia/Yangon -false posix/Asia/Yekaterinburg -false posix/Asia/Yerevan -false posix/Atlantic/Azores -false posix/Atlantic/Bermuda -false posix/Atlantic/Canary -false posix/Atlantic/Cape_Verde -false posix/Atlantic/Faeroe -false posix/Atlantic/Faroe -false posix/Atlantic/Jan_Mayen -false posix/Atlantic/Madeira -false posix/Atlantic/Reykjavik -false posix/Atlantic/South_Georgia -false posix/Atlantic/St_Helena -false posix/Atlantic/Stanley -true posix/Australia/ACT -true posix/Australia/Adelaide -false posix/Australia/Brisbane -true posix/Australia/Broken_Hill -true posix/Australia/Canberra -true posix/Australia/Currie -false posix/Australia/Darwin -false posix/Australia/Eucla -true posix/Australia/Hobart -true posix/Australia/LHI -false posix/Australia/Lindeman -true posix/Australia/Lord_Howe -true posix/Australia/Melbourne -true posix/Australia/NSW -false posix/Australia/North -false posix/Australia/Perth -false posix/Australia/Queensland -true posix/Australia/South -true posix/Australia/Sydney -true posix/Australia/Tasmania -true posix/Australia/Victoria -false posix/Australia/West -true posix/Australia/Yancowinna -false posix/Brazil/Acre -false posix/Brazil/DeNoronha -false posix/Brazil/East -false posix/Brazil/West -false posix/CET -false posix/CST6CDT -false posix/Canada/Atlantic -false posix/Canada/Central -false posix/Canada/Eastern -false posix/Canada/Mountain -false posix/Canada/Newfoundland -false posix/Canada/Pacific -false posix/Canada/Saskatchewan -false posix/Canada/Yukon -true posix/Chile/Continental -true posix/Chile/EasterIsland -false posix/Cuba -false posix/EET -false posix/EST -false posix/EST5EDT -false posix/Egypt -true posix/Eire -false posix/Etc/GMT -false posix/Etc/GMT+0 -false posix/Etc/GMT+1 -false posix/Etc/GMT+10 -false posix/Etc/GMT+11 -false posix/Etc/GMT+12 -false posix/Etc/GMT+2 -false posix/Etc/GMT+3 -false posix/Etc/GMT+4 -false posix/Etc/GMT+5 -false posix/Etc/GMT+6 -false posix/Etc/GMT+7 -false posix/Etc/GMT+8 -false posix/Etc/GMT+9 -false posix/Etc/GMT-0 -false posix/Etc/GMT-1 -false posix/Etc/GMT-10 -false posix/Etc/GMT-11 -false posix/Etc/GMT-12 -false posix/Etc/GMT-13 -false posix/Etc/GMT-14 -false posix/Etc/GMT-2 -false posix/Etc/GMT-3 -false posix/Etc/GMT-4 -false posix/Etc/GMT-5 -false posix/Etc/GMT-6 -false posix/Etc/GMT-7 -false posix/Etc/GMT-8 -false posix/Etc/GMT-9 -false posix/Etc/GMT0 -false posix/Etc/Greenwich -false posix/Etc/UCT -false posix/Etc/UTC -false posix/Etc/Universal -false posix/Etc/Zulu -false posix/Europe/Amsterdam -false posix/Europe/Andorra -false posix/Europe/Astrakhan -false posix/Europe/Athens -false posix/Europe/Belfast -false posix/Europe/Belgrade -false posix/Europe/Berlin -false posix/Europe/Bratislava -false posix/Europe/Brussels -false posix/Europe/Bucharest -false posix/Europe/Budapest -false posix/Europe/Busingen -false posix/Europe/Chisinau -false posix/Europe/Copenhagen -true posix/Europe/Dublin -false posix/Europe/Gibraltar -false posix/Europe/Guernsey -false posix/Europe/Helsinki -false posix/Europe/Isle_of_Man -false posix/Europe/Istanbul -false posix/Europe/Jersey -false posix/Europe/Kaliningrad -false posix/Europe/Kiev -false posix/Europe/Kirov -false posix/Europe/Kyiv -false posix/Europe/Lisbon -false posix/Europe/Ljubljana -false posix/Europe/London -false posix/Europe/Luxembourg -false posix/Europe/Madrid -false posix/Europe/Malta -false posix/Europe/Mariehamn -false posix/Europe/Minsk -false posix/Europe/Monaco -false posix/Europe/Moscow -false posix/Europe/Nicosia -false posix/Europe/Oslo -false posix/Europe/Paris -false posix/Europe/Podgorica -false posix/Europe/Prague -false posix/Europe/Riga -false posix/Europe/Rome -false posix/Europe/Samara -false posix/Europe/San_Marino -false posix/Europe/Sarajevo -false posix/Europe/Saratov -false posix/Europe/Simferopol -false posix/Europe/Skopje -false posix/Europe/Sofia -false posix/Europe/Stockholm -false posix/Europe/Tallinn -false posix/Europe/Tirane -false posix/Europe/Tiraspol -false posix/Europe/Ulyanovsk -false posix/Europe/Uzhgorod -false posix/Europe/Vaduz -false posix/Europe/Vatican -false posix/Europe/Vienna -false posix/Europe/Vilnius -false posix/Europe/Volgograd -false posix/Europe/Warsaw -false posix/Europe/Zagreb -false posix/Europe/Zaporozhye -false posix/Europe/Zurich -false posix/Factory -false posix/GB -false posix/GB-Eire -false posix/GMT -false posix/GMT+0 -false posix/GMT-0 -false posix/GMT0 -false posix/Greenwich -false posix/HST -false posix/Hongkong -false posix/Iceland -false posix/Indian/Antananarivo -false posix/Indian/Chagos -false posix/Indian/Christmas -false posix/Indian/Cocos -false posix/Indian/Comoro -false posix/Indian/Kerguelen -false posix/Indian/Mahe -false posix/Indian/Maldives -false posix/Indian/Mauritius -false posix/Indian/Mayotte -false posix/Indian/Reunion -false posix/Iran -false posix/Israel -false posix/Jamaica -false posix/Japan -false posix/Kwajalein -false posix/Libya -false posix/MET -false posix/MST -false posix/MST7MDT -false posix/Mexico/BajaNorte -false posix/Mexico/BajaSur -false posix/Mexico/General -true posix/NZ -true posix/NZ-CHAT -false posix/Navajo -false posix/PRC -false posix/PST8PDT -false posix/Pacific/Apia -true posix/Pacific/Auckland -false posix/Pacific/Bougainville -true posix/Pacific/Chatham -false posix/Pacific/Chuuk -true posix/Pacific/Easter -false posix/Pacific/Efate -false posix/Pacific/Enderbury -false posix/Pacific/Fakaofo -false posix/Pacific/Fiji -false posix/Pacific/Funafuti -false posix/Pacific/Galapagos -false posix/Pacific/Gambier -false posix/Pacific/Guadalcanal -false posix/Pacific/Guam -false posix/Pacific/Honolulu -false posix/Pacific/Johnston -false posix/Pacific/Kanton -false posix/Pacific/Kiritimati -false posix/Pacific/Kosrae -false posix/Pacific/Kwajalein -false posix/Pacific/Majuro -false posix/Pacific/Marquesas -false posix/Pacific/Midway -false posix/Pacific/Nauru -false posix/Pacific/Niue -true posix/Pacific/Norfolk -false posix/Pacific/Noumea -false posix/Pacific/Pago_Pago -false posix/Pacific/Palau -false posix/Pacific/Pitcairn -false posix/Pacific/Pohnpei -false posix/Pacific/Ponape -false posix/Pacific/Port_Moresby -false posix/Pacific/Rarotonga -false posix/Pacific/Saipan -false posix/Pacific/Samoa -false posix/Pacific/Tahiti -false posix/Pacific/Tarawa -false posix/Pacific/Tongatapu -false posix/Pacific/Truk -false posix/Pacific/Wake -false posix/Pacific/Wallis -false posix/Pacific/Yap -false posix/Poland -false posix/Portugal -false posix/ROC -false posix/ROK -false posix/Singapore -false posix/Turkey -false posix/UCT -false posix/US/Alaska -false posix/US/Aleutian -false posix/US/Arizona -false posix/US/Central -false posix/US/East-Indiana -false posix/US/Eastern -false posix/US/Hawaii -false posix/US/Indiana-Starke -false posix/US/Michigan -false posix/US/Mountain -false posix/US/Pacific -false posix/US/Samoa -false posix/UTC -false posix/Universal -false posix/W-SU -false posix/WET -false posix/Zulu -false posixrules - - - - default administrative connection database - 5 - app - - - 1 - 11||10|C|G -11||-9223372036854775808|U|G -11||10|U|G -2200||6171|C|G -2200||-9223372036854775808|U|G -2200||6171|U|G -13212||10|C|G -13212||-9223372036854775808|U|G -13212||10|U|G - 946 - 16384 - app - - - 1 - 1 - 1 - 1 - 10 - 1 - 1 - - - 4544 - - - 6304 - - - 6171 - - - 4571 - - - 3373 - 3374 -3375 -3377 - - - 6181 - - - 3374 - - - 3375 - - - 4569 - - - 4200 - - - 3377 - - - 4550 - - - 6182 - - - 4570 - - - 1663 - 1 - app - - - 1664 - 1 - app - - - block range index (BRIN) access method - 3580 - 1 - index - 335 - brinhandler - pg_catalog - - - b-tree index access method - 403 - 1 - index - 330 - bthandler - pg_catalog - - - GIN index access method - 2742 - 1 - index - 333 - ginhandler - pg_catalog - - - GiST index access method - 783 - 1 - index - 332 - gisthandler - pg_catalog - - - hash index access method - 405 - 1 - index - 331 - hashhandler - pg_catalog - - - heap table access method - 2 - 1 - table - 3 - heap_tableam_handler - pg_catalog - - - SP-GiST index access method - 4000 - 1 - index - 334 - spghandler - pg_catalog - - - explicit - function - 10035 - 1 - 2558 - int4 - pg_catalog - 16 - bool - pg_catalog - 23 - int4 - pg_catalog - - - assignment - function - 10201 - 1 - 2971 - text - pg_catalog - 16 - bool - pg_catalog - 1042 - bpchar - pg_catalog - - - assignment - function - 10191 - 1 - 2971 - text - pg_catalog - 16 - bool - pg_catalog - 25 - text - pg_catalog - - - assignment - function - 10196 - 1 - 2971 - text - pg_catalog - 16 - bool - pg_catalog - 1043 - varchar - pg_catalog - - - explicit - function - 10143 - 1 - 77 - int4 - pg_catalog - 18 - char - pg_catalog - 23 - int4 - pg_catalog - - - assignment - function - 10133 - 1 - 946 - text - pg_catalog - 18 - char - pg_catalog - 1043 - varchar - pg_catalog - - - implicit - function - 10131 - 1 - 946 - text - pg_catalog - 18 - char - pg_catalog - 25 - text - pg_catalog - - - assignment - function - 10132 - 1 - 860 - bpchar - pg_catalog - 18 - char - pg_catalog - 1042 - bpchar - pg_catalog - - - assignment - function - 10135 - 1 - 408 - bpchar - pg_catalog - 19 - name - pg_catalog - 1042 - bpchar - pg_catalog - - - implicit - function - 10134 - 1 - 406 - text - pg_catalog - 19 - name - pg_catalog - 25 - text - pg_catalog - - - assignment - function - 10136 - 1 - 1401 - varchar - pg_catalog - 19 - name - pg_catalog - 1043 - varchar - pg_catalog - - - implicit - function - 10090 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 2206 - regtype - pg_catalog - - - implicit - function - 10060 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 2203 - regoper - pg_catalog - - - implicit - function - 10003 - 1 - 482 - float8 - pg_catalog - 20 - int8 - pg_catalog - 701 - float8 - pg_catalog - - - implicit - function - 10069 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 2204 - regoperator - pg_catalog - - - assignment - function - 10001 - 1 - 480 - int4 - pg_catalog - 20 - int8 - pg_catalog - 23 - int4 - pg_catalog - - - implicit - function - 10044 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 24 - regproc - pg_catalog - - - implicit - function - 10113 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 4096 - regrole - pg_catalog - - - implicit - function - 10120 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 4089 - regnamespace - pg_catalog - - - implicit - function - 10002 - 1 - 652 - float4 - pg_catalog - 20 - int8 - pg_catalog - 700 - float4 - pg_catalog - - - implicit - function - 10104 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 3769 - regdictionary - pg_catalog - - - implicit - function - 10083 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 4191 - regcollation - pg_catalog - - - assignment - function - 10033 - 1 - 3812 - money - pg_catalog - 20 - int8 - pg_catalog - 790 - money - pg_catalog - - - implicit - function - 10037 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 26 - oid - pg_catalog - - - implicit - function - 10097 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 3734 - regconfig - pg_catalog - - - assignment - function - 10000 - 1 - 714 - int2 - pg_catalog - 20 - int8 - pg_catalog - 21 - int2 - pg_catalog - - - explicit - function - 10185 - 1 - 2075 - bit - pg_catalog - 20 - int8 - pg_catalog - 1560 - bit - pg_catalog - - - implicit - function - 10004 - 1 - 1781 - numeric - pg_catalog - 20 - int8 - pg_catalog - 1700 - numeric - pg_catalog - - - implicit - function - 10053 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 2202 - regprocedure - pg_catalog - - - implicit - function - 10076 - 1 - 1287 - oid - pg_catalog - 20 - int8 - pg_catalog - 2205 - regclass - pg_catalog - - - implicit - function - 10045 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 24 - regproc - pg_catalog - - - implicit - function - 10091 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 2206 - regtype - pg_catalog - - - implicit - function - 10084 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 4191 - regcollation - pg_catalog - - - implicit - function - 10070 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 2204 - regoperator - pg_catalog - - - implicit - function - 10038 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 26 - oid - pg_catalog - - - implicit - function - 10009 - 1 - 1782 - numeric - pg_catalog - 21 - int2 - pg_catalog - 1700 - numeric - pg_catalog - - - implicit - function - 10077 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 2205 - regclass - pg_catalog - - - implicit - function - 10006 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 23 - int4 - pg_catalog - - - implicit - function - 10054 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 2202 - regprocedure - pg_catalog - - - implicit - function - 10007 - 1 - 236 - float4 - pg_catalog - 21 - int2 - pg_catalog - 700 - float4 - pg_catalog - - - implicit - function - 10005 - 1 - 754 - int8 - pg_catalog - 21 - int2 - pg_catalog - 20 - int8 - pg_catalog - - - implicit - function - 10114 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 4096 - regrole - pg_catalog - - - implicit - function - 10008 - 1 - 235 - float8 - pg_catalog - 21 - int2 - pg_catalog - 701 - float8 - pg_catalog - - - implicit - function - 10105 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 3769 - regdictionary - pg_catalog - - - implicit - function - 10121 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 4089 - regnamespace - pg_catalog - - - implicit - function - 10061 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 2203 - regoper - pg_catalog - - - implicit - function - 10098 - 1 - 313 - int4 - pg_catalog - 21 - int2 - pg_catalog - 3734 - regconfig - pg_catalog - - - implicit - binary - 10078 - 1 - 23 - int4 - pg_catalog - 2205 - regclass - pg_catalog - - - implicit - binary - 10085 - 1 - 23 - int4 - pg_catalog - 4191 - regcollation - pg_catalog - - - implicit - binary - 10115 - 1 - 23 - int4 - pg_catalog - 4096 - regrole - pg_catalog - - - explicit - function - 10144 - 1 - 78 - char - pg_catalog - 23 - int4 - pg_catalog - 18 - char - pg_catalog - - - implicit - binary - 10122 - 1 - 23 - int4 - pg_catalog - 4089 - regnamespace - pg_catalog - - - implicit - function - 10010 - 1 - 481 - int8 - pg_catalog - 23 - int4 - pg_catalog - 20 - int8 - pg_catalog - - - implicit - binary - 10106 - 1 - 23 - int4 - pg_catalog - 3769 - regdictionary - pg_catalog - - - implicit - binary - 10099 - 1 - 23 - int4 - pg_catalog - 3734 - regconfig - pg_catalog - - - assignment - function - 10011 - 1 - 314 - int2 - pg_catalog - 23 - int4 - pg_catalog - 21 - int2 - pg_catalog - - - implicit - binary - 10092 - 1 - 23 - int4 - pg_catalog - 2206 - regtype - pg_catalog - - - implicit - binary - 10071 - 1 - 23 - int4 - pg_catalog - 2204 - regoperator - pg_catalog - - - implicit - binary - 10062 - 1 - 23 - int4 - pg_catalog - 2203 - regoper - pg_catalog - - - implicit - binary - 10046 - 1 - 23 - int4 - pg_catalog - 24 - regproc - pg_catalog - - - implicit - binary - 10055 - 1 - 23 - int4 - pg_catalog - 2202 - regprocedure - pg_catalog - - - explicit - function - 10034 - 1 - 2557 - bool - pg_catalog - 23 - int4 - pg_catalog - 16 - bool - pg_catalog - - - implicit - function - 10014 - 1 - 1740 - numeric - pg_catalog - 23 - int4 - pg_catalog - 1700 - numeric - pg_catalog - - - implicit - binary - 10039 - 1 - 23 - int4 - pg_catalog - 26 - oid - pg_catalog - - - explicit - function - 10186 - 1 - 1683 - bit - pg_catalog - 23 - int4 - pg_catalog - 1560 - bit - pg_catalog - - - implicit - function - 10012 - 1 - 318 - float4 - pg_catalog - 23 - int4 - pg_catalog - 700 - float4 - pg_catalog - - - implicit - function - 10013 - 1 - 316 - float8 - pg_catalog - 23 - int4 - pg_catalog - 701 - float8 - pg_catalog - - - assignment - function - 10032 - 1 - 3811 - money - pg_catalog - 23 - int4 - pg_catalog - 790 - money - pg_catalog - - - assignment - binary - 10048 - 1 - 24 - regproc - pg_catalog - 23 - int4 - pg_catalog - - - assignment - function - 10047 - 1 - 1288 - int8 - pg_catalog - 24 - regproc - pg_catalog - 20 - int8 - pg_catalog - - - implicit - binary - 10043 - 1 - 24 - regproc - pg_catalog - 26 - oid - pg_catalog - - - implicit - binary - 10049 - 1 - 24 - regproc - pg_catalog - 2202 - regprocedure - pg_catalog - - - implicit - binary - 10125 - 1 - 25 - text - pg_catalog - 1042 - bpchar - pg_catalog - - - implicit - function - 10140 - 1 - 407 - name - pg_catalog - 25 - text - pg_catalog - 19 - name - pg_catalog - - - assignment - function - 10137 - 1 - 944 - char - pg_catalog - 25 - text - pg_catalog - 18 - char - pg_catalog - - - implicit - binary - 10126 - 1 - 25 - text - pg_catalog - 1043 - varchar - pg_catalog - - - explicit - function - 10193 - 1 - 2896 - xml - pg_catalog - 25 - text - pg_catalog - 142 - xml - pg_catalog - - - implicit - function - 10109 - 1 - 1079 - regclass - pg_catalog - 25 - text - pg_catalog - 2205 - regclass - pg_catalog - - - implicit - binary - 10074 - 1 - 26 - oid - pg_catalog - 2205 - regclass - pg_catalog - - - implicit - binary - 10051 - 1 - 26 - oid - pg_catalog - 2202 - regprocedure - pg_catalog - - - implicit - binary - 10095 - 1 - 26 - oid - pg_catalog - 3734 - regconfig - pg_catalog - - - implicit - binary - 10058 - 1 - 26 - oid - pg_catalog - 2203 - regoper - pg_catalog - - - implicit - binary - 10081 - 1 - 26 - oid - pg_catalog - 4191 - regcollation - pg_catalog - - - implicit - binary - 10067 - 1 - 26 - oid - pg_catalog - 2204 - regoperator - pg_catalog - - - implicit - binary - 10042 - 1 - 26 - oid - pg_catalog - 24 - regproc - pg_catalog - - - assignment - function - 10040 - 1 - 1288 - int8 - pg_catalog - 26 - oid - pg_catalog - 20 - int8 - pg_catalog - - - implicit - binary - 10111 - 1 - 26 - oid - pg_catalog - 4096 - regrole - pg_catalog - - - implicit - binary - 10102 - 1 - 26 - oid - pg_catalog - 3769 - regdictionary - pg_catalog - - - implicit - binary - 10088 - 1 - 26 - oid - pg_catalog - 2206 - regtype - pg_catalog - - - assignment - binary - 10041 - 1 - 26 - oid - pg_catalog - 23 - int4 - pg_catalog - - - implicit - binary - 10118 - 1 - 26 - oid - pg_catalog - 4089 - regnamespace - pg_catalog - - - assignment - io - 10214 - 1 - 114 - json - pg_catalog - 3802 - jsonb - pg_catalog - - - assignment - binary - 10202 - 1 - 142 - xml - pg_catalog - 1042 - bpchar - pg_catalog - - - assignment - binary - 10197 - 1 - 142 - xml - pg_catalog - 1043 - varchar - pg_catalog - - - assignment - binary - 10192 - 1 - 142 - xml - pg_catalog - 25 - text - pg_catalog - - - implicit - binary - 10145 - 1 - 194 - pg_node_tree - pg_catalog - 25 - text - pg_catalog - - - assignment - function - 10165 - 1 - 4091 - box - pg_catalog - 600 - point - pg_catalog - 603 - box - pg_catalog - - - explicit - function - 10166 - 1 - 1532 - point - pg_catalog - 601 - lseg - pg_catalog - 600 - point - pg_catalog - - - assignment - function - 10167 - 1 - 1449 - polygon - pg_catalog - 602 - path - pg_catalog - 604 - polygon - pg_catalog - - - explicit - function - 10168 - 1 - 1534 - point - pg_catalog - 603 - box - pg_catalog - 600 - point - pg_catalog - - - explicit - function - 10171 - 1 - 1479 - circle - pg_catalog - 603 - box - pg_catalog - 718 - circle - pg_catalog - - - explicit - function - 10169 - 1 - 1541 - lseg - pg_catalog - 603 - box - pg_catalog - 601 - lseg - pg_catalog - - - assignment - function - 10170 - 1 - 1448 - polygon - pg_catalog - 603 - box - pg_catalog - 604 - polygon - pg_catalog - - - explicit - function - 10172 - 1 - 1540 - point - pg_catalog - 604 - polygon - pg_catalog - 600 - point - pg_catalog - - - explicit - function - 10175 - 1 - 1474 - circle - pg_catalog - 604 - polygon - pg_catalog - 718 - circle - pg_catalog - - - explicit - function - 10174 - 1 - 1446 - box - pg_catalog - 604 - polygon - pg_catalog - 603 - box - pg_catalog - - - assignment - function - 10173 - 1 - 1447 - path - pg_catalog - 604 - polygon - pg_catalog - 602 - path - pg_catalog - - - assignment - function - 10194 - 1 - 730 - text - pg_catalog - 650 - cidr - pg_catalog - 1043 - varchar - pg_catalog - - - assignment - function - 10199 - 1 - 730 - text - pg_catalog - 650 - cidr - pg_catalog - 1042 - bpchar - pg_catalog - - - assignment - function - 10189 - 1 - 730 - text - pg_catalog - 650 - cidr - pg_catalog - 25 - text - pg_catalog - - - implicit - binary - 10181 - 1 - 650 - cidr - pg_catalog - 869 - inet - pg_catalog - - - assignment - function - 10016 - 1 - 238 - int2 - pg_catalog - 700 - float4 - pg_catalog - 21 - int2 - pg_catalog - - - assignment - function - 10015 - 1 - 653 - int8 - pg_catalog - 700 - float4 - pg_catalog - 20 - int8 - pg_catalog - - - implicit - function - 10018 - 1 - 311 - float8 - pg_catalog - 700 - float4 - pg_catalog - 701 - float8 - pg_catalog - - - assignment - function - 10019 - 1 - 1742 - numeric - pg_catalog - 700 - float4 - pg_catalog - 1700 - numeric - pg_catalog - - - assignment - function - 10017 - 1 - 319 - int4 - pg_catalog - 700 - float4 - pg_catalog - 23 - int4 - pg_catalog - - - assignment - function - 10024 - 1 - 1743 - numeric - pg_catalog - 701 - float8 - pg_catalog - 1700 - numeric - pg_catalog - - - assignment - function - 10020 - 1 - 483 - int8 - pg_catalog - 701 - float8 - pg_catalog - 20 - int8 - pg_catalog - - - assignment - function - 10021 - 1 - 237 - int2 - pg_catalog - 701 - float8 - pg_catalog - 21 - int2 - pg_catalog - - - assignment - function - 10022 - 1 - 317 - int4 - pg_catalog - 701 - float8 - pg_catalog - 23 - int4 - pg_catalog - - - assignment - function - 10023 - 1 - 312 - float4 - pg_catalog - 701 - float8 - pg_catalog - 700 - float4 - pg_catalog - - - explicit - function - 10178 - 1 - 1544 - polygon - pg_catalog - 718 - circle - pg_catalog - 604 - polygon - pg_catalog - - - explicit - function - 10176 - 1 - 1416 - point - pg_catalog - 718 - circle - pg_catalog - 600 - point - pg_catalog - - - explicit - function - 10177 - 1 - 1480 - box - pg_catalog - 718 - circle - pg_catalog - 603 - box - pg_catalog - - - implicit - function - 10180 - 1 - 4124 - macaddr - pg_catalog - 774 - macaddr8 - pg_catalog - 829 - macaddr - pg_catalog - - - assignment - function - 10030 - 1 - 3823 - numeric - pg_catalog - 790 - money - pg_catalog - 1700 - numeric - pg_catalog - - - implicit - function - 10179 - 1 - 4123 - macaddr8 - pg_catalog - 829 - macaddr - pg_catalog - 774 - macaddr8 - pg_catalog - - - assignment - function - 10195 - 1 - 730 - text - pg_catalog - 869 - inet - pg_catalog - 1043 - varchar - pg_catalog - - - assignment - function - 10190 - 1 - 730 - text - pg_catalog - 869 - inet - pg_catalog - 25 - text - pg_catalog - - - assignment - function - 10182 - 1 - 1715 - cidr - pg_catalog - 869 - inet - pg_catalog - 650 - cidr - pg_catalog - - - assignment - function - 10200 - 1 - 730 - text - pg_catalog - 869 - inet - pg_catalog - 1042 - bpchar - pg_catalog - - - implicit - function - 10204 - 1 - 668 - bpchar - pg_catalog - 1042 - bpchar - pg_catalog - 1042 - bpchar - pg_catalog - - - implicit - function - 10128 - 1 - 401 - text - pg_catalog - 1042 - bpchar - pg_catalog - 1043 - varchar - pg_catalog - - - explicit - function - 10203 - 1 - 2896 - xml - pg_catalog - 1042 - bpchar - pg_catalog - 142 - xml - pg_catalog - - - implicit - function - 10127 - 1 - 401 - text - pg_catalog - 1042 - bpchar - pg_catalog - 25 - text - pg_catalog - - - assignment - function - 10138 - 1 - 944 - char - pg_catalog - 1042 - bpchar - pg_catalog - 18 - char - pg_catalog - - - implicit - function - 10141 - 1 - 409 - name - pg_catalog - 1042 - bpchar - pg_catalog - 19 - name - pg_catalog - - - implicit - binary - 10129 - 1 - 1043 - varchar - pg_catalog - 25 - text - pg_catalog - - - implicit - function - 10142 - 1 - 1400 - name - pg_catalog - 1043 - varchar - pg_catalog - 19 - name - pg_catalog - - - implicit - binary - 10130 - 1 - 1043 - varchar - pg_catalog - 1042 - bpchar - pg_catalog - - - explicit - function - 10198 - 1 - 2896 - xml - pg_catalog - 1043 - varchar - pg_catalog - 142 - xml - pg_catalog - - - implicit - function - 10110 - 1 - 1079 - regclass - pg_catalog - 1043 - varchar - pg_catalog - 2205 - regclass - pg_catalog - - - implicit - function - 10205 - 1 - 669 - varchar - pg_catalog - 1043 - varchar - pg_catalog - 1043 - varchar - pg_catalog - - - assignment - function - 10139 - 1 - 944 - char - pg_catalog - 1043 - varchar - pg_catalog - 18 - char - pg_catalog - - - implicit - function - 10152 - 1 - 2024 - timestamp - pg_catalog - 1082 - date - pg_catalog - 1114 - timestamp - pg_catalog - - - implicit - function - 10153 - 1 - 1174 - timestamptz - pg_catalog - 1082 - date - pg_catalog - 1184 - timestamptz - pg_catalog - - - implicit - function - 10206 - 1 - 1968 - time - pg_catalog - 1083 - time - pg_catalog - 1083 - time - pg_catalog - - - implicit - function - 10155 - 1 - 2047 - timetz - pg_catalog - 1083 - time - pg_catalog - 1266 - timetz - pg_catalog - - - implicit - function - 10154 - 1 - 1370 - interval - pg_catalog - 1083 - time - pg_catalog - 1186 - interval - pg_catalog - - - implicit - function - 10158 - 1 - 2028 - timestamptz - pg_catalog - 1114 - timestamp - pg_catalog - 1184 - timestamptz - pg_catalog - - - assignment - function - 10156 - 1 - 2029 - date - pg_catalog - 1114 - timestamp - pg_catalog - 1082 - date - pg_catalog - - - assignment - function - 10157 - 1 - 1316 - time - pg_catalog - 1114 - timestamp - pg_catalog - 1083 - time - pg_catalog - - - implicit - function - 10207 - 1 - 1961 - timestamp - pg_catalog - 1114 - timestamp - pg_catalog - 1114 - timestamp - pg_catalog - - - assignment - function - 10159 - 1 - 1178 - date - pg_catalog - 1184 - timestamptz - pg_catalog - 1082 - date - pg_catalog - - - assignment - function - 10162 - 1 - 1388 - timetz - pg_catalog - 1184 - timestamptz - pg_catalog - 1266 - timetz - pg_catalog - - - assignment - function - 10160 - 1 - 2019 - time - pg_catalog - 1184 - timestamptz - pg_catalog - 1083 - time - pg_catalog - - - assignment - function - 10161 - 1 - 2027 - timestamp - pg_catalog - 1184 - timestamptz - pg_catalog - 1114 - timestamp - pg_catalog - - - implicit - function - 10208 - 1 - 1967 - timestamptz - pg_catalog - 1184 - timestamptz - pg_catalog - 1184 - timestamptz - pg_catalog - - - implicit - function - 10209 - 1 - 1200 - interval - pg_catalog - 1186 - interval - pg_catalog - 1186 - interval - pg_catalog - - - assignment - function - 10163 - 1 - 1419 - time - pg_catalog - 1186 - interval - pg_catalog - 1083 - time - pg_catalog - - - assignment - function - 10164 - 1 - 2046 - time - pg_catalog - 1266 - timetz - pg_catalog - 1083 - time - pg_catalog - - - implicit - function - 10210 - 1 - 1969 - timetz - pg_catalog - 1266 - timetz - pg_catalog - 1266 - timetz - pg_catalog - - - explicit - function - 10187 - 1 - 2076 - int8 - pg_catalog - 1560 - bit - pg_catalog - 20 - int8 - pg_catalog - - - implicit - function - 10211 - 1 - 1685 - bit - pg_catalog - 1560 - bit - pg_catalog - 1560 - bit - pg_catalog - - - implicit - binary - 10183 - 1 - 1560 - bit - pg_catalog - 1562 - varbit - pg_catalog - - - explicit - function - 10188 - 1 - 1684 - int4 - pg_catalog - 1560 - bit - pg_catalog - 23 - int4 - pg_catalog - - - implicit - binary - 10184 - 1 - 1562 - varbit - pg_catalog - 1560 - bit - pg_catalog - - - implicit - function - 10212 - 1 - 1687 - varbit - pg_catalog - 1562 - varbit - pg_catalog - 1562 - varbit - pg_catalog - - - assignment - function - 10025 - 1 - 1779 - int8 - pg_catalog - 1700 - numeric - pg_catalog - 20 - int8 - pg_catalog - - - assignment - function - 10026 - 1 - 1783 - int2 - pg_catalog - 1700 - numeric - pg_catalog - 21 - int2 - pg_catalog - - - assignment - function - 10027 - 1 - 1744 - int4 - pg_catalog - 1700 - numeric - pg_catalog - 23 - int4 - pg_catalog - - - implicit - function - 10213 - 1 - 1703 - numeric - pg_catalog - 1700 - numeric - pg_catalog - 1700 - numeric - pg_catalog - - - implicit - function - 10029 - 1 - 1746 - float8 - pg_catalog - 1700 - numeric - pg_catalog - 701 - float8 - pg_catalog - - - assignment - function - 10031 - 1 - 3824 - money - pg_catalog - 1700 - numeric - pg_catalog - 790 - money - pg_catalog - - - implicit - function - 10028 - 1 - 1745 - float4 - pg_catalog - 1700 - numeric - pg_catalog - 700 - float4 - pg_catalog - - - assignment - binary - 10057 - 1 - 2202 - regprocedure - pg_catalog - 23 - int4 - pg_catalog - - - implicit - binary - 10052 - 1 - 2202 - regprocedure - pg_catalog - 26 - oid - pg_catalog - - - assignment - function - 10056 - 1 - 1288 - int8 - pg_catalog - 2202 - regprocedure - pg_catalog - 20 - int8 - pg_catalog - - - implicit - binary - 10050 - 1 - 2202 - regprocedure - pg_catalog - 24 - regproc - pg_catalog - - - implicit - binary - 10065 - 1 - 2203 - regoper - pg_catalog - 2204 - regoperator - pg_catalog - - - assignment - function - 10063 - 1 - 1288 - int8 - pg_catalog - 2203 - regoper - pg_catalog - 20 - int8 - pg_catalog - - - implicit - binary - 10059 - 1 - 2203 - regoper - pg_catalog - 26 - oid - pg_catalog - - - assignment - binary - 10064 - 1 - 2203 - regoper - pg_catalog - 23 - int4 - pg_catalog - - - assignment - binary - 10073 - 1 - 2204 - regoperator - pg_catalog - 23 - int4 - pg_catalog - - - implicit - binary - 10068 - 1 - 2204 - regoperator - pg_catalog - 26 - oid - pg_catalog - - - assignment - function - 10072 - 1 - 1288 - int8 - pg_catalog - 2204 - regoperator - pg_catalog - 20 - int8 - pg_catalog - - - implicit - binary - 10066 - 1 - 2204 - regoperator - pg_catalog - 2203 - regoper - pg_catalog - - - assignment - function - 10079 - 1 - 1288 - int8 - pg_catalog - 2205 - regclass - pg_catalog - 20 - int8 - pg_catalog - - - implicit - binary - 10075 - 1 - 2205 - regclass - pg_catalog - 26 - oid - pg_catalog - - - assignment - binary - 10080 - 1 - 2205 - regclass - pg_catalog - 23 - int4 - pg_catalog - - - assignment - function - 10093 - 1 - 1288 - int8 - pg_catalog - 2206 - regtype - pg_catalog - 20 - int8 - pg_catalog - - - assignment - binary - 10094 - 1 - 2206 - regtype - pg_catalog - 23 - int4 - pg_catalog - - - implicit - binary - 10089 - 1 - 2206 - regtype - pg_catalog - 26 - oid - pg_catalog - - - implicit - binary - 10146 - 1 - 3361 - pg_ndistinct - pg_catalog - 17 - bytea - pg_catalog - - - implicit - io - 10147 - 1 - 3361 - pg_ndistinct - pg_catalog - 25 - text - pg_catalog - - - implicit - binary - 10148 - 1 - 3402 - pg_dependencies - pg_catalog - 17 - bytea - pg_catalog - - - implicit - io - 10149 - 1 - 3402 - pg_dependencies - pg_catalog - 25 - text - pg_catalog - - - implicit - binary - 10096 - 1 - 3734 - regconfig - pg_catalog - 26 - oid - pg_catalog - - - assignment - function - 10100 - 1 - 1288 - int8 - pg_catalog - 3734 - regconfig - pg_catalog - 20 - int8 - pg_catalog - - - assignment - binary - 10101 - 1 - 3734 - regconfig - pg_catalog - 23 - int4 - pg_catalog - - - implicit - binary - 10103 - 1 - 3769 - regdictionary - pg_catalog - 26 - oid - pg_catalog - - - assignment - binary - 10108 - 1 - 3769 - regdictionary - pg_catalog - 23 - int4 - pg_catalog - - - assignment - function - 10107 - 1 - 1288 - int8 - pg_catalog - 3769 - regdictionary - pg_catalog - 20 - int8 - pg_catalog - - - assignment - io - 10215 - 1 - 3802 - jsonb - pg_catalog - 114 - json - pg_catalog - - - explicit - function - 10218 - 1 - 3450 - int2 - pg_catalog - 3802 - jsonb - pg_catalog - 21 - int2 - pg_catalog - - - explicit - function - 10220 - 1 - 3452 - int8 - pg_catalog - 3802 - jsonb - pg_catalog - 20 - int8 - pg_catalog - - - explicit - function - 10219 - 1 - 3451 - int4 - pg_catalog - 3802 - jsonb - pg_catalog - 23 - int4 - pg_catalog - - - explicit - function - 10216 - 1 - 3556 - bool - pg_catalog - 3802 - jsonb - pg_catalog - 16 - bool - pg_catalog - - - explicit - function - 10221 - 1 - 3453 - float4 - pg_catalog - 3802 - jsonb - pg_catalog - 700 - float4 - pg_catalog - - - explicit - function - 10217 - 1 - 3449 - numeric - pg_catalog - 3802 - jsonb - pg_catalog - 1700 - numeric - pg_catalog - - - explicit - function - 10222 - 1 - 2580 - float8 - pg_catalog - 3802 - jsonb - pg_catalog - 701 - float8 - pg_catalog - - - explicit - function - 10223 - 1 - 4281 - int4multirange - pg_catalog - 3904 - int4range - pg_catalog - 4451 - int4multirange - pg_catalog - - - explicit - function - 10225 - 1 - 4284 - nummultirange - pg_catalog - 3906 - numrange - pg_catalog - 4532 - nummultirange - pg_catalog - - - explicit - function - 10227 - 1 - 4287 - tsmultirange - pg_catalog - 3908 - tsrange - pg_catalog - 4533 - tsmultirange - pg_catalog - - - explicit - function - 10228 - 1 - 4290 - tstzmultirange - pg_catalog - 3910 - tstzrange - pg_catalog - 4534 - tstzmultirange - pg_catalog - - - explicit - function - 10226 - 1 - 4293 - datemultirange - pg_catalog - 3912 - daterange - pg_catalog - 4535 - datemultirange - pg_catalog - - - explicit - function - 10224 - 1 - 4296 - int8multirange - pg_catalog - 3926 - int8range - pg_catalog - 4536 - int8multirange - pg_catalog - - - assignment - binary - 10124 - 1 - 4089 - regnamespace - pg_catalog - 23 - int4 - pg_catalog - - - assignment - function - 10123 - 1 - 1288 - int8 - pg_catalog - 4089 - regnamespace - pg_catalog - 20 - int8 - pg_catalog - - - implicit - binary - 10119 - 1 - 4089 - regnamespace - pg_catalog - 26 - oid - pg_catalog - - - assignment - binary - 10117 - 1 - 4096 - regrole - pg_catalog - 23 - int4 - pg_catalog - - - implicit - binary - 10112 - 1 - 4096 - regrole - pg_catalog - 26 - oid - pg_catalog - - - assignment - function - 10116 - 1 - 1288 - int8 - pg_catalog - 4096 - regrole - pg_catalog - 20 - int8 - pg_catalog - - - assignment - function - 10086 - 1 - 1288 - int8 - pg_catalog - 4191 - regcollation - pg_catalog - 20 - int8 - pg_catalog - - - assignment - binary - 10087 - 1 - 4191 - regcollation - pg_catalog - 23 - int4 - pg_catalog - - - implicit - binary - 10082 - 1 - 4191 - regcollation - pg_catalog - 26 - oid - pg_catalog - - - implicit - binary - 10150 - 1 - 5017 - pg_mcv_list - pg_catalog - 17 - bytea - pg_catalog - - - implicit - io - 10151 - 1 - 5017 - pg_mcv_list - pg_catalog - 25 - text - pg_catalog - - - explicit - function - 10036 - 1 - 5071 - xid - pg_catalog - 5069 - xid8 - pg_catalog - 28 - xid - pg_catalog - - - PL/pgSQL procedural language - 13564 - 684 - 1.0 - 11 - pg_catalog - 13565 -13566 -13567 -13568 - - - dynamically-loaded C functions - 13 - 1 - fmgr_c_validator - pg_catalog - - - built-in functions - 12 - 1 - fmgr_internal_validator - pg_catalog - - - PL/pgSQL procedural language - plpgsql_call_handler - pg_catalog - plpgsql_inline_handler - pg_catalog - 13568 - 684 - 1 - plpgsql_validator - pg_catalog - - - SQL-language functions - 14 - 1 - 1 - fmgr_sql_validator - pg_catalog - - - 13212 - 530 - app - - - system catalog schema - 11 - 524 - app - - - standard public schema - 1 - 946 - 2025-01-29.21:13:35 - 2200 - 524 - pg_database_owner - - - _tbl regclass - 16422 - void - 0.0 - 166 - 761 - plpgsql - app - - - 16423 - pg-trigger - trigger - 0.0 - 201 - 761 - plpgsql - app - - - 16424 - 1 - 1 - 762 - integer|0s - app - - - 16478 - 1 - 1 - 896 - integer|0s - app - - - 16458 - 1 - 1 - 787 - integer|0s - app - - - 16389 - 743 - 2 - app -
- - 16425 - 894 - 2 - app -
- - 16479 - 896 - 2 - app -
- - 16459 - 895 - 2 - app -
- - R - void|0s - - - 1 - regclass|0s - - - R - trigger|0s - - - 1 - 1 - 743 - varchar(50)|0s - 1043 - - - CURRENT_TIMESTAMP - 1 - 2 - 743 - timestamp|0s - 1114 - - - version - 1 - 16393 - 1 - 743 - 1 - 403 - default - 100 - pg_catalog - - - 1 - 16394 - 1 - 743 - 16393 - - - nextval('projects_id_seq'::regclass) - 1 - 1 - 762 - integer|0s - 16424 - 23 - - - 1 - 2 - 762 - text|0s - 25 - - - CURRENT_TIMESTAMP - 1 - 3 - 894 - timestamp|0s - 1114 - - - CURRENT_TIMESTAMP - 1 - 4 - 894 - timestamp|0s - 1114 - - - id - 1 - 16431 - 1 - 762 - 1 - 403 - - - 1 - 16432 - 1 - 762 - 16431 - - - U - 16474 - 894 - before-row - 16423 - - - nextval('subtasks_id_seq'::regclass) - 1 - 1 - 896 - integer|0s - 16478 - 23 - - - 1 - 2 - 896 - integer|0s - 23 - - - 1 - 3 - 896 - text|0s - 25 - - - 1 - 4 - 896 - boolean|0s - 16 - - - CURRENT_TIMESTAMP - 1 - 5 - 896 - timestamp|0s - 1114 - - - CURRENT_TIMESTAMP - 1 - 6 - 896 - timestamp|0s - 1114 - - - task_id - 1 - 16489 - cascade - 896 - 1 - 16459 - - - id - 1 - 16487 - 1 - 896 - 1 - 403 - - - 1 - 16488 - 1 - 896 - 16487 - - - U - 16494 - 896 - before-row - 16423 - - - nextval('tasks_id_seq'::regclass) - 1 - 1 - 787 - integer|0s - 16458 - 23 - - - 1 - 2 - 787 - text|0s - 25 - - - 3 - 787 - date|0s - 1082 - - - 1 - 4 - 787 - jsonb|0s - 3802 - - - 5 - 787 - integer|0s - 23 - - - CURRENT_TIMESTAMP - 1 - 6 - 895 - timestamp|0s - 1114 - - - CURRENT_TIMESTAMP - 1 - 7 - 895 - timestamp|0s - 1114 - - - project_id - 1 - 16467 - 787 - 1 - 16425 - - - id - 1 - 16465 - 1 - 787 - 1 - 403 - - - 1 - 16466 - 1 - 787 - 16465 - - - U - 16477 - 895 - before-row - 16423 - -
-
\ No newline at end of file diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta deleted file mode 100644 index be276c1..0000000 --- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta +++ /dev/null @@ -1 +0,0 @@ -#n:todo_baggins \ No newline at end of file diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta deleted file mode 100644 index 1ff3db2..0000000 --- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:information_schema -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta deleted file mode 100644 index 44e65b1..0000000 --- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:pg_catalog -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta deleted file mode 100644 index 7a97dbf..0000000 --- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:public -! [946, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip deleted file mode 100644 index e121a50..0000000 Binary files a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip and /dev/null differ diff --git a/.idea/icon.svg b/.idea/icon.svg deleted file mode 100644 index 30bb299..0000000 --- a/.idea/icon.svg +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml deleted file mode 100644 index d23208f..0000000 --- a/.idea/jsLibraryMappings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 418c517..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml deleted file mode 100644 index 0c2c701..0000000 --- a/.idea/prettier.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/dev.xml b/.idea/runConfigurations/dev.xml deleted file mode 100644 index a728840..0000000 --- a/.idea/runConfigurations/dev.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml deleted file mode 100644 index 6df4889..0000000 --- a/.idea/sqldialects.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/todo-baggins.iml b/.idea/todo-baggins.iml deleted file mode 100644 index cf84ae4..0000000 --- a/.idea/todo-baggins.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 7ddfc9e..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/webResources.xml b/.idea/webResources.xml deleted file mode 100644 index 7356908..0000000 --- a/.idea/webResources.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 0000000..a0e02db --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,11 @@ +{ + "lsp": { + "rust-analyzer": { + "initialization_options": { + "cargo": { + "features": ["server", "web"] + } + } + } + } +} diff --git a/Cargo.lock b/Cargo.lock index f9e1802..e0867f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,44 +2,17 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -50,12 +23,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -66,35 +33,45 @@ dependencies = [ ] [[package]] -name = "ashpd" -version = "0.8.1" +name = "anyhow" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "ashpd" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.8.5", + "rand 0.9.2", + "raw-window-handle 0.6.2", "serde", "serde_repr", "tokio", "url", + "wayland-backend", + "wayland-client", + "wayland-protocols", "zbus", ] [[package]] name = "askama_escape" -version = "0.10.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" +checksum = "3df27b8d5ddb458c5fb1bbc1ce172d4a38c614a97d550b0ac89003897fb01de4" [[package]] name = "async-broadcast" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.3.1", + "event-listener 5.4.1", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -113,9 +90,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -125,14 +102,15 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", + "pin-project-lite", "slab", ] @@ -142,7 +120,7 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-executor", "async-io", "async-lock", @@ -153,11 +131,11 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.4" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", @@ -166,40 +144,20 @@ dependencies = [ "polling", "rustix", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ - "event-listener 5.3.1", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] -[[package]] -name = "async-process" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" -dependencies = [ - "async-channel 2.3.1", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener 5.3.1", - "futures-lite", - "rustix", - "tracing", -] - [[package]] name = "async-recursion" version = "1.1.1" @@ -208,32 +166,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", -] - -[[package]] -name = "async-signal" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix", - "signal-hook-registry", - "slab", - "windows-sys 0.59.0", + "syn 2.0.111", ] [[package]] name = "async-std" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" +checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" dependencies = [ "async-channel 1.9.0", "async-global-executor", @@ -255,6 +195,28 @@ dependencies = [ "wasm-bindgen-futures", ] +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "async-task" version = "4.7.1" @@ -263,13 +225,29 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", +] + +[[package]] +name = "async-tungstenite" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee88b4c88ac8c9ea446ad43498955750a4bbe64c4392f21ccfe5d952865e318f" +dependencies = [ + "atomic-waker", + "futures-core", + "futures-io", + "futures-task", + "futures-util", + "log", + "pin-project-lite", + "tungstenite 0.27.0", ] [[package]] @@ -303,44 +281,43 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "axum" -version = "0.7.9" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "5b098575ebe77cb6d14fc7f32749631a6e44edbef6b796f89b020e99ba20d425" dependencies = [ - "async-trait", "axum-core", "axum-macros", "base64", "bytes", + "form_urlencoded", "futures-util", "http", "http-body", "http-body-util", "hyper", "hyper-util", - "itoa 1.0.11", + "itoa", "matchit", "memchr", "mime", "multer", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "serde_json", "serde_path_to_error", "serde_urlencoded", "sha1", "sync_wrapper", "tokio", - "tokio-tungstenite", - "tower 0.5.2", + "tokio-tungstenite 0.28.0", + "tower", "tower-layer", "tower-service", "tracing", @@ -348,19 +325,17 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.4.5" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ - "async-trait", "bytes", - "futures-util", + "futures-core", "http", "http-body", "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper", "tower-layer", "tower-service", @@ -368,31 +343,45 @@ dependencies = [ ] [[package]] -name = "axum-macros" -version = "0.4.2" +name = "axum-extra" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.94", + "axum", + "axum-core", + "bytes", + "futures-util", + "headers", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "serde_core", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "backtrace" -version = "0.3.73" +name = "axum-macros" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide 0.7.4", - "object", - "rustc-demangle", + "proc-macro2", + "quote", + "syn 2.0.111", ] +[[package]] +name = "base16" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27c3610c36aee21ce8ac510e6224498de4228ad772a171ed65643a24693a5a8" + [[package]] name = "base64" version = "0.22.1" @@ -427,11 +416,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -451,20 +440,20 @@ dependencies = [ [[package]] name = "block2" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" dependencies = [ "objc2", ] [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-task", "futures-io", "futures-lite", @@ -473,9 +462,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "regex-automata", @@ -484,9 +473,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byteorder" @@ -496,9 +485,12 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +dependencies = [ + "serde", +] [[package]] name = "cairo-rs" @@ -506,12 +498,12 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "cairo-sys-rs", "glib", "libc", "once_cell", - "thiserror 1.0.63", + "thiserror 1.0.69", ] [[package]] @@ -527,10 +519,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.12" +version = "1.2.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68064e60dbf1f17005c2fde4d07c16d8baa506fd7ffed8ccab702d93617975c7" +checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" dependencies = [ + "find-msvc-tools", "shlex", ] @@ -563,24 +556,39 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "charset" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f927b07c74ba84c7e5fe4db2baeb3e996ab2688992e39ac68ce3220a677c7e" +dependencies = [ + "base64", + "encoding_rs", +] [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "pure-rust-locales", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -612,31 +620,15 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.10.0", "block", - "cocoa-foundation 0.1.2", - "core-foundation 0.9.4", - "core-graphics 0.23.2", - "foreign-types 0.5.0", - "libc", - "objc", -] - -[[package]] -name = "cocoa" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" -dependencies = [ - "bitflags 2.6.0", - "block", - "cocoa-foundation 0.2.0", - "core-foundation 0.10.0", - "core-graphics 0.24.0", + "cocoa-foundation", + "core-foundation 0.10.1", + "core-graphics", "foreign-types 0.5.0", "libc", "objc", @@ -644,29 +636,14 @@ dependencies = [ [[package]] name = "cocoa-foundation" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.10.0", "block", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" -dependencies = [ - "bitflags 2.6.0", - "block", - "core-foundation 0.10.0", - "core-graphics-types 0.2.0", - "libc", + "core-foundation 0.10.1", + "core-graphics-types", "objc", ] @@ -689,21 +666,11 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - [[package]] name = "const-serialize" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08259976d62c715c4826cb4a3d64a3a9e5c5f68f964ff6087319857f569f93a6" +checksum = "ad7154afa56de2f290e3c82c2c6dc4f5b282b6870903f56ef3509aba95866edc" dependencies = [ "const-serialize-macro", "serde", @@ -711,35 +678,50 @@ dependencies = [ [[package]] name = "const-serialize-macro" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04382d0d9df7434af6b1b49ea1a026ef39df1b0738b1cc373368cf175354f6eb" +checksum = "4f160aad86b4343e8d4e261fee9965c3005b2fd6bc117d172ab65948779e4acf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] -name = "const_format" -version = "0.2.32" +name = "const-str" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +checksum = "b0664d2867b4a32697dfe655557f5c3b187e9b605b38612a748e5ec99811d160" + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.32" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ "proc-macro2", "quote", "unicode-xid", ] +[[package]] +name = "content_disposition" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc14a88e1463ddd193906285abe5c360c7e8564e05ccc5d501755f7fbc9ca9c" +dependencies = [ + "charset", +] + [[package]] name = "convert_case" version = "0.4.0" @@ -748,13 +730,51 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "convert_case" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" dependencies = [ "unicode-segmentation", ] +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -767,9 +787,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -781,98 +801,74 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core-graphics" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "foreign-types 0.5.0", - "libc", -] - [[package]] name = "core-graphics" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.6.0", - "core-foundation 0.10.0", - "core-graphics-types 0.2.0", + "bitflags 2.10.0", + "core-foundation 0.10.1", + "core-graphics-types", "foreign-types 0.5.0", "libc", ] -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "libc", -] - [[package]] name = "core-graphics-types" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.6.0", - "core-foundation 0.10.0", + "bitflags 2.10.0", + "core-foundation 0.10.1", "libc", ] [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -880,15 +876,15 @@ dependencies = [ [[package]] name = "cssparser" -version = "0.27.2" +version = "0.29.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" dependencies = [ "cssparser-macros", "dtoa-short", - "itoa 0.4.8", + "itoa", "matches", - "phf 0.8.0", + "phf 0.10.1", "proc-macro2", "quote", "smallvec", @@ -902,51 +898,87 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", ] [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.94", + "syn 2.0.111", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", "quote", - "syn 2.0.94", + "syn 2.0.111", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote", + "syn 2.0.111", ] [[package]] name = "dashmap" -version = "5.5.3" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ "cfg-if", + "crossbeam-utils", "hashbrown 0.14.5", "lock_api", "once_cell", @@ -955,77 +987,90 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", - "serde", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "serde_core", ] [[package]] name = "derive_more" -version = "0.99.18" +version = "0.99.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version", - "syn 2.0.94", + "syn 2.0.111", +] + +[[package]] +name = "derive_more" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10b768e943bed7bf2cab53df09f4bc34bfd217cdb57d971e769874c9a6710618" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d286bfdaf75e988b4a78e013ecd79c581e06399ab53fbacd2d916c2f904f30b" +dependencies = [ + "convert_case 0.10.0", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.111", + "unicode-xid", ] [[package]] name = "diesel" -version = "2.2.12" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229850a212cd9b84d4f0290ad9d294afc0ae70fccaa8949dbe8b43ffafa1e20c" +checksum = "0c415189028b232660655e4893e8bc25ca7aee8e96888db66d9edb400535456a" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "byteorder", "chrono", "diesel_derives", - "itoa 1.0.11", + "downcast-rs 2.0.2", + "itoa", "pq-sys", "serde_json", ] [[package]] name = "diesel_derives" -version = "2.2.2" +version = "2.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ff2be1e7312c858b2ef974f5c7089833ae57b5311b334b30923af58e5718d8" +checksum = "8587cbca3c929fb198e7950d761d31ca72b80aa6e07c1b7bec5879d187720436" dependencies = [ "diesel_table_macro_syntax", "dsl_auto_type", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "diesel_migrations" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a73ce704bad4231f001bff3314d91dce4aba0770cee8b233991859abc15c1f6" +checksum = "745fd255645f0f1135f9ec55c7b00e0882192af9683ab4731e4bba3da82b8f9c" dependencies = [ "diesel", "migrations_internals", @@ -1034,11 +1079,11 @@ dependencies = [ [[package]] name = "diesel_table_macro_syntax" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" +checksum = "fe2444076b48641147115697648dc743c2c00b61adade0f01ce67133c7babe8c" dependencies = [ - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -1053,105 +1098,137 @@ dependencies = [ [[package]] name = "dioxus" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a247114500f1a78e87022defa8173de847accfada8e8809dfae23a118a580c" +checksum = "3a115f9dbe5900c6044ee6a791e1b160c29989c6a8721eec099e01a964e5dae4" dependencies = [ + "dioxus-asset-resolver", "dioxus-cli-config", "dioxus-config-macro", + "dioxus-config-macros", "dioxus-core", "dioxus-core-macro", "dioxus-desktop", "dioxus-devtools", "dioxus-document", "dioxus-fullstack", + "dioxus-fullstack-macro", "dioxus-history", "dioxus-hooks", "dioxus-html", "dioxus-liveview", "dioxus-logger", - "dioxus-mobile", "dioxus-router", + "dioxus-server", "dioxus-signals", "dioxus-ssr", + "dioxus-stores", "dioxus-web", "manganis", "serde", + "subsecond", "warnings", ] [[package]] -name = "dioxus-cli-config" -version = "0.6.3" +name = "dioxus-asset-resolver" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd16948f1ffdb068dd9a64812158073a4250e2af4e98ea31fdac0312e6bce86" +checksum = "6851ae49ba3988f1b77f6ef826eb142e811602129841c24bf5a4e103708d9844" +dependencies = [ + "dioxus-cli-config", + "http", + "infer", + "jni", + "js-sys", + "ndk", + "ndk-context", + "ndk-sys", + "percent-encoding", + "thiserror 2.0.17", + "tokio", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus-cli-config" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e9d9da2e7334fdae5d77e3989207aa549062f74ff1ca2171393bbdd7fda90" dependencies = [ "wasm-bindgen", ] [[package]] name = "dioxus-config-macro" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75cbf582fbb1c32d34a1042ea675469065574109c95154468710a4d73ee98b49" +checksum = "9bd56be5ea6c9f416b25e9e3adc910c02127be75b6d1ecd567661f31920b27ba" dependencies = [ "proc-macro2", "quote", ] [[package]] -name = "dioxus-core" -version = "0.6.3" +name = "dioxus-config-macros" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c03f451a119e47433c16e2d8eb5b15bf7d6e6734eb1a4c47574e6711dadff8d" +checksum = "c49327465c2d434d00fb4c86bd35ae72155b479622e09352b950d9ab4807bf23" + +[[package]] +name = "dioxus-core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7400cbd21a98e585a13f8c29574da9b8afb2fd343f712618042b6c71761f0933" dependencies = [ + "anyhow", "const_format", "dioxus-core-types", "futures-channel", "futures-util", "generational-box", "longest-increasing-subsequence", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", "rustversion", "serde", "slab", "slotmap", + "subsecond", "tracing", - "warnings", ] [[package]] name = "dioxus-core-macro" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "105c954caaaedf8cd10f3d1ba576b01e18aa8d33ad435182125eefe488cf0064" +checksum = "e51c0eb7eb76dd5a0b9a116d94d29ca78924a1ed1fcb7ea072eda5045d3ac056" dependencies = [ - "convert_case 0.6.0", + "convert_case 0.8.0", "dioxus-rsx", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "dioxus-core-types" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91a82fccfa48574eb7aa183e297769540904694844598433a9eb55896ad9f93b" -dependencies = [ - "once_cell", -] +checksum = "0652ab5f9c2c32261d44a3155debbfd909ed03d03434d7f70f5a796bf255c519" [[package]] name = "dioxus-desktop" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b0cca3e7a10a4a3df37ea52c4cc7a53e5c9233489e03ee3f2829471fc3099a" +checksum = "b24aa7e4aa87fce202c5e67d560cddd9ed67ad533f16b7d922916c04993766ff" dependencies = [ "async-trait", "base64", - "cocoa 0.25.0", - "core-foundation 0.9.4", + "bytes", + "cocoa", + "core-foundation 0.10.1", + "dioxus-asset-resolver", "dioxus-cli-config", "dioxus-core", "dioxus-devtools", @@ -1169,60 +1246,68 @@ dependencies = [ "infer", "jni", "lazy-js-bundle", - "muda 0.11.5", + "libc", + "muda", "ndk", "ndk-context", "ndk-sys", "objc", "objc_id", - "once_cell", + "percent-encoding", + "rand 0.9.2", "rfd", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", "serde", "serde_json", "signal-hook", "slab", + "subtle", "tao", - "thiserror 1.0.63", + "thiserror 2.0.17", "tokio", "tracing", "tray-icon", - "urlencoding", + "tungstenite 0.27.0", "webbrowser", "wry", ] [[package]] name = "dioxus-devtools" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712a7300f1e8181218187b03502044157eef04e0a25b518117c5ef9ae1096880" +checksum = "9748128bcd102b10e58c765939807053ccab542206a939b8bab228077455c259" dependencies = [ + "dioxus-cli-config", "dioxus-core", "dioxus-devtools-types", "dioxus-signals", + "futures-channel", + "futures-util", "serde", "serde_json", + "subsecond", + "thiserror 2.0.17", "tracing", - "tungstenite 0.23.0", - "warnings", + "tungstenite 0.27.0", ] [[package]] name = "dioxus-devtools-types" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f62434973c0c9c5a3bc42e9cd5e7070401c2062a437fb5528f318c3e42ebf4ff" +checksum = "48540ca8a0ab1ec81cd4db35f0c9713d43b158647fc1dcb0d79965fc3b41d96c" dependencies = [ "dioxus-core", "serde", + "subsecond-types", ] [[package]] name = "dioxus-document" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "802a2014d1662b6615eec0a275745822ee4fc66aacd9d0f2fb33d6c8da79b8f2" +checksum = "501a189b391d091c9aa02c05f5b25f5d0d17fa0e1016e000b0fdbb073d77cd6a" dependencies = [ "dioxus-core", "dioxus-core-macro", @@ -1239,53 +1324,116 @@ dependencies = [ [[package]] name = "dioxus-fullstack" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe99b48a1348eec385b5c4bd3e80fd863b0d3b47257d34e2ddc58754dec5d128" +checksum = "54150804265defdb21a6f2d8914a45316a1e7fb70ab22c30cf836e8fe2f8081b" dependencies = [ - "async-trait", + "anyhow", + "async-stream", + "async-tungstenite", "axum", + "axum-core", + "axum-extra", "base64", "bytes", "ciborium", + "const-str", + "const_format", + "content_disposition", + "derive_more 2.1.0", + "dioxus-asset-resolver", "dioxus-cli-config", - "dioxus-desktop", - "dioxus-devtools", + "dioxus-core", + "dioxus-fullstack-core", + "dioxus-fullstack-macro", + "dioxus-hooks", + "dioxus-html", + "dioxus-signals", + "form_urlencoded", + "futures", + "futures-channel", + "futures-util", + "gloo-net", + "headers", + "http", + "http-body", + "http-body-util", + "inventory", + "js-sys", + "mime", + "pin-project", + "reqwest", + "rustversion", + "send_wrapper", + "serde", + "serde_json", + "serde_qs", + "serde_urlencoded", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-tungstenite 0.27.0", + "tokio-util", + "tower", + "tower-http", + "tower-layer", + "tracing", + "tungstenite 0.27.0", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", +] + +[[package]] +name = "dioxus-fullstack-core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a9be2ef4d701520eefef284d218fb35b159dccd6bccc02b5bad42945e2599d" +dependencies = [ + "anyhow", + "axum-core", + "base64", + "ciborium", + "dioxus-core", + "dioxus-document", "dioxus-history", - "dioxus-interpreter-js", - "dioxus-isrg", - "dioxus-lib", - "dioxus-mobile", - "dioxus-ssr", - "dioxus-web", - "dioxus_server_macro", + "dioxus-hooks", + "dioxus-signals", "futures-channel", "futures-util", "generational-box", "http", - "hyper", - "once_cell", + "inventory", "parking_lot", - "pin-project", "serde", - "server_fn", - "thiserror 1.0.63", + "serde_json", + "thiserror 2.0.17", "tokio", - "tokio-stream", - "tokio-util", - "tower 0.4.13", - "tower-http", - "tower-layer", "tracing", - "tracing-futures", - "web-sys", +] + +[[package]] +name = "dioxus-fullstack-macro" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31ea4451fe8c9d2af24fb718a94966d5fd7e11325777e5b5a59085c5c85e5fb" +dependencies = [ + "const_format", + "convert_case 0.8.0", + "proc-macro2", + "quote", + "syn 2.0.111", + "xxhash-rust", ] [[package]] name = "dioxus-history" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ae4e22616c698f35b60727313134955d885de2d32e83689258e586ebc9b7909" +checksum = "55d704b3ba9504cb3c9cde49499b75546d1faaff2736f4c368aca6c061c48ac3" dependencies = [ "dioxus-core", "tracing", @@ -1293,9 +1441,9 @@ dependencies = [ [[package]] name = "dioxus-hooks" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "948e2b3f20d9d4b2c300aaa60281b1755f3298684448920b27106da5841896d0" +checksum = "79c6d68be372eca8186a1c57ec49be67a6ea46022150b5e85ab6a6acde52d272" dependencies = [ "dioxus-core", "dioxus-signals", @@ -1305,16 +1453,16 @@ dependencies = [ "rustversion", "slab", "tracing", - "warnings", ] [[package]] name = "dioxus-html" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c9a40e6fee20ce7990095492dedb6a753eebe05e67d28271a249de74dc796d" +checksum = "3aa87ecfa0f38ec286be25789a7f2d6c30778111f1fbff563da4bae41d171496" dependencies = [ "async-trait", + "bytes", "dioxus-core", "dioxus-core-macro", "dioxus-core-types", @@ -1323,6 +1471,7 @@ dependencies = [ "enumset", "euclid", "futures-channel", + "futures-util", "generational-box", "keyboard-types", "lazy-js-bundle", @@ -1335,41 +1484,41 @@ dependencies = [ [[package]] name = "dioxus-html-internal-macro" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ba87b53688a2c9f619ecdf4b3b955bc1f08bd0570a80a0d626c405f6d14a76" +checksum = "49301d0e389378e8070b8b704110339a0d3358efad9f5ad483ffab3a8d406dae" dependencies = [ - "convert_case 0.6.0", + "convert_case 0.8.0", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "dioxus-i18n" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "159eac1082ac62f2655f36e99967509c71d75c19f6fe40b241ea0f6d2e75a3e8" +checksum = "033ee9f42add6e16bc2a585840b17fd47ad7ce143c115d605a60a7ed72dbba02" dependencies = [ - "dioxus-lib", + "dioxus", "fluent", - "thiserror 2.0.11", + "thiserror 2.0.17", "unic-langid", "walkdir", ] [[package]] name = "dioxus-interpreter-js" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330707b10ca75cb0eb05f9e5f8d80217cd0d7e62116a8277ae363c1a09b57a22" +checksum = "f5437a89d3ef7edfebc0f10acb065f1709cb7ffb678e3a4bb1416706d71f7c67" dependencies = [ "dioxus-core", "dioxus-core-types", "dioxus-html", "js-sys", "lazy-js-bundle", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", "serde", "sledgehammer_bindgen", "sledgehammer_utils", @@ -1378,43 +1527,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "dioxus-isrg" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff7e1701a498e214dd0c4a99fdb71c256405fc019a5c91663678ac975dd26ae6" -dependencies = [ - "chrono", - "http", - "lru", - "rustc-hash 1.1.0", - "thiserror 1.0.63", - "tracing", -] - -[[package]] -name = "dioxus-lib" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5405b71aa9b8b0c3e0d22728f12f34217ca5277792bd315878cc6ecab7301b72" -dependencies = [ - "dioxus-config-macro", - "dioxus-core", - "dioxus-core-macro", - "dioxus-document", - "dioxus-history", - "dioxus-hooks", - "dioxus-html", - "dioxus-rsx", - "dioxus-signals", - "warnings", -] - [[package]] name = "dioxus-liveview" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b78d90b5d593eb39e96d7892d059c085af5ac4c29b4257b22646e37c1c5ef0" +checksum = "f690466a88cc93d7f87e1735aab9cb4a83c70f452ed344a32559577e80505da4" dependencies = [ "axum", "dioxus-cli-config", @@ -1427,11 +1544,11 @@ dependencies = [ "futures-channel", "futures-util", "generational-box", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", "serde", "serde_json", "slab", - "thiserror 1.0.63", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -1440,125 +1557,187 @@ dependencies = [ [[package]] name = "dioxus-logger" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545961e752f6c8bf59c274951b3c8b18a106db6ad2f9e2035b29e1f2a3e899b1" +checksum = "2b25ebfbc193cebcf5af5e19b8ee7c6adee486fbd1c12f11aea058b464da16f9" dependencies = [ - "console_error_panic_hook", "dioxus-cli-config", "tracing", "tracing-subscriber", "tracing-wasm", ] -[[package]] -name = "dioxus-mobile" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1295388909f427758993f32a571e0f8698d6ce0f125fa0e81b8bfdec3fa952" -dependencies = [ - "dioxus-cli-config", - "dioxus-desktop", - "dioxus-lib", - "jni", - "libc", - "once_cell", -] - -[[package]] -name = "dioxus-query" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155df4befc5ae7c6393114720efbe5c9592941fdff8c98366e8e50ea950d251d" -dependencies = [ - "dioxus-lib", - "futures-util", - "instant", - "warnings", -] - [[package]] name = "dioxus-router" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7266a76fc9e4a91f56499d1d1aecfff7168952b6627a6008b4e9748d6bf863e4" +checksum = "18282604175f38d8c9291946ad6b34899657e47aef994fbbe6defb501a000f33" dependencies = [ "dioxus-cli-config", + "dioxus-core", + "dioxus-core-macro", + "dioxus-fullstack-core", "dioxus-history", - "dioxus-lib", + "dioxus-hooks", + "dioxus-html", "dioxus-router-macro", + "dioxus-signals", + "percent-encoding", "rustversion", "tracing", "url", - "urlencoding", ] [[package]] name = "dioxus-router-macro" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2743ffb79e9a7d33d779c87d6deea2a6c047d0736012f95d63b909b83f0a6fd2" +checksum = "47340b339c2c3f042b190f541b7241e2547b2e703f813d34ea24b963330c6757" dependencies = [ + "base16", + "digest", "proc-macro2", "quote", + "sha2", "slab", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "dioxus-rsx" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb588e05800b5a7eb90b2f40fca5bbd7626e823fb5e1ba21e011de649b45aa1" +checksum = "19d97c02689beff55767ba5f6e185ffd204c6a193e372f0fead8a3722c6f7eea" dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.94", + "rustversion", + "syn 2.0.111", +] + +[[package]] +name = "dioxus-server" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d608c33c39f032469c6eb59f361dc2724799724d8b3e15c824d1047e664c087" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "base64", + "bytes", + "chrono", + "ciborium", + "dashmap", + "dioxus-cli-config", + "dioxus-core", + "dioxus-core-macro", + "dioxus-devtools", + "dioxus-document", + "dioxus-fullstack-core", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-logger", + "dioxus-router", + "dioxus-signals", + "dioxus-ssr", + "enumset", + "futures", + "futures-channel", + "futures-util", + "generational-box", + "http", + "http-body-util", + "hyper", + "hyper-util", + "inventory", + "lru", + "parking_lot", + "pin-project", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "serde_qs", + "subsecond", + "thiserror 2.0.17", + "tokio", + "tokio-tungstenite 0.27.0", + "tokio-util", + "tower", + "tower-http", + "tracing", + "tracing-futures", + "url", + "walkdir", ] [[package]] name = "dioxus-signals" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10e032dbb3a2c0386ec8b8ee59bc20b5aeb67038147c855801237b45b13d72ac" +checksum = "27fc4df7a31a7f02e5a0b40884bb66ee165226a05d75fce03baa44029e438762" dependencies = [ "dioxus-core", "futures-channel", "futures-util", "generational-box", - "once_cell", "parking_lot", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", "tracing", "warnings", ] [[package]] name = "dioxus-ssr" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e1fac097e71ccec4e9e15d44b68393be2981276e42170703180bceb0b6f122" +checksum = "088efddedd39fc29d007bc91c8a61b25130355149ea5313469f96fb695c5e3ab" dependencies = [ "askama_escape", "dioxus-core", "dioxus-core-types", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", +] + +[[package]] +name = "dioxus-stores" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2dec3cd677078824a733de25ddbe8e987cfc8d98aec29b7d199e1fdb8452b96" +dependencies = [ + "dioxus-core", + "dioxus-signals", + "dioxus-stores-macro", + "generational-box", +] + +[[package]] +name = "dioxus-stores-macro" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9b7f085e374aaaa78403227b9bd83675c4078388d41a41b67dfbe4aa0bb64d5" +dependencies = [ + "convert_case 0.8.0", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] name = "dioxus-web" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7c12475c3d360058b8afe1b68eb6dfc9cbb7dcd760aed37c5f85c561c83ed1" +checksum = "315009f3a77c3c813415b3b8a8ea62a4d7a32dde9a666664b30862d4386e8456" dependencies = [ - "async-trait", - "ciborium", "dioxus-cli-config", "dioxus-core", "dioxus-core-types", "dioxus-devtools", "dioxus-document", + "dioxus-fullstack-core", "dioxus-history", "dioxus-html", "dioxus-interpreter-js", @@ -1566,49 +1745,40 @@ dependencies = [ "futures-channel", "futures-util", "generational-box", + "gloo-timers", "js-sys", "lazy-js-bundle", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", + "send_wrapper", "serde", "serde-wasm-bindgen", "serde_json", "tracing", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", ] -[[package]] -name = "dioxus_server_macro" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "371a5b21989a06b53c5092e977b3f75d0e60a65a4c15a2aa1d07014c3b2dda97" -dependencies = [ - "proc-macro2", - "quote", - "server_fn_macro", - "syn 2.0.94", -] - [[package]] name = "dirs" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -1617,6 +1787,18 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.10.0", + "block2", + "libc", + "objc2", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1625,14 +1807,23 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.9", ] [[package]] name = "dlopen2" -version = "0.7.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" dependencies = [ "dlopen2_derive", "libc", @@ -1642,46 +1833,67 @@ dependencies = [ [[package]] name = "dlopen2_derive" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] -name = "dotenvy" -version = "0.15.7" +name = "document-features" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "downcast-rs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" [[package]] name = "dpi" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "dsl_auto_type" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" +checksum = "dd122633e4bef06db27737f21d3738fb89c8f6d5360d6d9d7635dda142a7757e" dependencies = [ - "darling", + "darling 0.21.3", "either", "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "dtoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" [[package]] name = "dtoa-short" @@ -1706,9 +1918,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encoding_rs" @@ -1721,15 +1933,15 @@ dependencies = [ [[package]] name = "endi" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" [[package]] name = "enumflags2" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" dependencies = [ "enumflags2_derive", "serde", @@ -1737,57 +1949,57 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "enumset" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +checksum = "25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.10.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +checksum = "f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "euclid" -version = "0.22.10" +version = "0.22.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" dependencies = [ "num-traits", "serde", @@ -1801,9 +2013,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.3.1" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -1812,19 +2024,19 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.3.1", + "event-listener 5.4.1", "pin-project-lite", ] [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fdeflate" @@ -1837,9 +2049,9 @@ dependencies = [ [[package]] name = "feruca" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cb481799628afdf9ca9ba017c67b883cd3d031256145ceb97b7837f3f2b575c" +checksum = "eb2ffdeed16cd36543ef9aacf67be6c592a49016baae852bcc2cebe6ecd201aa" dependencies = [ "bincode", "bstr", @@ -1858,20 +2070,26 @@ dependencies = [ ] [[package]] -name = "flate2" -version = "1.0.35" +name = "find-msvc-tools" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" + +[[package]] +name = "flate2" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] name = "fluent" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb74634707bebd0ce645a981148e8fb8c7bccd4c33c652aeffd28bf2f96d555a" +checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477" dependencies = [ "fluent-bundle", "unic-langid", @@ -1879,36 +2097,37 @@ dependencies = [ [[package]] name = "fluent-bundle" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe0a21ee80050c678013f82edf4b705fe2f26f1f9877593d13198612503f493" +checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" dependencies = [ "fluent-langneg", "fluent-syntax", "intl-memoizer", "intl_pluralrules", - "rustc-hash 1.1.0", - "self_cell 0.10.3", + "rustc-hash 2.1.1", + "self_cell", "smallvec", "unic-langid", ] [[package]] name = "fluent-langneg" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" +checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0" dependencies = [ "unic-langid", ] [[package]] name = "fluent-syntax" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a530c4694a6a8d528794ee9bbd8ba0122e779629ac908d15ad5a7ae7763a33d" +checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" dependencies = [ - "thiserror 1.0.63", + "memchr", + "thiserror 2.0.17", ] [[package]] @@ -1919,9 +2138,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "foreign-types" @@ -1950,7 +2169,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -1967,9 +2186,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -1986,9 +2205,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -2017,9 +2236,9 @@ checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -2028,15 +2247,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -2047,13 +2266,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -2064,15 +2283,15 @@ checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -2167,20 +2386,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "gdkx11" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" -dependencies = [ - "gdk", - "gdkx11-sys", - "gio", - "glib", - "libc", - "x11", -] - [[package]] name = "gdkx11-sys" version = "0.18.2" @@ -2196,9 +2401,9 @@ dependencies = [ [[package]] name = "generational-box" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a673cf4fb0ea6a91aa86c08695756dfe875277a912cdbf33db9a9f62d47ed82b" +checksum = "e658d10252a15200ca4a1c67c7180fc0baffa3f92869bbd903025daf6f70fd65" dependencies = [ "parking_lot", "tracing", @@ -2214,6 +2419,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix", + "windows-link 0.2.1", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -2227,20 +2442,30 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] -name = "gimli" -version = "0.29.0" +name = "getrandom" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] [[package]] name = "gio" @@ -2258,7 +2483,7 @@ dependencies = [ "once_cell", "pin-project-lite", "smallvec", - "thiserror 1.0.63", + "thiserror 1.0.69", ] [[package]] @@ -2280,7 +2505,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "futures-channel", "futures-core", "futures-executor", @@ -2294,7 +2519,7 @@ dependencies = [ "memchr", "once_cell", "smallvec", - "thiserror 1.0.63", + "thiserror 1.0.69", ] [[package]] @@ -2308,7 +2533,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -2323,19 +2548,19 @@ dependencies = [ [[package]] name = "global-hotkey" -version = "0.5.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b436093d1598b05e3b7fddc097b2bad32763f53a1beb25ab6f9718c6a60acd09" +checksum = "b9247516746aa8e53411a0db9b62b0e24efbcf6a76e0ba73e5a91b512ddabed7" dependencies = [ - "bitflags 2.6.0", - "cocoa 0.25.0", "crossbeam-channel", "keyboard-types", - "objc", + "objc2", + "objc2-app-kit", "once_cell", - "thiserror 1.0.63", - "windows-sys 0.52.0", - "x11-dl", + "thiserror 2.0.17", + "windows-sys 0.59.0", + "x11rb", + "xkeysym", ] [[package]] @@ -2353,7 +2578,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror 1.0.63", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -2444,17 +2669,37 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", +] + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.12.1", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] name = "half" -version = "2.4.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "zerocopy", ] [[package]] @@ -2468,22 +2713,42 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http", +] + [[package]] name = "heck" version = "0.4.1" @@ -2498,15 +2763,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -2514,38 +2773,26 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "html5ever" -version = "0.26.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" dependencies = [ "log", "mac", "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", + "match_token", ] [[package]] name = "http" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", - "itoa 1.0.11", + "itoa", ] [[package]] @@ -2560,12 +2807,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -2579,9 +2826,9 @@ checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" [[package]] name = "httparse" -version = "1.9.4" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -2591,72 +2838,84 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.4.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", + "h2", "http", "http-body", "httparse", "httpdate", - "itoa 1.0.11", + "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", ] [[package]] -name = "hyper-tls" -version = "0.6.0" +name = "hyper-rustls" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "bytes", - "http-body-util", + "http", "hyper", "hyper-util", - "native-tls", + "rustls", + "rustls-pki-types", "tokio", - "tokio-native-tls", + "tokio-rustls", "tower-service", + "webpki-roots", ] [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ + "base64", "bytes", "futures-channel", + "futures-core", "futures-util", "http", "http-body", "hyper", + "ipnet", + "libc", + "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", - "tower 0.4.13", + "tower-layer", "tower-service", "tracing", + "windows-registry", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core 0.62.2", ] [[package]] @@ -2670,120 +2929,83 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", - "zerovec 0.10.4", + "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", - "tinystr 0.7.6", + "tinystr", "writeable", - "zerovec 0.10.4", + "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr 0.7.6", - "zerovec 0.10.4", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec 0.10.4", + "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr 0.7.6", - "zerovec 0.10.4", + "zerotrie", + "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr 0.7.6", + "icu_locale_core", "writeable", "yoke", "zerofrom", - "zerovec 0.10.4", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.94", + "zerotrie", + "zerovec", ] [[package]] @@ -2794,19 +3016,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -2815,9 +3027,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -2836,41 +3048,30 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.4.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.16.1", "serde", + "serde_core", ] [[package]] name = "infer" -version = "0.11.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6c16b11a665b26aeeb9b1d7f954cdeb034be38dd00adab4f2ae921a8fee804" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" dependencies = [ "cfb", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "intl-memoizer" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe22e020fce238ae18a6d5d8c502ee76a52a6e880d99477657e6acc30ec57bda" +checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" dependencies = [ "type-map", "unic-langid", @@ -2887,27 +3088,34 @@ dependencies = [ [[package]] name = "inventory" -version = "0.3.15" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +dependencies = [ + "rustversion", +] [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +dependencies = [ + "memchr", + "serde", +] [[package]] name = "itoa" -version = "0.4.8" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "javascriptcore-rs" @@ -2943,7 +3151,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror 1.0.63", + "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] @@ -2956,10 +3164,11 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -2969,21 +3178,20 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "serde", "unicode-segmentation", ] [[package]] name = "kuchikiki" -version = "0.8.2" +version = "0.8.8-speedreader" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" dependencies = [ "cssparser", "html5ever", - "indexmap 1.9.3", - "matches", + "indexmap 2.12.1", "selectors", ] @@ -2998,9 +3206,9 @@ dependencies = [ [[package]] name = "lazy-js-bundle" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e49596223b9d9d4947a14a25c142a6e7d8ab3f27eb3ade269d238bb8b5c267e2" +checksum = "21972afec4627b7ba0de60b5269585b5ac2f56d559b0696f57eee6daf8a51b68" [[package]] name = "lazy_static" @@ -3028,15 +3236,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading", + "libloading 0.7.4", "once_cell", ] [[package]] name = "libc" -version = "0.2.168" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libloading" @@ -3049,12 +3257,22 @@ dependencies = [ ] [[package]] -name = "libredox" -version = "0.1.3" +name = "libloading" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ - "bitflags 2.6.0", + "cfg-if", + "windows-link 0.2.1", +] + +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags 2.10.0", "libc", ] @@ -3079,31 +3297,45 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.7.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "load-dotenv" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71abcf6d8da2a6c163554a61cdbca2438bbe9e687a9c5ebeee12e9af42864b54" +dependencies = [ + "dotenv", +] [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.22" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" dependencies = [ "value-bag", ] @@ -3116,19 +3348,36 @@ checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" [[package]] name = "lru" -version = "0.12.5" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.16.1", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "mac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -3140,9 +3389,9 @@ dependencies = [ [[package]] name = "manganis" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317af44b15e7605b85f04525449a3bb631753040156c9b318e6cba8a3ea4ef73" +checksum = "97c63ae68d25457a579b7714806088c5cb44c536cf624a53a17184878f9f0bcd" dependencies = [ "const-serialize", "manganis-core", @@ -3151,9 +3400,9 @@ dependencies = [ [[package]] name = "manganis-core" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c38bee65cc725b2bba23b5dbb290f57c8be8fadbe2043fb7e2ce73022ea06519" +checksum = "88d071660b149f985cbab8b23f2004ea6dd5cf947b63a0843f0e2f46e6af7229" dependencies = [ "const-serialize", "dioxus-cli-config", @@ -3163,31 +3412,52 @@ dependencies = [ [[package]] name = "manganis-macro" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f4f71310913c40174d9f0cfcbcb127dad0329ecdb3945678a120db22d3d065" +checksum = "9793d1d33778245b4240c330a8f575d208ce077c7e7bab1c79064252ddd4a162" dependencies = [ "dunce", + "macro-string", "manganis-core", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "markup5ever" -version = "0.11.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" dependencies = [ "log", - "phf 0.10.1", - "phf_codegen 0.10.0", + "phf 0.11.3", + "phf_codegen 0.11.3", "string_cache", "string_cache_codegen", "tendril", ] +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + [[package]] name = "matches" version = "0.1.10" @@ -3196,15 +3466,33 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matchit" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "memfd" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" +dependencies = [ + "rustix", +] + +[[package]] +name = "memmap2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +dependencies = [ + "libc", +] [[package]] name = "memoffset" @@ -3217,19 +3505,19 @@ dependencies = [ [[package]] name = "migrations_internals" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" +checksum = "36c791ecdf977c99f45f23280405d7723727470f6689a5e6dbf513ac547ae10d" dependencies = [ "serde", - "toml", + "toml 0.9.8", ] [[package]] name = "migrations_macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" +checksum = "36fc5ac76be324cfd2d3f2cf0fdf5d5d3c4f14ed8aaebadb09e304ba42282703" dependencies = [ "migrations_internals", "proc-macro2", @@ -3254,18 +3542,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", @@ -3273,39 +3552,20 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ - "hermit-abi 0.3.9", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", ] [[package]] name = "muda" -version = "0.11.5" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c47e7625990fc1af2226ea4f34fb2412b03c12639fcb91868581eb3a6893453" -dependencies = [ - "cocoa 0.25.0", - "crossbeam-channel", - "gtk", - "keyboard-types", - "libxdo", - "objc", - "once_cell", - "png", - "thiserror 1.0.63", - "windows-sys 0.52.0", -] - -[[package]] -name = "muda" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" dependencies = [ "crossbeam-channel", "dpi", @@ -3314,11 +3574,12 @@ dependencies = [ "libxdo", "objc2", "objc2-app-kit", + "objc2-core-foundation", "objc2-foundation", "once_cell", "png", - "thiserror 1.0.63", - "windows-sys 0.59.0", + "thiserror 2.0.17", + "windows-sys 0.60.2", ] [[package]] @@ -3340,9 +3601,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ "libc", "log", @@ -3361,13 +3622,13 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "jni-sys", "log", "ndk-sys", "num_enum", "raw-window-handle 0.6.2", - "thiserror 1.0.63", + "thiserror 1.0.69", ] [[package]] @@ -3393,12 +3654,13 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nix" -version = "0.27.1" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "cfg-if", + "cfg_aliases", "libc", "memoffset", ] @@ -3426,23 +3688,24 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ - "proc-macro-crate 2.0.2", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -3452,126 +3715,103 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", - "objc_exception", ] -[[package]] -name = "objc-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] - -[[package]] -name = "objc-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" - [[package]] name = "objc2" -version = "0.5.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" dependencies = [ - "objc-sys", "objc2-encode", + "objc2-exception-helper", ] [[package]] name = "objc2-app-kit" -version = "0.2.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.6.0", - "block2", - "libc", - "objc2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", -] - -[[package]] -name = "objc2-core-data" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" -dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "block2", "objc2", + "objc2-core-foundation", "objc2-foundation", ] [[package]] -name = "objc2-core-image" -version = "0.2.2" +name = "objc2-core-foundation" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "block2", + "bitflags 2.10.0", + "dispatch2", "objc2", - "objc2-foundation", - "objc2-metal", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.10.0", + "objc2-core-foundation", ] [[package]] name = "objc2-encode" -version = "4.0.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] [[package]] name = "objc2-foundation" -version = "0.2.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "block2", - "libc", "objc2", + "objc2-core-foundation", ] [[package]] -name = "objc2-metal" -version = "0.2.2" +name = "objc2-ui-kit" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.6.0", - "block2", + "bitflags 2.10.0", "objc2", + "objc2-core-foundation", "objc2-foundation", ] [[package]] -name = "objc2-quartz-core" -version = "0.2.2" +name = "objc2-web-kit" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "block2", "objc2", + "objc2-app-kit", + "objc2-core-foundation", "objc2-foundation", - "objc2-metal", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", ] [[package]] @@ -3583,28 +3823,19 @@ dependencies = [ "objc", ] -[[package]] -name = "object" -version = "0.36.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -3621,20 +3852,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -3685,15 +3916,15 @@ dependencies = [ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -3701,22 +3932,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "phf" @@ -3724,9 +3955,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ - "phf_macros", "phf_shared 0.8.0", - "proc-macro-hack", ] [[package]] @@ -3735,7 +3964,18 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" dependencies = [ + "phf_macros", "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_shared 0.11.3", ] [[package]] @@ -3750,12 +3990,12 @@ dependencies = [ [[package]] name = "phf_codegen" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", + "phf_generator 0.11.3", + "phf_shared 0.11.3", ] [[package]] @@ -3779,13 +4019,23 @@ dependencies = [ ] [[package]] -name = "phf_macros" -version = "0.8.0" +name = "phf_generator" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", + "phf_shared 0.11.3", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", "proc-macro-hack", "proc-macro2", "quote", @@ -3798,7 +4048,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" dependencies = [ - "siphasher", + "siphasher 0.3.11", ] [[package]] @@ -3807,34 +4057,43 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" dependencies = [ - "siphasher", + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.1", ] [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -3855,43 +4114,51 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "png" -version = "0.17.15" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67582bd5b65bdff614270e2ea89a1cf15bef71245cc1e5f7ea126977144211d" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] name = "polling" -version = "3.7.3" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.4.0", + "hermit-abi", "pin-project-lite", "rustix", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "pollster" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" +checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] [[package]] name = "powerfmt" @@ -3901,19 +4168,21 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "pq-sys" -version = "0.6.1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24ff9e4cf6945c988f0db7005d87747bf72864965c3529d259ad155ac41d584" +checksum = "574ddd6a267294433f140b02a726b0640c43cf7c6f717084684aaa3b285aba61" dependencies = [ + "libc", + "pkg-config", "vcpkg", ] @@ -3939,10 +4208,19 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" dependencies = [ - "toml_datetime", + "toml_datetime 0.6.3", "toml_edit 0.20.2", ] +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.9", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -3986,7 +4264,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -3997,9 +4275,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -4012,25 +4290,111 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", "version_check", ] [[package]] -name = "pure-rust-locales" -version = "0.8.1" +name = "psl-types" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1190fd18ae6ce9e137184f207593877e70f39b015040156b1e05081cdfe3733a" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + +[[package]] +name = "pure-rust-locales" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "869675ad2d7541aea90c6d88c81f46a7f4ea9af8cd0395d38f11a95126998a0d" + +[[package]] +name = "quick-xml" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", +] + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.1", + "rustls", + "socket2", + "thiserror 2.0.17", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash 2.1.1", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.17", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" version = "0.7.3" @@ -4056,6 +4420,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -4076,6 +4450,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -4091,7 +4475,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", ] [[package]] @@ -4126,49 +4519,49 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", ] [[package]] name = "redox_users" -version = "0.4.6" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "libredox", - "thiserror 1.0.63", + "thiserror 2.0.17", ] [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -4178,9 +4571,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -4189,80 +4582,91 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.9" +version = "0.12.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a" dependencies = [ "base64", "bytes", + "cookie", + "cookie_store", "futures-core", "futures-util", "http", "http-body", "http-body-util", "hyper", - "hyper-tls", + "hyper-rustls", "hyper-util", - "ipnet", "js-sys", "log", - "mime", "mime_guess", - "native-tls", - "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", + "quinn", + "rustls", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-native-tls", + "tokio-rustls", "tokio-util", + "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "windows-registry", + "webpki-roots", ] [[package]] name = "rfd" -version = "0.14.1" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" +checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" dependencies = [ "ashpd", - "block", - "dispatch", + "block2", + "dispatch2", "js-sys", "log", - "objc", - "objc-foundation", - "objc_id", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", "pollster", "raw-window-handle 0.6.2", "urlencoding", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] -name = "rustc-demangle" -version = "0.1.24" +name = "ring" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] [[package]] name = "rustc-hash" @@ -4278,52 +4682,72 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] -name = "rustls-pemfile" -version = "2.2.0" +name = "rustls" +version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ + "once_cell", + "ring", "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "same-file" @@ -4336,11 +4760,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4357,9 +4781,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" dependencies = [ "dyn-clone", "ref-cast", @@ -4367,6 +4791,12 @@ dependencies = [ "serde_json", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -4379,7 +4809,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -4388,9 +4818,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.13.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -4398,44 +4828,33 @@ dependencies = [ [[package]] name = "selectors" -version = "0.22.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" dependencies = [ "bitflags 1.3.2", "cssparser", - "derive_more", + "derive_more 0.99.20", "fxhash", "log", - "matches", "phf 0.8.0", "phf_codegen 0.8.0", "precomputed-hash", "servo_arc", "smallvec", - "thin-slice", ] [[package]] name = "self_cell" -version = "0.10.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" -dependencies = [ - "self_cell 1.1.0", -] - -[[package]] -name = "self_cell" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" +checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" [[package]] name = "semver" -version = "1.0.23" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "send_wrapper" @@ -4448,18 +4867,19 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] [[package]] name = "serde-wasm-bindgen" -version = "0.5.0" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" dependencies = [ "js-sys", "serde", @@ -4467,69 +4887,89 @@ dependencies = [ ] [[package]] -name = "serde_derive" -version = "1.0.219" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "serde_json" -version = "1.0.142" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "itoa 1.0.11", + "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] name = "serde_path_to_error" -version = "0.1.16" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ - "itoa 1.0.11", + "itoa", "serde", + "serde_core", ] [[package]] name = "serde_qs" -version = "0.12.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" +checksum = "f3faaf9e727533a19351a43cc5a8de957372163c7d35cc48c90b75cdda13c352" dependencies = [ "percent-encoding", "serde", - "thiserror 1.0.63", + "thiserror 2.0.17", ] [[package]] name = "serde_repr" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +dependencies = [ + "serde_core", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4537,26 +4977,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.11", + "itoa", "ryu", "serde", ] [[package]] name = "serde_with" -version = "3.14.0" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.4.0", + "indexmap 2.12.1", "schemars 0.9.0", - "schemars 1.0.4", - "serde", - "serde_derive", + "schemars 1.1.0", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -4564,80 +5003,21 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.94", -] - -[[package]] -name = "server_fn" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "024b400db1aca5bd4188714f7bbbf7a2e1962b9a12a80b2a21e937e509086963" -dependencies = [ - "axum", - "bytes", - "const_format", - "dashmap", - "futures", - "gloo-net", - "http", - "http-body-util", - "hyper", - "inventory", - "js-sys", - "once_cell", - "reqwest", - "send_wrapper", - "serde", - "serde_json", - "serde_qs", - "server_fn_macro_default", - "thiserror 1.0.63", - "tower 0.4.13", - "tower-layer", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "xxhash-rust", -] - -[[package]] -name = "server_fn_macro" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf0e6f71fc924df36e87f27dfbd447f0bedd092d365db3a5396878256d9f00c" -dependencies = [ - "const_format", - "convert_case 0.6.0", - "proc-macro2", - "quote", - "syn 2.0.94", - "xxhash-rust", -] - -[[package]] -name = "server_fn_macro_default" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e4fd51eb9ee3e7d9fb0febec6cef486dcbc8f7f427591dfcfebee1abe1ad4" -dependencies = [ - "server_fn_macro", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "servo_arc" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" dependencies = [ "nodrop", "stable_deref_trait", @@ -4656,9 +5036,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -4682,9 +5062,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" dependencies = [ "libc", "signal-hook-registry", @@ -4692,18 +5072,18 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" dependencies = [ "libc", ] [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "siphasher" @@ -4712,13 +5092,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] -name = "slab" -version = "0.4.9" +name = "siphasher" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "sledgehammer_bindgen" @@ -4732,12 +5115,12 @@ dependencies = [ [[package]] name = "sledgehammer_bindgen_macro" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a1b4f13e2bbf2f5b29d09dfebc9de69229ffee245aed80e3b70f9b5fd28c06" +checksum = "f62f06db0370222f7f498ef478fce9f8df5828848d1d3517e3331936d7074f55" dependencies = [ "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -4751,9 +5134,9 @@ dependencies = [ [[package]] name = "slotmap" -version = "1.0.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "serde", "version_check", @@ -4761,18 +5144,18 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.7" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.60.2", ] [[package]] @@ -4809,9 +5192,9 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -4827,26 +5210,25 @@ checksum = "e51f1e89f093f99e7432c491c382b88a6860a5adbe6bf02574bf0a08efff1978" [[package]] name = "string_cache" -version = "0.8.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", - "once_cell", "parking_lot", - "phf_shared 0.10.0", + "phf_shared 0.11.3", "precomputed-hash", "serde", ] [[package]] name = "string_cache_codegen" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", + "phf_generator 0.11.3", + "phf_shared 0.11.3", "proc-macro2", "quote", ] @@ -4857,6 +5239,40 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subsecond" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c09bc2c9ef0381b403ab8b58122961cb83266d16b1f55f9486d5857ba4a9ae26" +dependencies = [ + "js-sys", + "libc", + "libloading 0.8.9", + "memfd", + "memmap2", + "serde", + "subsecond-types", + "thiserror 2.0.17", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "subsecond-types" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07aa455c66ddfdbb51507537402b961e027846468954ef8d974bce65dff9eb0" +dependencies = [ + "serde", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -4870,9 +5286,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.94" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -4881,22 +5297,43 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] @@ -4908,20 +5345,20 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml", + "toml 0.8.2", "version-compare", ] [[package]] name = "tao" -version = "0.30.8" +version = "0.34.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6682a07cf5bab0b8a2bd20d0a542917ab928b5edb75ebd4eda6b05cbaab872da" +checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" dependencies = [ - "bitflags 2.6.0", - "cocoa 0.26.0", - "core-foundation 0.10.0", - "core-graphics 0.24.0", + "bitflags 2.10.0", + "block2", + "core-foundation 0.10.1", + "core-graphics", "crossbeam-channel", "dispatch", "dlopen2", @@ -4929,7 +5366,6 @@ dependencies = [ "gdkwayland-sys", "gdkx11-sys", "gtk", - "instant", "jni", "lazy_static", "libc", @@ -4937,7 +5373,9 @@ dependencies = [ "ndk", "ndk-context", "ndk-sys", - "objc", + "objc2", + "objc2-app-kit", + "objc2-foundation", "once_cell", "parking_lot", "raw-window-handle 0.5.2", @@ -4947,7 +5385,7 @@ dependencies = [ "unicode-segmentation", "url", "windows", - "windows-core 0.58.0", + "windows-core 0.61.2", "windows-version", "x11-dl", ] @@ -4960,7 +5398,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -4971,15 +5409,15 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.12.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ - "cfg-if", "fastrand", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4993,70 +5431,63 @@ dependencies = [ "utf-8", ] -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl 1.0.63", + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.17", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", - "itoa 1.0.11", + "itoa", "num-conv", "powerfmt", "serde", @@ -5066,15 +5497,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -5082,29 +5513,20 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", - "zerovec 0.10.4", -] - -[[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" -dependencies = [ - "displaydoc", - "zerovec 0.11.4", + "serde_core", + "zerovec", ] [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -5116,7 +5538,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "todo-baggins" +name = "todo_baggins" version = "0.1.0" dependencies = [ "async-std", @@ -5124,14 +5546,16 @@ dependencies = [ "diesel", "diesel_migrations", "dioxus", + "dioxus-html", "dioxus-i18n", - "dioxus-query", - "dotenvy", "feruca", + "load-dotenv", + "rand 0.9.2", "serde", "serde_json", "serde_with", "time", + "tokio", "tracing", "unic-langid-impl", "validator", @@ -5140,11 +5564,10 @@ dependencies = [ [[package]] name = "tokio" -version = "1.42.0" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", "libc", "mio", @@ -5153,27 +5576,27 @@ dependencies = [ "socket2", "tokio-macros", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] -name = "tokio-native-tls" -version = "0.3.1" +name = "tokio-rustls" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "native-tls", + "rustls", "tokio", ] @@ -5191,27 +5614,39 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.24.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" dependencies = [ "futures-util", "log", "tokio", - "tungstenite 0.24.0", + "tungstenite 0.27.0", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite 0.28.0", ] [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "futures-util", - "hashbrown 0.14.5", "pin-project-lite", "tokio", ] @@ -5223,11 +5658,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", "toml_edit 0.20.2", ] +[[package]] +name = "toml" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +dependencies = [ + "serde_core", + "serde_spanned 1.0.3", + "toml_datetime 0.7.3", + "toml_parser", + "winnow 0.7.14", +] + [[package]] name = "toml_datetime" version = "0.6.3" @@ -5237,15 +5685,24 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.4.0", - "toml_datetime", - "winnow", + "indexmap 2.12.1", + "toml_datetime 0.6.3", + "winnow 0.5.40", ] [[package]] @@ -5254,27 +5711,32 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.4.0", + "indexmap 2.12.1", "serde", - "serde_spanned", - "toml_datetime", - "winnow", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", ] [[package]] -name = "tower" -version = "0.4.13" +name = "toml_edit" +version = "0.23.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", + "indexmap 2.12.1", + "toml_datetime 0.7.3", + "toml_parser", + "winnow 0.7.14", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow 0.7.14", ] [[package]] @@ -5295,24 +5757,27 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.5.2" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.10.0", "bytes", + "futures-core", "futures-util", "http", "http-body", "http-body-util", "http-range-header", "httpdate", + "iri-string", "mime", "mime_guess", "percent-encoding", "pin-project-lite", "tokio", "tokio-util", + "tower", "tower-layer", "tower-service", "tracing", @@ -5332,9 +5797,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" dependencies = [ "log", "pin-project-lite", @@ -5344,20 +5809,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" dependencies = [ "once_cell", ] @@ -5374,12 +5839,16 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ + "matchers", + "once_cell", + "regex-automata", "sharded-slab", "thread_local", + "tracing", "tracing-core", ] @@ -5396,22 +5865,23 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.19.2" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d48a05076dd272615d03033bf04f480199f7d1b66a8ac64d75c625fc4a70c06b" +checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b" dependencies = [ - "core-graphics 0.24.0", "crossbeam-channel", "dirs", "libappindicator", - "muda 0.15.3", + "muda", "objc2", "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", "objc2-foundation", "once_cell", "png", - "thiserror 1.0.63", - "windows-sys 0.59.0", + "thiserror 2.0.17", + "windows-sys 0.60.2", ] [[package]] @@ -5422,54 +5892,54 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.23.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ - "byteorder", "bytes", "data-encoding", "http", "httparse", "log", - "rand 0.8.5", + "native-tls", + "rand 0.9.2", + "rustls", "sha1", - "thiserror 1.0.63", + "thiserror 2.0.17", "utf-8", ] [[package]] name = "tungstenite" -version = "0.24.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" dependencies = [ - "byteorder", "bytes", "data-encoding", "http", "httparse", "log", - "rand 0.8.5", + "rand 0.9.2", "sha1", - "thiserror 1.0.63", + "thiserror 2.0.17", "utf-8", ] [[package]] name = "type-map" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" dependencies = [ - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", ] [[package]] name = "typenum" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uds_windows" @@ -5484,9 +5954,9 @@ dependencies = [ [[package]] name = "unic-langid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" dependencies = [ "unic-langid-impl", "unic-langid-macros", @@ -5499,47 +5969,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" dependencies = [ "serde", - "tinystr 0.8.1", + "tinystr", ] [[package]] name = "unic-langid-macros" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da1cd2c042d3c7569a1008806b02039e7a4a2bdf8f8e96bd3c792434a0e275e" +checksum = "d5957eb82e346d7add14182a3315a7e298f04e1ba4baac36f7f0dbfedba5fc25" dependencies = [ "proc-macro-hack", - "tinystr 0.7.6", + "tinystr", "unic-langid-impl", "unic-langid-macros-impl", ] [[package]] name = "unic-langid-macros-impl" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed7f4237ba393424195053097c1516bd4590dc82b84f2f97c5c69e12704555b" +checksum = "a1249a628de3ad34b821ecb1001355bca3940bcb2f88558f1a8bd82e977f75b5" dependencies = [ "proc-macro-hack", "quote", - "syn 2.0.94", + "syn 2.0.111", "unic-langid-impl", ] [[package]] name = "unicase" -version = "2.7.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-canonical-combining-class" @@ -5549,30 +6010,27 @@ checksum = "41c99d5174052d02ce765418e826597a1be18f32c114e35d9e22f92390239561" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "unty" @@ -5582,12 +6040,12 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.2" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna", "percent-encoding", "serde", ] @@ -5604,12 +6062,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -5618,9 +6070,14 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.10.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +dependencies = [ + "js-sys", + "serde_core", + "wasm-bindgen", +] [[package]] name = "validator" @@ -5628,7 +6085,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43fb22e1a008ece370ce08a3e9e4447a910e92621bb49b85d6e48a45397e7cfa" dependencies = [ - "idna 1.0.3", + "idna", "once_cell", "regex", "serde", @@ -5644,19 +6101,19 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7df16e474ef958526d1205f6dda359fdfab79d9aa6d54bafcb92dcd07673dca" dependencies = [ - "darling", + "darling 0.20.11", "once_cell", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "value-bag" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" +checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" [[package]] name = "vcpkg" @@ -5666,9 +6123,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" [[package]] name = "version_check" @@ -5731,7 +6188,7 @@ checksum = "59195a1db0e95b920366d949ba5e0d3fc0e70b67c09be15ce5abb790106b0571" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -5742,52 +6199,50 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasm-bindgen" -version = "0.2.99" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.99" +name = "wasm-bindgen" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.94", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5795,28 +6250,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.94", - "wasm-bindgen-backend", + "syn 2.0.111", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -5826,10 +6284,80 @@ dependencies = [ ] [[package]] -name = "web-sys" -version = "0.3.70" +name = "wayland-backend" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" +dependencies = [ + "cc", + "downcast-rs 1.2.1", + "rustix", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" +dependencies = [ + "bitflags 2.10.0", + "rustix", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" +dependencies = [ + "dlib", + "log", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -5837,17 +6365,16 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.8.15" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" +checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97" dependencies = [ - "core-foundation 0.9.4", - "home", + "core-foundation 0.10.1", "jni", "log", "ndk-context", - "objc", - "raw-window-handle 0.5.2", + "objc2", + "objc2-foundation", "url", "web-sys", ] @@ -5897,15 +6424,24 @@ dependencies = [ ] [[package]] -name = "webview2-com" -version = "0.33.0" +name = "webpki-roots" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" +checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webview2-com" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ba622a989277ef3886dd5afb3e280e3dd6d974b766118950a08f8f678ad6a4" dependencies = [ "webview2-com-macros", "webview2-com-sys", "windows", - "windows-core 0.58.0", + "windows-core 0.61.2", "windows-implement", "windows-interface", ] @@ -5918,18 +6454,18 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "webview2-com-sys" -version = "0.33.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" +checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" dependencies = [ - "thiserror 1.0.63", + "thiserror 2.0.17", "windows", - "windows-core 0.58.0", + "windows-core 0.61.2", ] [[package]] @@ -5950,11 +6486,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5965,56 +6501,83 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.58.0" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", - "windows-result", - "windows-strings", - "windows-targets 0.52.6", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", ] [[package]] name = "windows-implement" -version = "0.58.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "windows-interface" -version = "0.58.0" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] @@ -6024,33 +6587,66 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] -name = "windows-registry" +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-result", - "windows-strings", - "windows-targets 0.52.6", + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] name = "windows-result" -version = "0.2.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.52.6", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", ] [[package]] name = "windows-strings" -version = "0.1.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-result", - "windows-targets 0.52.6", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -6062,15 +6658,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -6089,6 +6676,24 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -6104,21 +6709,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -6128,7 +6718,7 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", @@ -6136,12 +6726,38 @@ dependencies = [ ] [[package]] -name = "windows-version" -version = "0.1.1" +name = "windows-targets" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-targets 0.52.6", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -6150,132 +6766,138 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + [[package]] name = "winnow" version = "0.5.40" @@ -6286,31 +6908,39 @@ dependencies = [ ] [[package]] -name = "write16" -version = "1.0.0" +name = "winnow" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wry" -version = "0.45.0" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac0099a336829fbf54c26b5f620c68980ebbe37196772aeaf6118df4931b5cb0" +checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" dependencies = [ "base64", - "block", - "cocoa 0.26.0", - "core-graphics 0.24.0", + "block2", + "cookie", "crossbeam-channel", + "dirs", "dpi", "dunce", - "gdkx11", "gtk", "html5ever", "http", @@ -6319,22 +6949,26 @@ dependencies = [ "kuchikiki", "libc", "ndk", - "objc", - "objc_id", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", "once_cell", "percent-encoding", "raw-window-handle 0.6.2", "sha2", "soup3", "tao-macros", - "thiserror 1.0.63", + "thiserror 2.0.17", + "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", "windows", - "windows-core 0.58.0", + "windows-core 0.61.2", "windows-version", - "x11-dl", ] [[package]] @@ -6359,28 +6993,40 @@ dependencies = [ ] [[package]] -name = "xdg-home" -version = "1.3.0" +name = "x11rb" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ - "libc", - "windows-sys 0.59.0", + "gethostname", + "rustix", + "x11rb-protocol", ] [[package]] -name = "xxhash-rust" -version = "0.8.12" +name = "x11rb-protocol" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + +[[package]] +name = "xxhash-rust" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -6388,45 +7034,40 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", "synstructure", ] [[package]] name = "zbus" -version = "4.0.1" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030" +checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" dependencies = [ "async-broadcast", - "async-process", "async-recursion", "async-trait", - "derivative", "enumflags2", - "event-listener 5.3.1", + "event-listener 5.4.1", "futures-core", - "futures-sink", - "futures-util", + "futures-lite", "hex", "nix", "ordered-stream", - "rand 0.8.5", "serde", "serde_repr", - "sha1", - "static_assertions", "tokio", "tracing", "uds_windows", - "windows-sys 0.52.0", - "xdg-home", + "uuid", + "windows-sys 0.61.2", + "winnow 0.7.14", "zbus_macros", "zbus_names", "zvariant", @@ -6434,136 +7075,149 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "4.0.1" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7" +checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "regex", - "syn 1.0.109", + "syn 2.0.111", + "zbus_names", + "zvariant", "zvariant_utils", ] [[package]] name = "zbus_names" -version = "3.0.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", + "winnow 0.7.14", "zvariant", ] [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", "synstructure", ] [[package]] -name = "zerovec" -version = "0.10.4" +name = "zeroize" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "serde", "yoke", "zerofrom", "zerovec-derive", ] -[[package]] -name = "zerovec" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" -dependencies = [ - "zerofrom", -] - [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.111", ] [[package]] name = "zvariant" -version = "4.0.0" +version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65" +checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" dependencies = [ "endi", "enumflags2", "serde", - "static_assertions", "url", + "winnow 0.7.14", "zvariant_derive", + "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "4.0.0" +version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e" +checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.111", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "1.1.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "serde", + "syn 2.0.111", + "winnow 0.7.14", ] diff --git a/Cargo.toml b/Cargo.toml index 62fe3ca..3fe5307 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "todo-baggins" +name = "todo_baggins" version = "0.1.0" authors = ["Matouš Volf "] edition = "2024" @@ -7,43 +7,48 @@ edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -chrono = { version = "0.4.41", features = ["serde", "unstable-locales"] } -dioxus = { version = "0.6.3", features = ["fullstack", "router"] } -feruca = { version = "0.11.4" } -serde = { version = "1.0.219" } -serde_json = { version = "1.0.142" } -serde_with = { version = "3.14.0", features = ["chrono_0_4"] } -tracing = "0.1.41" +chrono = { version = "0.4.42", features = ["serde", "unstable-locales"] } +dioxus = { version = "0.7.2", features = ["fullstack", "router"] } +# TODO: Remove this once https://github.com/DioxusLabs/dioxus/issues/4765 is resolved. +dioxus-html = { version = "0.7.2", features = ["serialize"] } +feruca = { version = "0.11.5" } +serde = { version = "1.0.228" } +serde_json = { version = "1.0.145" } +serde_with = { version = "3.16.1", features = ["chrono_0_4"] } +tracing = "0.1.43" unic-langid-impl = { version = "0.9.6", features = ["serde"] } validator = { version = "0.20.0", features = ["derive"] } -diesel = { version = "2.2.12", features = ["chrono", "postgres", "postgres_backend", "serde_json"], optional = true } -diesel_migrations = { version = "2.2.0", features = ["postgres"], optional = true } -dotenvy = { version = "0.15.7", optional = true } -time = { version = "0.3.41", optional = true } +diesel = { version = "2.3.4", features = [ + "chrono", + "postgres", + "postgres_backend", + "serde_json", +], optional = true } +diesel_migrations = { version = "2.3.1", features = [ + "postgres", +], optional = true } +rand = { version = "0.9.2", optional = true } +time = { version = "0.3.44", optional = true } +tokio = { version = "1.48.0", optional = true } -async-std = { version = "1.13.1", optional = true } -dioxus-i18n = { version = "0.4.3", optional = true } -dioxus-query = { version = "0.6.1", optional = true } -voca_rs = { version = "1.15.2", optional = true } +async-std = { version = "1.13.2", optional = true } +dioxus-i18n = "0.5.0" +voca_rs = "1.15.2" +load-dotenv = "0.1.2" [features] default = ["web"] +web = ["dioxus/web", "dep:async-std"] +mobile = ["dioxus/mobile", "dep:async-std"] desktop = ["dioxus/desktop"] -mobile = ["dioxus/mobile"] -web = [ - "dioxus/web", - "dep:async-std", - "dep:dioxus-query", - "dep:dioxus-i18n", - "dep:voca_rs" -] server = [ "dioxus/server", "dep:diesel", "dep:diesel_migrations", - "dep:dotenvy", + "dep:rand", "dep:time", + "dep:tokio", ] [profile] diff --git a/Dioxus.toml b/Dioxus.toml index bd4867d..bb2a5e1 100644 --- a/Dioxus.toml +++ b/Dioxus.toml @@ -1,27 +1,6 @@ [application] -# App (Project) Name -name = "todo-baggins" - -# For font files to get referenced in CSS files by their original names, without the hash Dioxus appends. -asset_dir = "assets" - [web.app] -# HTML title tag content +# HTML title tag content. title = "Todo Baggins" - -# include `assets` in web platform -[web.resource] - -# Additional CSS style files -style = [] - -# Additional JavaScript files -script = [] - -[web.resource.dev] - -# Javascript code file -# serve: [dev-server] only -script = [] diff --git a/assets/.gitignore b/assets/.gitignore new file mode 100644 index 0000000..f155a8f --- /dev/null +++ b/assets/.gitignore @@ -0,0 +1 @@ +/tailwind.css diff --git a/assets/styles/.gitignore b/assets/styles/.gitignore deleted file mode 100644 index c63c213..0000000 --- a/assets/styles/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/tailwind_output.css diff --git a/docker-compose-dev.yaml b/docker-compose-dev.yaml index 7a0bf21..b961c2b 100644 --- a/docker-compose-dev.yaml +++ b/docker-compose-dev.yaml @@ -14,23 +14,10 @@ services: - ./Dioxus.toml:/srv/app/Dioxus.toml restart: always ports: ["8000:8000"] - depends_on: ["db", "style-builder"] - - style-builder: - build: - dockerfile: docker/dev/style-builder/Dockerfile - volumes: - - ./assets:/srv/app/assets - - ./src:/srv/app/src - - ./package.json:/srv/app/package.json - - ./package-lock.json:/srv/app/package-lock.json - # To prevent the container from exiting. - # See https://github.com/rails/rails/issues/44048. - tty: true - restart: always + depends_on: ["db"] db: - image: postgres:16.4-bookworm + image: postgres:16.11-alpine3.23@sha256:a5074487380d4e686036ce61ed6f2d363939ae9a0c40123d1a9e3bb3a5f344b4 volumes: ["db_data:/var/lib/postgresql/data"] ports: ["5432:5432"] environment: diff --git a/docker-compose-prod.yaml b/docker-compose-prod.yaml index 933f313..3212904 100755 --- a/docker-compose-prod.yaml +++ b/docker-compose-prod.yaml @@ -10,7 +10,7 @@ services: depends_on: ["db"] db: - image: postgres:16.4-bookworm + image: postgres:16.11-alpine3.23@sha256:a5074487380d4e686036ce61ed6f2d363939ae9a0c40123d1a9e3bb3a5f344b4 volumes: ["db_data:/var/lib/postgresql/data"] networks: - default diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 75f744a..8f7756b 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -1,16 +1,16 @@ -FROM rust:1.88.0-bookworm@sha256:5771a3cc2081935c59ac52b92d49c9e164d4fed92c9f6420aa8cc50364aead6e +FROM rust:1.92.0-bookworm@sha256:9676d0547a259997add8f5924eb6b959c589ed39055338e23b99aba7958d6d31 -RUN cargo install --locked dioxus-cli --version 0.6.3 \ - && cargo install --locked diesel_cli --version 2.2.7 +RUN useradd -m -u 1000 -s /bin/bash app_user \ + && rustup target add wasm32-unknown-unknown -COPY . /srv/app +USER app_user + +RUN cargo install --git https://github.com/diesel-rs/diesel --rev 2e85ba060d3d70ea605ea58a79b8a435749a7adc diesel_cli \ + && cargo install --git https://github.com/DioxusLabs/dioxus --rev 8f8b58ea80ba0ec8057807bcd58fb609f7a5f2b1 dioxus-cli + +COPY --chown=app_user . /srv/app WORKDIR /srv/app -RUN mkdir -p /.local/share/dioxus \ - && chown -R 1000:1000 /srv/app /usr/local/cargo /.local/share/dioxus - HEALTHCHECK CMD curl --fail -H "Accept: text/html" http://localhost:8000 || exit 1 -USER 1000:1000 - CMD ["sleep", "infinity"] diff --git a/docker/dev/style-builder/Dockerfile b/docker/dev/style-builder/Dockerfile deleted file mode 100644 index a0aa70e..0000000 --- a/docker/dev/style-builder/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -# 23-alpine3.21 -FROM node@sha256:c61b6b12a3c96373673cd52d7ecee2314e82bca5d541eecf0bc6aee870c8c6f7 - -WORKDIR /srv/app - -COPY ./package.json ./package.json -COPY ./package-lock.json ./package-lock.json - -RUN npm install - -USER 1000:1000 - -#checkov:skip=CKV_DOCKER_2: No need for (or even a simple way to do) a healthcheck. - -CMD ["npm", "run", "watch"] diff --git a/docker/prod/app/Dockerfile b/docker/prod/app/Dockerfile index b9677b3..71c4a28 100644 --- a/docker/prod/app/Dockerfile +++ b/docker/prod/app/Dockerfile @@ -1,19 +1,44 @@ -FROM rust:1.88.0-bookworm@sha256:5771a3cc2081935c59ac52b92d49c9e164d4fed92c9f6420aa8cc50364aead6e AS builder +FROM rust:1.92.0-bookworm@sha256:9676d0547a259997add8f5924eb6b959c589ed39055338e23b99aba7958d6d31 AS builder + +ARG ANDROID_NDK_VERSION=26.2.11394342 +ARG ANDROID_COMMAND_LINE_TOOLS_VERSION=13114758 +ARG ANDROID_COMMAND_LINE_TOOLS_SHA256=7ec965280a073311c339e571cd5de778b9975026cfcbe79f2b1cdcb1e15317ee +ARG ANDROID_VERSION=34 +ARG ANDROID_BUILD_TOOLS_VERSION=34.0.0 +ARG ANDROID_BUNDLETOOL_VERSION=1.18.3 +ARG ANDROID_BUNDLETOOL_SHA256=a099cfa1543f55593bc2ed16a70a7c67fe54b1747bb7301f37fdfd6d91028e29 +ENV ANDROID_SDK_ROOT=/opt/android-sdk RUN apt-get update && apt-get install -y --no-install-recommends \ - nodejs=18.19.0+dfsg-6~deb12u2 \ - npm=9.2.0~ds1-1 \ + openjdk-17-jdk-headless=17.0.17+10-1~deb12u1 \ + && curl -fsSL -o /tmp/cmdline-tools.zip "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS_VERSION}_latest.zip" \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ - && cargo install --locked dioxus-cli --version 0.6.3 \ - && cargo install --locked diesel_cli --version 2.2.7 + && cargo install --git https://github.com/diesel-rs/diesel --rev 2e85ba060d3d70ea605ea58a79b8a435749a7adc diesel_cli \ + && cargo install --git https://github.com/DioxusLabs/dioxus --rev 8f8b58ea80ba0ec8057807bcd58fb609f7a5f2b1 dioxus-cli --features disable-telemetry \ + && rustup target add aarch64-linux-android \ + && mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools" \ + && curl -fsSL -o /tmp/cmdline-tools.zip "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS_VERSION}_latest.zip" \ + && unzip -q /tmp/cmdline-tools.zip -d "$ANDROID_SDK_ROOT/cmdline-tools" \ + && export PATH="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$PATH" \ + && mv "$ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools" "$ANDROID_SDK_ROOT/cmdline-tools/latest" \ + && rm /tmp/cmdline-tools.zip \ + && yes | sdkmanager --sdk_root="$ANDROID_SDK_ROOT" --licenses > /dev/null \ + && sdkmanager --sdk_root="$ANDROID_SDK_ROOT" "platform-tools" "platforms;android-$ANDROID_VERSION" "build-tools;$ANDROID_BUILD_TOOLS_VERSION" "ndk;$ANDROID_NDK_VERSION" \ + && curl -fsSL -o /tmp/bundletool-all.jar "https://github.com/google/bundletool/releases/download/$ANDROID_BUNDLETOOL_VERSION/bundletool-all-${ANDROID_BUNDLETOOL_VERSION}.jar" \ + && echo "$ANDROID_BUNDLETOOL_SHA256 /tmp/bundletool-all.jar" | sha256sum -c - \ + && keytool -genkeypair -noprompt -keystore /tmp/android_keystore.jks -alias key -keyalg RSA -keysize 2048 -validity 3660 -dname "CN=" -storepass 123456 -keypass 123456 COPY . /srv/app WORKDIR /srv/app -RUN npm install \ - && npm run build \ - && dx bundle +RUN export ANDROID_HOME="$ANDROID_SDK_ROOT" \ + && export ANDROID_NDK_HOME="$ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION" \ + && dx bundle --release \ + && dx bundle --platform android --target aarch64-linux-android --release \ + && java -jar /tmp/bundletool-all.jar build-apks --bundle=/srv/app/target/dx/todo_baggins/release/android/app/app/build/outputs/bundle/release/TodoBaggins-aarch64-linux-android.aab --output=/tmp/todo_baggins.apks --mode=universal --ks=/tmp/android_keystore.jks --ks-key-alias=key --ks-pass=pass:123456 \ + && mkdir -p /srv/app/bundle/android \ + && unzip -qp /tmp/todo_baggins.apks universal.apk > /srv/app/bundle/android/todo_baggins.apk FROM debian:bookworm@sha256:b877a1a3fdf02469440f1768cf69c9771338a875b7add5e80c45b756c92ac20a AS runner @@ -22,12 +47,12 @@ RUN apt-get update \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -COPY --from=builder /srv/app/target/dx/todo-baggins/release/web /srv/app -COPY .env /srv/app/.env +COPY --from=builder /srv/app/target/dx/todo_baggins/release/web /srv/app/web +COPY --from=builder /srv/app/bundle/android /srv/app/android -RUN chown -R 1000:1000 /srv/app +RUN chown -R 1000:1000 /srv/app/web -WORKDIR /srv/app +WORKDIR /srv/app/web HEALTHCHECK CMD curl --fail -H "Accept: text/html" http://localhost || exit 1 @@ -35,4 +60,4 @@ USER 1000:1000 ENV IP="0.0.0.0" ENV PORT="80" -CMD ["./server"] +CMD ["./todo_baggins"] diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index e7d5e2e..0000000 --- a/package-lock.json +++ /dev/null @@ -1,3013 +0,0 @@ -{ - "name": "todo-baggins", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "tailwindcss": "3.4.10" - }, - "devDependencies": { - "htmlhint": "1.1.4", - "markdownlint-cli": "0.43.0", - "prettier": "3.4.2", - "stylelint": "16.12.0", - "stylelint-config-standard": "36.0.1" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@dual-bundle/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-functions-list": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", - "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12 || >=16" - } - }, - "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "license": "Apache-2.0" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", - "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", - "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.3.1", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true, - "license": "ISC" - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/htmlhint": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/htmlhint/-/htmlhint-1.1.4.tgz", - "integrity": "sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "3.2.3", - "chalk": "^4.1.2", - "commander": "^9.1.0", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "node-fetch": "^2.6.2", - "strip-json-comments": "3.1.0", - "xml": "1.0.1" - }, - "bin": { - "htmlhint": "bin/htmlhint" - } - }, - "node_modules/htmlhint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/htmlhint/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/htmlhint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/htmlhint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ignore": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", - "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "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.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/known-css-properties": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", - "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", - "dev": true, - "license": "MIT" - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdownlint": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.36.1.tgz", - "integrity": "sha512-s73fU2CQN7WCgjhaQUQ8wYESQNzGRNOKDd+3xgVqu8kuTEhmwepd/mxOv1LR2oV046ONrTLBFsM7IoKWNvmy5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "markdown-it": "14.1.0", - "markdownlint-micromark": "0.1.12" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - } - }, - "node_modules/markdownlint-cli": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.43.0.tgz", - "integrity": "sha512-6vwurKK4B21eyYzwgX6ph13cZS7hE6LZfcS8QyD722CyxVD2RtAvbZK2p7k+FZbbKORulEuwl+hJaEq1l6/hoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "~12.1.0", - "glob": "~11.0.0", - "ignore": "~6.0.2", - "js-yaml": "^4.1.0", - "jsonc-parser": "~3.3.1", - "jsonpointer": "5.0.1", - "markdownlint": "~0.36.1", - "minimatch": "~10.0.1", - "run-con": "~1.3.2", - "smol-toml": "~1.3.1" - }, - "bin": { - "markdownlint": "markdownlint.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/markdownlint-cli/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/markdownlint-cli/node_modules/glob": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/markdownlint-cli/node_modules/jackspeak": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", - "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/markdownlint-cli/node_modules/lru-cache": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", - "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdownlint-cli/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/markdownlint-cli/node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/markdownlint-micromark": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.12.tgz", - "integrity": "sha512-RlB6EwMGgc0sxcIhOQ2+aq7Zw1V2fBnzbXKGgYK/mVWdT7cz34fteKSwfYeo4rL6+L/q2tyC9QtD/PgZbkdyJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - } - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-safe-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", - "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/prettier": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", - "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-con": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", - "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~4.1.0", - "minimist": "^1.2.8", - "strip-json-comments": "~3.1.1" - }, - "bin": { - "run-con": "cli.js" - } - }, - "node_modules/run-con/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/smol-toml": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", - "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz", - "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2", - "@csstools/selector-specificity": "^5.0.0", - "@dual-bundle/import-meta-resolve": "^4.1.0", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.3", - "css-tree": "^3.0.1", - "debug": "^4.3.7", - "fast-glob": "^3.3.2", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^9.1.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^6.0.2", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.35.0", - "mathml-tag-names": "^2.1.3", - "meow": "^13.2.0", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.49", - "postcss-resolve-nested-selector": "^0.1.6", - "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "supports-hyperlinks": "^3.1.0", - "svg-tags": "^1.0.0", - "table": "^6.9.0", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", - "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.1.0" - } - }, - "node_modules/stylelint-config-standard": { - "version": "36.0.1", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", - "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "dependencies": { - "stylelint-config-recommended": "^14.0.1" - }, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.1.0" - } - }, - "node_modules/stylelint/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/stylelint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stylelint/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", - "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tailwindcss": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", - "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "license": "Apache-2.0" - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true, - "license": "MIT" - }, - "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - } - } -} diff --git a/package.json b/package.json index 114fcff..f5eece1 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,4 @@ { - "dependencies": { - "tailwindcss": "3.4.10" - }, - "scripts": { - "build": "tailwindcss -c src/styles/tailwind.config.js -i src/styles/tailwind.css -o assets/styles/tailwind_output.css", - "watch": "npm run build -- --watch" - }, "devDependencies": { "htmlhint": "1.1.4", "markdownlint-cli": "0.43.0", diff --git a/scripts/export_android_bundle.sh b/scripts/export_android_bundle.sh new file mode 100644 index 0000000..f00b509 --- /dev/null +++ b/scripts/export_android_bundle.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +mkdir -p ../bundle \ +&& docker compose -f docker-compose-prod.yaml cp app:/srv/app/android bundle diff --git a/src/components/app.rs b/src/components/app.rs index 0760d37..0a1ce27 100644 --- a/src/components/app.rs +++ b/src/components/app.rs @@ -1,15 +1,18 @@ -use crate::query::{QueryErrors, QueryKey, QueryValue}; +use crate::internationalization::get_language_identifier; use crate::route::Route; -use crate::server::internationalization::get_language_identifier; use dioxus::core_macro::rsx; use dioxus::dioxus_core::Element; use dioxus::prelude::*; use dioxus_i18n::prelude::*; use dioxus_i18n::unic_langid::langid; -use dioxus_query::prelude::use_init_query_client; const FAVICON: Asset = asset!("/assets/favicon.ico"); -const TAILWIND_CSS: Asset = asset!("/assets/styles/tailwind_output.css"); +const TAILWIND_CSS: Asset = asset!("/assets/tailwind.css"); +#[used] +static FONTS_DIRECTORY: Asset = asset!( + "/assets/fonts", + AssetOptions::builder().with_hash_suffix(false) +); const FONTS_CSS: Asset = asset!("/assets/styles/fonts.css"); const INPUT_NUMBER_ARROWS_CSS: Asset = asset!("/assets/styles/input_number_arrows.css"); const INPUT_RANGE_CSS: Asset = asset!("/assets/styles/input_range.css"); @@ -17,13 +20,8 @@ const MANIFEST: Asset = asset!("/assets/manifest.json"); #[component] pub(crate) fn App() -> Element { - use_init_query_client::(); - - let language_identifier = use_server_future(get_language_identifier)? - .unwrap() - .unwrap(); use_init_i18n(|| { - I18nConfig::new(language_identifier) + I18nConfig::new(get_language_identifier()) .with_locale(Locale::new_static( langid!("cs-CZ"), include_str!("../internationalization/cs_cz.ftl"), @@ -44,7 +42,7 @@ pub(crate) fn App() -> Element { document::Script { src: "https://kit.fontawesome.com/3c1b409f8f.js" } div { - class: "min-h-screen text-zinc-200 bg-zinc-800 pt-4 pb-36", + class: "min-h-screen pt-4 pb-36 flex flex-col text-zinc-200 bg-zinc-800", Router:: {} } } diff --git a/src/components/bottom_panel.rs b/src/components/bottom_panel.rs index b7abab9..507b3ba 100644 --- a/src/components/bottom_panel.rs +++ b/src/components/bottom_panel.rs @@ -1,3 +1,4 @@ +use crate::components::error_boundary_message::ErrorBoundaryMessage; use crate::components::navigation::Navigation; use crate::components::project_form::ProjectForm; use crate::components::task_form::TaskForm; @@ -23,6 +24,7 @@ pub(crate) fn BottomPanel(display_form: Signal) -> Element { } else { spawn(async move { // Necessary for a smooth – not instant – height transition. + #[cfg(not(feature = "server"))] async_std::task::sleep(std::time::Duration::from_millis(500)).await; /* The check is necessary for the situation when the user expands the panel while it is being closed. */ @@ -36,7 +38,7 @@ pub(crate) fn BottomPanel(display_form: Signal) -> Element { rsx! { div { class: format!( - "pointer-events-auto bg-zinc-700/50 rounded-t-xl border-t-zinc-600 border-t backdrop-blur drop-shadow-[0_-5px_10px_rgba(0,0,0,0.2)] transition-[height] duration-[500ms] ease-[cubic-bezier(0.79,0.14,0.15,0.86)] overflow-y-scroll {}", + "flex flex-col pointer-events-auto bg-zinc-700/50 rounded-t-xl border-t-zinc-600 border-t backdrop-blur drop-shadow-[0_-5px_10px_rgba(0,0,0,0.2)] transition-[height] duration-[500ms] ease-[cubic-bezier(0.79,0.14,0.15,0.86)] overflow-y-scroll {}", match (display_form(), current_route, navigation_expanded()) { (false, _, false) => "h-[66px]", (false, _, true) => "h-[130px]", @@ -45,22 +47,24 @@ pub(crate) fn BottomPanel(display_form: Signal) -> Element { } ), if expanded() { - match current_route { - Route::ProjectsPage => rsx! { - ProjectForm { - project: project_being_edited(), - on_successful_submit: move |_| { - display_form.set(false); - project_being_edited.set(None); + ErrorBoundaryMessage { + match current_route { + Route::ProjectsPage => rsx! { + ProjectForm { + project: project_being_edited(), + on_successful_submit: move |_| { + display_form.set(false); + project_being_edited.set(None); + } } - } - }, - _ => rsx! { - TaskForm { - task: task_being_edited(), - on_successful_submit: move |_| { - display_form.set(false); - task_being_edited.set(None); + }, + _ => rsx! { + TaskForm { + task: task_being_edited(), + on_successful_submit: move |_| { + display_form.set(false); + task_being_edited.set(None); + } } } } diff --git a/src/components/category_calendar_task_list.rs b/src/components/category_calendar_task_list.rs new file mode 100644 index 0000000..fda7909 --- /dev/null +++ b/src/components/category_calendar_task_list.rs @@ -0,0 +1,64 @@ +use crate::components::task_list::TaskList; +use crate::hooks::use_tasks_with_subtasks_in_category; +use crate::internationalization::LocaleFromLanguageIdentifier; +use crate::models::category::Category; +use crate::models::task::TaskWithSubtasks; +use chrono::{Datelike, Local}; +use dioxus::core_macro::{component, rsx}; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; +use dioxus_i18n::prelude::i18n; +use dioxus_i18n::t; + +const CALENDAR_LENGTH_DAYS: usize = 366 * 3; + +#[component] +pub(crate) fn CategoryCalendarTaskList() -> Element { + let today_date = Local::now().date_naive(); + let tasks = use_tasks_with_subtasks_in_category(Category::Calendar { + date: today_date, + reoccurrence: None, + time: None, + })?(); + + rsx! { + div { + class: "pt-4 flex flex-col gap-8", + for date_current in today_date.iter_days().take(CALENDAR_LENGTH_DAYS) { + div { + class: "flex flex-col gap-4", + div { + class: "px-8 flex flex-row items-center gap-2 font-bold", + div { + class: "pt-1", + { + date_current.format_localized(t!( + if date_current.year() == Local::now().year() { + "date-weekday-format" + } else { + "date-weekday-year-format" + } + ).as_str(), + LocaleFromLanguageIdentifier::from( + &i18n().language() + ).into() + ) + .to_string() + } + } + } + TaskList { + tasks: tasks.iter().filter(|task| { + if let Category::Calendar { date, .. } + = task.task.category { + date == date_current + } else { + panic!("Unexpected category."); + } + }).cloned().collect::>() + } + } + } + } + } +} diff --git a/src/components/category_input.rs b/src/components/category_input.rs index eee5198..4f0cb95 100644 --- a/src/components/category_input.rs +++ b/src/components/category_input.rs @@ -14,7 +14,7 @@ pub(crate) fn CategoryInput( button { r#type: "button", class: format!( - "py-2 rounded-lg grow basis-0 {}", + "py-2 rounded-lg grow basis-0 {} cursor-pointer", if selected_category() == Category::SomedayMaybe { "bg-zinc-500/50" } else { "bg-zinc-800/50" } ), @@ -28,7 +28,7 @@ pub(crate) fn CategoryInput( button { r#type: "button", class: format!( - "py-2 rounded-lg grow basis-0 {}", + "py-2 rounded-lg grow basis-0 {} cursor-pointer", if selected_category() == Category::LongTerm { "bg-zinc-500/50" } else { "bg-zinc-800/50" } ), @@ -42,7 +42,7 @@ pub(crate) fn CategoryInput( button { r#type: "button", class: format!( - "py-2 rounded-lg grow basis-0 {}", + "py-2 rounded-lg grow basis-0 {} cursor-pointer", if let Category::WaitingFor(_) = selected_category() { "bg-zinc-500/50" } else { "bg-zinc-800/50" } ), @@ -56,7 +56,7 @@ pub(crate) fn CategoryInput( button { r#type: "button", class: format!( - "py-2 rounded-lg grow basis-0 {}", + "py-2 rounded-lg grow basis-0 {} cursor-pointer", if selected_category() == Category::NextSteps { "bg-zinc-500/50" } else { "bg-zinc-800/50" } ), @@ -70,7 +70,7 @@ pub(crate) fn CategoryInput( button { r#type: "button", class: format!( - "py-2 rounded-lg grow basis-0 {}", + "py-2 rounded-lg grow basis-0 {} cursor-pointer", if let Category::Calendar { .. } = selected_category() { "bg-zinc-500/50" } else { "bg-zinc-800/50" } ), @@ -88,7 +88,7 @@ pub(crate) fn CategoryInput( button { r#type: "button", class: format!( - "py-2 rounded-lg grow basis-0 {}", + "py-2 rounded-lg grow basis-0 {} cursor-pointer", if selected_category() == Category::Inbox { "bg-zinc-500/50" } else { "bg-zinc-800/50" } ), diff --git a/src/components/category_today_task_list.rs b/src/components/category_today_task_list.rs new file mode 100644 index 0000000..fd4e504 --- /dev/null +++ b/src/components/category_today_task_list.rs @@ -0,0 +1,133 @@ +use crate::components::task_list::TaskList; +use crate::components::task_list_item::TaskListItem; +use crate::hooks::use_tasks_with_subtasks_in_category; +use crate::internationalization::LocaleFromLanguageIdentifier; +use crate::models::category::Category; +use crate::models::task::TaskWithSubtasks; +use chrono::Local; +use dioxus::prelude::*; +use dioxus_i18n::t; +use dioxus_i18n::use_i18n::i18n; +use voca_rs::Voca; + +#[component] +pub(crate) fn CategoryTodayTaskList() -> Element { + let today_date = Local::now().date_naive(); + let calendar_tasks = use_tasks_with_subtasks_in_category(Category::Calendar { + date: today_date, + reoccurrence: None, + time: None, + })?(); + let today_tasks = calendar_tasks + .iter() + .filter(|task| { + if let Category::Calendar { date, .. } = task.task.category { + date == today_date + } else { + panic!("Unexpected category."); + } + }) + .cloned() + .collect::>(); + let overdue_tasks = calendar_tasks + .iter() + .filter(|task| { + if let Category::Calendar { date, .. } = task.task.category { + date < today_date + } else { + panic!("Unexpected category."); + } + }) + .cloned() + .collect::>(); + let long_term_tasks = use_tasks_with_subtasks_in_category(Category::LongTerm)?(); + + rsx! { + div { + class: "pt-4 flex flex-col gap-8", + div { + class: "flex flex-col gap-4", + div { + class: "px-8 flex flex-row items-center gap-2 font-bold", + i { + class: "fa-solid fa-water text-xl w-6 text-center" + } + div { + class: "mt-1", + {t!("long-term")._upper_first()} + } + } + div { + for task in long_term_tasks { + div { + key: "{task.task.id}", + class: format!( + "px-8 pt-5 {} flex flex-row gap-4", + if task.task.deadline.is_some() { + "pb-0.5" + } else { + "pb-5" + } + ), + TaskListItem { + task: task.clone() + } + } + } + } + } + if !overdue_tasks.is_empty() { + div { + class: "flex flex-col gap-4", + div { + class: "px-8 flex flex-row items-center gap-2 font-bold", + i { + class: "fa-solid fa-calendar-xmark text-xl w-6 text-center" + } + div { + class: "mt-1", + {t!("overdue")._upper_first()} + } + } + TaskList { + tasks: overdue_tasks, + class: "pb-3" + } + } + } + div { + class: "flex flex-col gap-4", + div { + class: "px-8 flex flex-row items-center gap-2 font-bold", + i { + class: "fa-solid fa-calendar-check text-xl w-6 text-center" + } + div { + class: "mt-1", + { + let format = t!("date-weekday-format"); + let today_date = today_date.format_localized( + format.as_str(), + LocaleFromLanguageIdentifier::from( + &i18n().language() + ).into() + ).to_string(); + format!( + "{} – {}", + t!("today")._upper_first(), + if t!("weekday-lowercase-first").parse().unwrap() { + today_date._lower_first() + } else { + today_date + } + ) + } + } + } + TaskList { + tasks: today_tasks + } + } + } + } +} diff --git a/src/components/error_boundary_message.rs b/src/components/error_boundary_message.rs new file mode 100644 index 0000000..ddd0b97 --- /dev/null +++ b/src/components/error_boundary_message.rs @@ -0,0 +1,27 @@ +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn ErrorBoundaryMessage(children: Element, class: Option) -> Element { + rsx! { + ErrorBoundary { + handle_error: |_| { + rsx! { + div { + class: "grow flex flex-col justify-center items-center", + div { + i { + class: "text-3xl fa-solid fa-triangle-exclamation" + } + } + } + } + }, + div { + class, + {children} + } + } + } +} diff --git a/src/components/form_open_button.rs b/src/components/form_open_button.rs index f96afeb..b63a1c6 100644 --- a/src/components/form_open_button.rs +++ b/src/components/form_open_button.rs @@ -9,7 +9,7 @@ pub(crate) fn FormOpenButton(opened: Signal) -> Element { rsx! { button { - class: "pointer-events-auto m-4 py-3 px-5 self-end text-center bg-zinc-300/50 rounded-xl border-t-zinc-200 border-t backdrop-blur drop-shadow-[0_-5px_10px_rgba(0,0,0,0.2)] text-2xl text-zinc-200", + class: "pointer-events-auto m-4 py-3 px-5 self-end text-center bg-zinc-300/50 rounded-xl border-t-zinc-200 border-t backdrop-blur drop-shadow-[0_-5px_10px_rgba(0,0,0,0.2)] text-2xl text-zinc-200 cursor-pointer", onclick: move |_| { if opened() { project_being_edited.set(None); diff --git a/src/components/home.rs b/src/components/home.rs deleted file mode 100644 index 6d32e69..0000000 --- a/src/components/home.rs +++ /dev/null @@ -1,8 +0,0 @@ -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; - -#[component] -pub(crate) fn Home() -> Element { - rsx! {} -} diff --git a/src/components/mod.rs b/src/components/mod.rs index 4d19619..81d8ae0 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -1,13 +1,15 @@ pub(crate) mod app; pub(crate) mod bottom_panel; +pub(crate) mod category_calendar_task_list; pub(crate) mod category_input; +pub(crate) mod category_today_task_list; +pub(crate) mod error_boundary_message; pub(crate) mod form_open_button; -pub(crate) mod home; -pub(crate) mod layout; pub(crate) mod navigation; pub(crate) mod navigation_item; -pub(crate) mod pages; pub(crate) mod project_form; +pub(crate) mod project_list; +pub(crate) mod project_select; pub(crate) mod reoccurrence_input; pub(crate) mod sticky_bottom; pub(crate) mod subtasks_form; diff --git a/src/components/navigation.rs b/src/components/navigation.rs index 787ba98..03ebc0d 100644 --- a/src/components/navigation.rs +++ b/src/components/navigation.rs @@ -9,7 +9,7 @@ pub(crate) fn Navigation(expanded: Signal) -> Element { class: "grid grid-cols-5 justify-stretch", button { class: format!( - "py-4 text-center text-2xl {}", + "py-4 text-center text-2xl {} cursor-pointer", if expanded() { "text-zinc-200" } else { "text-zinc-500" } ), diff --git a/src/components/pages/category_calendar_page.rs b/src/components/pages/category_calendar_page.rs deleted file mode 100644 index 4b04825..0000000 --- a/src/components/pages/category_calendar_page.rs +++ /dev/null @@ -1,84 +0,0 @@ -use crate::components::task_list::TaskList; -use crate::internationalization::LocaleFromLanguageIdentifier; -use crate::models::category::Category; -use crate::models::task::TaskWithSubtasks; -use crate::query::QueryValue; -use crate::query::tasks::use_tasks_with_subtasks_in_category_query; -use chrono::{Datelike, Local}; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; -use dioxus_i18n::prelude::i18n; -use dioxus_i18n::t; -use dioxus_query::prelude::QueryResult; - -const CALENDAR_LENGTH_DAYS: usize = 366 * 3; - -#[component] -pub(crate) fn CategoryCalendarPage() -> Element { - let tasks = use_tasks_with_subtasks_in_category_query(Category::Calendar { - date: Local::now().date_naive(), - reoccurrence: None, - time: None, - }); - let tasks_query_result = tasks.result(); - - rsx! { - match tasks_query_result.value() { - QueryResult::Ok(QueryValue::TasksWithSubtasks(tasks)) - | QueryResult::Loading(Some(QueryValue::TasksWithSubtasks(tasks))) => { - let today_date = Local::now().date_naive(); - - rsx! { - div { - class: "pt-4 flex flex-col gap-8", - for date_current in today_date.iter_days().take(CALENDAR_LENGTH_DAYS) { - div { - class: "flex flex-col gap-4", - div { - class: "px-8 flex flex-row items-center gap-2 font-bold", - div { - class: "pt-1", - { - date_current.format_localized(t!( - if date_current.year() == Local::now().year() { - "date-weekday-format" - } else { - "date-weekday-year-format" - } - ).as_str(), - LocaleFromLanguageIdentifier::from( - &i18n().language() - ).into() - ) - .to_string() - } - } - } - TaskList { - tasks: tasks.iter().filter(|task| { - if let Category::Calendar { date, .. } - = task.task().category() { - *date == date_current - } else { - panic!("Unexpected category."); - } - }).cloned().collect::>() - } - } - } - } - } - }, - QueryResult::Loading(None) => rsx! { - // TODO: Add a loading indicator. - }, - QueryResult::Err(errors) => rsx! { - div { - "Errors occurred: {errors:?}" - } - }, - value => panic!("Unexpected query result: {value:?}") - } - } -} diff --git a/src/components/pages/category_done_page.rs b/src/components/pages/category_done_page.rs deleted file mode 100644 index eafbc03..0000000 --- a/src/components/pages/category_done_page.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::components::pages::category_page::CategoryPage; -use crate::models::category::Category; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; - -#[component] -pub(crate) fn CategoryDonePage() -> Element { - rsx! { - CategoryPage { - category: Category::Done, - } - } -} diff --git a/src/components/pages/category_inbox_page.rs b/src/components/pages/category_inbox_page.rs deleted file mode 100644 index d37f3c0..0000000 --- a/src/components/pages/category_inbox_page.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::components::pages::category_page::CategoryPage; -use crate::models::category::Category; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; - -#[component] -pub(crate) fn CategoryInboxPage() -> Element { - rsx! { - CategoryPage { - category: Category::Inbox, - } - } -} diff --git a/src/components/pages/category_long_term_page.rs b/src/components/pages/category_long_term_page.rs deleted file mode 100644 index 8057cd2..0000000 --- a/src/components/pages/category_long_term_page.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::components::pages::category_page::CategoryPage; -use crate::models::category::Category; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; - -#[component] -pub(crate) fn CategoryLongTermPage() -> Element { - rsx! { - CategoryPage { - category: Category::LongTerm, - } - } -} diff --git a/src/components/pages/category_next_steps_page.rs b/src/components/pages/category_next_steps_page.rs deleted file mode 100644 index 3f83d0e..0000000 --- a/src/components/pages/category_next_steps_page.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::components::pages::category_page::CategoryPage; -use crate::models::category::Category; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; - -#[component] -pub(crate) fn CategoryNextStepsPage() -> Element { - rsx! { - CategoryPage { - category: Category::NextSteps, - } - } -} diff --git a/src/components/pages/category_page.rs b/src/components/pages/category_page.rs deleted file mode 100644 index 533cbce..0000000 --- a/src/components/pages/category_page.rs +++ /dev/null @@ -1,33 +0,0 @@ -use crate::components::task_list::TaskList; -use crate::models::category::Category; -use crate::query::QueryValue; -use crate::query::tasks::use_tasks_with_subtasks_in_category_query; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; -use dioxus_query::prelude::QueryResult; - -#[component] -pub(crate) fn CategoryPage(category: Category) -> Element { - let tasks_query = use_tasks_with_subtasks_in_category_query(category); - let tasks_query_result = tasks_query.result(); - - match tasks_query_result.value() { - QueryResult::Ok(QueryValue::TasksWithSubtasks(tasks)) - | QueryResult::Loading(Some(QueryValue::TasksWithSubtasks(tasks))) => rsx! { - TaskList { - tasks: tasks.clone(), - class: "pb-36" - } - }, - QueryResult::Loading(None) => rsx! { - // TODO: Add a loading indicator. - }, - QueryResult::Err(errors) => rsx! { - div { - "Errors occurred: {errors:?}" - } - }, - value => panic!("Unexpected query result: {value:?}"), - } -} diff --git a/src/components/pages/category_someday_maybe_page.rs b/src/components/pages/category_someday_maybe_page.rs deleted file mode 100644 index 3cd6f46..0000000 --- a/src/components/pages/category_someday_maybe_page.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::components::pages::category_page::CategoryPage; -use crate::models::category::Category; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; - -#[component] -pub(crate) fn CategorySomedayMaybePage() -> Element { - rsx! { - CategoryPage { - category: Category::SomedayMaybe, - } - } -} diff --git a/src/components/pages/category_today_page.rs b/src/components/pages/category_today_page.rs deleted file mode 100644 index 6e4a873..0000000 --- a/src/components/pages/category_today_page.rs +++ /dev/null @@ -1,166 +0,0 @@ -use crate::components::task_list::TaskList; -use crate::components::task_list_item::TaskListItem; -use crate::internationalization::LocaleFromLanguageIdentifier; -use crate::models::category::Category; -use crate::models::task::TaskWithSubtasks; -use crate::query::QueryValue; -use crate::query::tasks::use_tasks_with_subtasks_in_category_query; -use chrono::Local; -use dioxus::prelude::*; -use dioxus_i18n::t; -use dioxus_i18n::use_i18n::i18n; -use dioxus_query::prelude::QueryResult; -use voca_rs::Voca; - -#[component] -pub(crate) fn CategoryTodayPage() -> Element { - let today_date = Local::now().date_naive(); - - let calendar_tasks_query = use_tasks_with_subtasks_in_category_query(Category::Calendar { - date: today_date, - reoccurrence: None, - time: None, - }); - let calendar_tasks_query_result = calendar_tasks_query.result(); - - let long_term_tasks_query = use_tasks_with_subtasks_in_category_query(Category::LongTerm); - let long_term_tasks_query_result = long_term_tasks_query.result(); - - rsx! { - div { - class: "pt-4 flex flex-col gap-8", - match long_term_tasks_query_result.value() { - QueryResult::Ok(QueryValue::TasksWithSubtasks(tasks)) - | QueryResult::Loading(Some(QueryValue::TasksWithSubtasks(tasks))) => { - let mut tasks = tasks.clone(); - tasks.sort(); - rsx! { - div { - class: "flex flex-col gap-4", - div { - class: "px-8 flex flex-row items-center gap-2 font-bold", - i { - class: "fa-solid fa-water text-xl w-6 text-center" - } - div { - class: "mt-1", - {t!("long-term")._upper_first()} - } - } - div { - for task in tasks { - div { - key: "{task.task().id()}", - class: format!( - "px-8 pt-5 {} flex flex-row gap-4", - if task.task().deadline().is_some() { - "pb-0.5" - } else { - "pb-5" - } - ), - TaskListItem { - task: task.clone() - } - } - } - } - } - } - }, - QueryResult::Loading(None) => rsx! { - // TODO: Add a loading indicator. - }, - QueryResult::Err(errors) => rsx! { - div { - "Errors occurred: {errors:?}" - } - }, - value => panic!("Unexpected query result: {value:?}") - } - match calendar_tasks_query_result.value() { - QueryResult::Ok(QueryValue::TasksWithSubtasks(tasks)) - | QueryResult::Loading(Some(QueryValue::TasksWithSubtasks(tasks))) => { - let today_tasks = tasks.iter().filter(|task| { - if let Category::Calendar { date, .. } = task.task().category() { - *date == today_date - } else { - panic!("Unexpected category."); - } - }).cloned().collect::>(); - let overdue_tasks = tasks.iter().filter(|task| { - if let Category::Calendar { date, .. } = task.task().category() { - *date < today_date - } else { - panic!("Unexpected category."); - } - }).cloned().collect::>(); - - rsx! { - if !overdue_tasks.is_empty() { - div { - class: "flex flex-col gap-4", - div { - class: "px-8 flex flex-row items-center gap-2 font-bold", - i { - class: "fa-solid fa-calendar-xmark text-xl w-6 text-center" - } - div { - class: "mt-1", - {t!("overdue")._upper_first()} - } - } - TaskList { - tasks: overdue_tasks, - class: "pb-3" - } - } - } - div { - class: "flex flex-col gap-4", - div { - class: "px-8 flex flex-row items-center gap-2 font-bold", - i { - class: "fa-solid fa-calendar-check text-xl w-6 text-center" - } - div { - class: "mt-1", - { - let format = t!("date-weekday-format"); - let today_date = today_date.format_localized( - format.as_str(), - LocaleFromLanguageIdentifier::from( - &i18n().language() - ).into() - ).to_string(); - format!( - "{} – {}", - t!("today")._upper_first(), - if t!("weekday-lowercase-first").parse().unwrap() { - today_date._lower_first() - } else { - today_date - } - ) - } - } - } - TaskList { - tasks: today_tasks - } - } - } - }, - QueryResult::Loading(None) => rsx! { - // TODO: Add a loading indicator. - }, - QueryResult::Err(errors) => rsx! { - div { - "Errors occurred: {errors:?}" - } - }, - value => panic!("Unexpected query result: {value:?}") - } - } - } -} diff --git a/src/components/pages/category_trash_page.rs b/src/components/pages/category_trash_page.rs deleted file mode 100644 index 5aded41..0000000 --- a/src/components/pages/category_trash_page.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::components::pages::category_page::CategoryPage; -use crate::models::category::Category; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; - -#[component] -pub(crate) fn CategoryTrashPage() -> Element { - rsx! { - CategoryPage { - category: Category::Trash, - } - } -} diff --git a/src/components/pages/category_waiting_for_page.rs b/src/components/pages/category_waiting_for_page.rs deleted file mode 100644 index ecda32c..0000000 --- a/src/components/pages/category_waiting_for_page.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::components::pages::category_page::CategoryPage; -use crate::models::category::Category; -use dioxus::core_macro::rsx; -use dioxus::dioxus_core::Element; -use dioxus::prelude::*; - -#[component] -pub(crate) fn CategoryWaitingForPage() -> Element { - rsx! { - CategoryPage { - category: Category::WaitingFor(String::new()), - } - } -} diff --git a/src/components/pages/projects_page.rs b/src/components/pages/projects_page.rs deleted file mode 100644 index 7218433..0000000 --- a/src/components/pages/projects_page.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::models::project::Project; -use crate::query::QueryValue; -use crate::query::projects::use_projects_query; -use dioxus::prelude::*; -use dioxus_query::prelude::QueryResult; - -#[component] -pub(crate) fn ProjectsPage() -> Element { - let projects_query = use_projects_query(); - let mut project_being_edited = use_context::>>(); - - rsx! { - match projects_query.result().value() { - QueryResult::Ok(QueryValue::Projects(projects)) - | QueryResult::Loading(Some(QueryValue::Projects(projects))) => { - let mut projects = projects.clone(); - projects.sort(); - rsx! { - div { - class: "flex flex-col", - for project in projects { - div { - key: "{project.id()}", - class: format!( - "px-8 py-4 select-none {}", - if project_being_edited().is_some_and(|p| p.id() == project.id()) { - "bg-zinc-700" - } else { "" } - ), - onclick: move |_| project_being_edited.set(Some(project.clone())), - {project.title()} - } - } - } - } - }, - QueryResult::Loading(None) => rsx! { - // TODO: Add a loading indicator. - }, - QueryResult::Err(errors) => rsx! { - div { - "Errors occurred: {errors:?}" - } - }, - value => panic!("Unexpected query result: {value:?}") - } - } -} diff --git a/src/components/project_form.rs b/src/components/project_form.rs index 90919c4..31050d6 100644 --- a/src/components/project_form.rs +++ b/src/components/project_form.rs @@ -1,33 +1,27 @@ -use crate::models::project::{NewProject, Project}; -use crate::query::{QueryErrors, QueryKey, QueryValue}; +use crate::models::project::Project; use crate::server::projects::{create_project, delete_project, edit_project}; use dioxus::core_macro::{component, rsx}; use dioxus::dioxus_core::Element; use dioxus::prelude::*; -use dioxus_query::prelude::use_query_client; #[component] pub(crate) fn ProjectForm( project: Option, on_successful_submit: EventHandler<()>, ) -> Element { - let query_client = use_query_client::(); let project_for_submit = project.clone(); - rsx! { form { onsubmit: move |event| { + event.prevent_default(); let project = project_for_submit.clone(); async move { - let new_project = NewProject::new( - event.values().get("title").unwrap().as_value() - ); + let new_project = event.parsed_values().unwrap(); if let Some(project) = project { - let _ = edit_project(project.id(), new_project).await; + let _ = edit_project(project.id, new_project).await; } else { let _ = create_project(new_project).await; } - query_client.invalidate_queries(&[QueryKey::Projects]); on_successful_submit.call(()); } }, @@ -44,7 +38,7 @@ pub(crate) fn ProjectForm( input { name: "title", required: true, - initial_value: project.as_ref().map(|project| project.title().to_owned()), + initial_value: project.as_ref().map(|project| project.title.to_owned()), r#type: "text", class: "py-2 px-3 grow bg-zinc-800/50 rounded-lg", id: "input_title" @@ -54,13 +48,12 @@ pub(crate) fn ProjectForm( class: "flex flex-row justify-between mt-auto", button { r#type: "button", - class: "py-2 px-4 bg-zinc-300/50 rounded-lg", + class: "py-2 px-4 bg-zinc-300/50 rounded-lg cursor-pointer", onclick: move |_| { let project = project.clone(); async move { if let Some(project) = project { - let _ = delete_project(project.id()).await; - query_client.invalidate_queries(&[QueryKey::Projects]); + let _ = delete_project(project.id).await; } on_successful_submit.call(()); } @@ -71,7 +64,7 @@ pub(crate) fn ProjectForm( } button { r#type: "submit", - class: "py-2 px-4 bg-zinc-300/50 rounded-lg", + class: "py-2 px-4 bg-zinc-300/50 rounded-lg cursor-pointer", i { class: "fa-solid fa-floppy-disk" } diff --git a/src/components/project_list.rs b/src/components/project_list.rs new file mode 100644 index 0000000..ab4924c --- /dev/null +++ b/src/components/project_list.rs @@ -0,0 +1,27 @@ +use crate::{hooks::use_projects, models::project::Project}; +use dioxus::prelude::*; + +#[component] +pub(crate) fn ProjectList() -> Element { + let projects = use_projects()?(); + let mut project_being_edited = use_context::>>(); + + rsx! { + div { + class: "flex flex-col", + for project in projects { + div { + key: "{project.id}", + class: format!( + "px-8 py-4 select-none {}", + if project_being_edited().is_some_and(|p| p.id == project.id) { + "bg-zinc-700" + } else { "" } + ), + onclick: move |_| project_being_edited.set(Some(project.clone())), + {project.title.clone()} + } + } + } + } +} diff --git a/src/components/project_select.rs b/src/components/project_select.rs new file mode 100644 index 0000000..a83d101 --- /dev/null +++ b/src/components/project_select.rs @@ -0,0 +1,30 @@ +use crate::hooks::use_projects; +use dioxus::core_macro::{component, rsx}; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; +use dioxus_i18n::t; + +#[component] +pub(crate) fn ProjectSelect(initial_selected_id: Option) -> Element { + let projects = use_projects()?(); + rsx! { + select { + name: "project_id", + class: "px-3.5 py-2.5 bg-zinc-800/50 rounded-lg grow cursor-pointer", + id: "input_project", + option { + value: 0, + {t!("none")} + }, + for project in projects { + option { + value: project.id.to_string(), + initial_selected: initial_selected_id.is_some_and( + |id| id == project.id + ), + {project.title} + } + } + } + } +} diff --git a/src/components/reoccurrence_input.rs b/src/components/reoccurrence_input.rs index f76c847..e38dbe6 100644 --- a/src/components/reoccurrence_input.rs +++ b/src/components/reoccurrence_input.rs @@ -12,7 +12,7 @@ pub(crate) fn ReoccurrenceIntervalInput( button { r#type: "button", class: format!( - "py-2 rounded-lg {} {}", + "py-2 rounded-lg {} {} cursor-pointer", class_buttons.unwrap_or(""), if reoccurrence_interval().is_none() { "bg-zinc-500/50" } else { "bg-zinc-800/50" } @@ -27,7 +27,7 @@ pub(crate) fn ReoccurrenceIntervalInput( button { r#type: "button", class: format!( - "py-2 rounded-lg {} {}", + "py-2 rounded-lg {} {} cursor-pointer", class_buttons.unwrap_or(""), if let Some(ReoccurrenceInterval::Day) = reoccurrence_interval() { "bg-zinc-500/50" } @@ -43,7 +43,7 @@ pub(crate) fn ReoccurrenceIntervalInput( button { r#type: "button", class: format!( - "py-2 rounded-lg {} {}", + "py-2 rounded-lg {} {} cursor-pointer", class_buttons.unwrap_or(""), if let Some(ReoccurrenceInterval::Month) = reoccurrence_interval() { "bg-zinc-500/50" } @@ -59,7 +59,7 @@ pub(crate) fn ReoccurrenceIntervalInput( button { r#type: "button", class: format!( - "py-2 rounded-lg {} {}", + "py-2 rounded-lg {} {} cursor-pointer", class_buttons.unwrap_or(""), if let Some(ReoccurrenceInterval::Year) = reoccurrence_interval() { "bg-zinc-500/50" } diff --git a/src/components/subtasks_form.rs b/src/components/subtasks_form.rs index f18dc36..302fd3c 100644 --- a/src/components/subtasks_form.rs +++ b/src/components/subtasks_form.rs @@ -1,36 +1,31 @@ +use crate::hooks::use_subtasks_of_task; use crate::models::subtask::NewSubtask; use crate::models::task::Task; -use crate::query::subtasks::use_subtasks_of_task_query; -use crate::query::{QueryErrors, QueryKey, QueryValue}; use crate::server::subtasks::{create_subtask, delete_subtask, edit_subtask}; use dioxus::core_macro::{component, rsx}; use dioxus::dioxus_core::Element; use dioxus::prelude::*; -use dioxus_query::prelude::{QueryResult, use_query_client}; #[component] pub(crate) fn SubtasksForm(task: Task) -> Element { - let query_client = use_query_client::(); - let subtasks_query = use_subtasks_of_task_query(task.id()); - + let subtasks = use_subtasks_of_task(task.id)?(); let mut new_title = use_signal(String::new); - rsx! { form { class: "flex flex-row items-center gap-3", onsubmit: move |event| { + event.prevent_default(); let task = task.clone(); async move { - let new_subtask = NewSubtask::new( - task.id(), - event.values().get("title").unwrap().as_value(), - false - ); + let new_subtask = NewSubtask { + task_id: task.id, + title: event.get("title").first().cloned().and_then(|value| match value { + FormValue::Text(value) => Some(value), + FormValue::File(_) => None + }).unwrap(), + is_completed: false + }; let _ = create_subtask(new_subtask).await; - query_client.invalidate_queries(&[ - QueryKey::SubtasksOfTaskId(task.id()), - QueryKey::TasksWithSubtasksInCategory(task.category().clone()), - ]); new_title.set(String::new()); } }, @@ -61,126 +56,84 @@ pub(crate) fn SubtasksForm(task: Task) -> Element { } } } - match subtasks_query.result().value() { - QueryResult::Ok(QueryValue::Subtasks(subtasks)) - | QueryResult::Loading(Some(QueryValue::Subtasks(subtasks))) => { - let mut subtasks = subtasks.clone(); - subtasks.sort(); - rsx! { - for subtask in subtasks { - div { - key: "{subtask.id()}", - class: "flex flex-row items-center gap-3", - i { - class: format!( - "{} min-w-6 text-center text-2xl text-zinc-400/50", - if subtask.is_completed() { - "fa solid fa-square-check" - } else { - "fa-regular fa-square" - } - ), - onclick: { - let subtask = subtask.clone(); - let task = task.clone(); - move |_| { - let subtask = subtask.clone(); - let task = task.clone(); - async move { - let new_subtask = NewSubtask::new( - subtask.task_id(), - subtask.title().to_owned(), - !subtask.is_completed() - ); - let _ = edit_subtask( - subtask.id(), - new_subtask - ).await; - query_client.invalidate_queries(&[ - QueryKey::SubtasksOfTaskId(task.id()), - QueryKey::TasksWithSubtasksInCategory( - task.category().clone() - ), - ]); - } - } - } + for subtask in subtasks { + div { + key: "{subtask.id}", + class: "flex flex-row items-center gap-3", + i { + class: format!( + "{} min-w-6 text-center text-2xl text-zinc-400/50", + if subtask.is_completed { + "fa solid fa-square-check" + } else { + "fa-regular fa-square" + } + ), + onclick: { + let subtask = subtask.clone(); + move |_| { + let subtask = subtask.clone(); + async move { + let new_subtask = NewSubtask { + task_id: subtask.task_id, + title: subtask.title.clone(), + is_completed: !subtask.is_completed + }; + let _ = edit_subtask( + subtask.id, + new_subtask + ).await; } - div { - class: "grow grid grid-cols-6 gap-2", - input { - r#type: "text", - class: "grow py-2 px-3 col-span-5 bg-zinc-800/50 rounded-lg", - id: "input_title_{subtask.id()}", - initial_value: subtask.title(), - onchange: { - let subtask = subtask.clone(); - let task = task.clone(); - move |event: Event| { - let subtask = subtask.clone(); - let task = task.clone(); - async move { - let new_subtask = NewSubtask::new( - subtask.task_id(), - event.value(), - subtask.is_completed() - ); - if new_subtask.title.is_empty() { - let _ = delete_subtask(subtask.id()).await; - } else { - let _ = edit_subtask( - subtask.id(), - new_subtask - ).await; - } - query_client.invalidate_queries(&[ - QueryKey::SubtasksOfTaskId(task.id()), - QueryKey::TasksWithSubtasksInCategory( - task.category().clone() - ), - ]); - } - } - } - } - button { - r#type: "button", - class: "py-2 col-span-1 bg-zinc-800/50 rounded-lg", - onclick: { - let subtask = subtask.clone(); - let task = task.clone(); - move |_| { - let subtask = subtask.clone(); - let task = task.clone(); - async move { - let _ = delete_subtask(subtask.id()).await; - query_client.invalidate_queries(&[ - QueryKey::SubtasksOfTaskId(task.id()), - QueryKey::TasksWithSubtasksInCategory( - task.category().clone() - ), - ]); - } - } - }, - i { - class: "fa-solid fa-trash-can" + } + } + } + div { + class: "grow grid grid-cols-6 gap-2", + input { + r#type: "text", + class: "grow py-2 px-3 col-span-5 bg-zinc-800/50 rounded-lg", + id: "input_title_{subtask.id}", + initial_value: subtask.title.clone(), + onchange: { + let subtask = subtask.clone(); + move |event: Event| { + let subtask = subtask.clone(); + async move { + let new_subtask = NewSubtask { + task_id: subtask.task_id, + title: event.value(), + is_completed: subtask.is_completed + }; + if new_subtask.title.is_empty() { + let _ = delete_subtask(subtask.id).await; + } else { + let _ = edit_subtask( + subtask.id, + new_subtask + ).await; } } } } } + button { + r#type: "button", + class: "py-2 col-span-1 bg-zinc-800/50 rounded-lg", + onclick: { + let subtask = subtask.clone(); + move |_| { + let subtask = subtask.clone(); + async move { + let _ = delete_subtask(subtask.id).await; + } + } + }, + i { + class: "fa-solid fa-trash-can" + } + } } - }, - QueryResult::Loading(None) => rsx! { - // TODO: Add a loading indicator. - }, - QueryResult::Err(errors) => rsx! { - div { - "Errors occurred: {errors:?}" - } - }, - value => panic!("Unexpected query result: {value:?}") + } } } } diff --git a/src/components/task_form.rs b/src/components/task_form.rs index b178502..ae3937d 100644 --- a/src/components/task_form.rs +++ b/src/components/task_form.rs @@ -1,11 +1,10 @@ use crate::components::category_input::CategoryInput; +use crate::components::project_select::ProjectSelect; use crate::components::reoccurrence_input::ReoccurrenceIntervalInput; use crate::components::subtasks_form::SubtasksForm; use crate::models::category::{CalendarTime, Category, Reoccurrence}; use crate::models::task::NewTask; use crate::models::task::Task; -use crate::query::projects::use_projects_query; -use crate::query::{QueryErrors, QueryKey, QueryValue}; use crate::route::Route; use crate::server::tasks::{create_task, delete_task, edit_task}; use chrono::Duration; @@ -13,7 +12,7 @@ use dioxus::core_macro::{component, rsx}; use dioxus::dioxus_core::Element; use dioxus::prelude::*; use dioxus_i18n::t; -use dioxus_query::prelude::{QueryResult, use_query_client}; +use serde::{Deserialize, Serialize}; const REMINDER_OFFSETS: [Option; 17] = [ None, @@ -35,14 +34,24 @@ const REMINDER_OFFSETS: [Option; 17] = [ Some(Duration::zero()), ]; +#[derive(Serialize, Deserialize)] +struct InputData { + title: String, + deadline: Option, + category_waiting_for: Option, + category_calendar_date: Option, + category_calendar_reoccurrence_length: Option, + category_calendar_time: Option, + category_calendar_reminder_offset_index: Option, + project_id: Option, +} + #[component] pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<()>) -> Element { - let projects_query = use_projects_query(); - let route = use_route::(); let selected_category = use_signal(|| { if let Some(task) = &task { - task.category().clone() + task.category.clone() } else { match route { Route::CategorySomedayMaybePage => Category::SomedayMaybe, @@ -63,37 +72,34 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() if let Category::Calendar { reoccurrence: Some(reoccurrence), .. - } = task.category() + } = &task.category { - Some(reoccurrence.interval().clone()) + Some(reoccurrence.interval.clone()) } else { None } }) }); let mut category_calendar_has_time = use_signal(|| { - task.as_ref().is_some_and(|task| { - matches!(*task.category(), Category::Calendar { time: Some(_), .. }) - }) + task.as_ref() + .is_some_and(|task| matches!(task.category, Category::Calendar { time: Some(_), .. })) }); let mut category_calendar_reminder_offset_index = use_signal(|| { task.as_ref() .and_then(|task| { if let Category::Calendar { time: Some(time), .. - } = task.category() + } = &task.category { REMINDER_OFFSETS .iter() - .position(|&reminder_offset| reminder_offset == time.reminder_offset()) + .position(|&reminder_offset| reminder_offset == time.reminder_offset) } else { None } }) .unwrap_or(REMINDER_OFFSETS.len() - 1) }); - - let query_client = use_query_client::(); let task_for_submit = task.clone(); rsx! { @@ -103,56 +109,50 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() class: "flex flex-col gap-4", id: "form_task", onsubmit: move |event| { + event.prevent_default(); let task = task_for_submit.clone(); async move { - let new_task = NewTask::new( - event.values().get("title").unwrap().as_value(), - event.values().get("deadline").unwrap().as_value().parse().ok(), - match &selected_category() { + let input_data = event.parsed_values::().unwrap(); + let new_task = NewTask { + title: input_data.title, + deadline: input_data.deadline + .and_then(|deadline| deadline.parse().ok()), + category: match &selected_category() { Category::WaitingFor(_) => Category::WaitingFor( - event.values().get("category_waiting_for").unwrap() - .as_value() + input_data.category_waiting_for.unwrap() ), Category::Calendar { .. } => Category::Calendar { - date: event.values().get("category_calendar_date").unwrap() - .as_value().parse().unwrap(), + date: input_data.category_calendar_date.clone().unwrap().parse() + .unwrap(), reoccurrence: category_calendar_reoccurrence_interval().map( - |reoccurrence_interval| Reoccurrence::new( - event.values().get("category_calendar_date").unwrap() - .as_value().parse().unwrap(), - reoccurrence_interval, - event.values() - .get("category_calendar_reoccurrence_length") - .unwrap().as_value().parse().unwrap() - ) + |reoccurrence_interval| Reoccurrence { + start_date: input_data.category_calendar_date.unwrap() + .parse().unwrap(), + interval: reoccurrence_interval, + length: input_data.category_calendar_reoccurrence_length + .unwrap().parse().unwrap() + } ), - time: event.values().get("category_calendar_time").unwrap() - .as_value().parse().ok().map(|time| - CalendarTime::new( + time: input_data.category_calendar_time.unwrap().parse().ok() + .map(|time| CalendarTime { time, - REMINDER_OFFSETS[ - event.values() - .get("category_calendar_reminder_offset_index") - .unwrap().as_value().parse::().unwrap() + reminder_offset: REMINDER_OFFSETS[ + input_data.category_calendar_reminder_offset_index + .unwrap().parse::().unwrap() ] - ) + } ) }, category => category.clone() }, - event.values().get("project_id").unwrap() - .as_value().parse::().ok().filter(|&id| id > 0), - ); + project_id: input_data.project_id + .and_then(|deadline| deadline.parse().ok()).filter(|&id| id > 0), + }; if let Some(task) = task { - let _ = edit_task(task.id(), new_task).await; + let _ = edit_task(task.id, new_task).await; } else { let _ = create_task(new_task).await; } - query_client.invalidate_queries(&[ - QueryKey::Tasks, - QueryKey::TasksInCategory(selected_category()), - QueryKey::TasksWithSubtasksInCategory(selected_category()), - ]); on_successful_submit.call(()); } }, @@ -168,7 +168,7 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() input { name: "title", required: true, - initial_value: task.as_ref().map(|task| task.title().to_owned()), + initial_value: task.as_ref().map(|task| task.title.clone()), r#type: "text", class: "py-2 px-3 grow bg-zinc-800/50 rounded-lg", id: "input_title" @@ -183,42 +183,22 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() class: "fa-solid fa-list text-zinc-400/50" } }, - select { - name: "project_id", - class: "px-3.5 py-2.5 bg-zinc-800/50 rounded-lg grow", - id: "input_project", - option { - value: 0, - {t!("none")} + SuspenseBoundary { + fallback: |_| { + rsx ! { + select { + class: "px-3.5 py-2.5 bg-zinc-800/50 rounded-lg grow cursor-pointer", + option { + value: 0, + {t!("none")} + }, + } + } }, - match projects_query.result().value() { - QueryResult::Ok(QueryValue::Projects(projects)) - | QueryResult::Loading(Some(QueryValue::Projects(projects))) => { - let mut projects = projects.clone(); - projects.sort(); - rsx! { - for project in projects { - option { - value: project.id().to_string(), - initial_selected: task.as_ref().is_some_and( - |task| task.project_id() == Some(project.id()) - ), - {project.title()} - } - } - } - }, - QueryResult::Loading(None) => rsx! { - // TODO: Add a loading indicator. - }, - QueryResult::Err(errors) => rsx! { - div { - "Errors occurred: {errors:?}" - } - }, - value => panic!("Unexpected query result: {value:?}") + ProjectSelect { + initial_selected_id: task.clone().and_then(|task| task.project_id) } - }, + } }, div { class: "flex flex-row items-center gap-3", @@ -231,10 +211,10 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() }, input { name: "deadline", - initial_value: task.as_ref().and_then(|task| task.deadline()) + initial_value: task.as_ref().and_then(|task| task.deadline) .map(|deadline| deadline.format("%Y-%m-%d").to_string()), r#type: "date", - class: "py-2 px-3 bg-zinc-800/50 rounded-lg grow basis-0", + class: "py-2 px-3 bg-zinc-800/50 rounded-lg grow basis-0 cursor-pointer", id: "input_deadline" } }, @@ -289,16 +269,17 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() name: "category_calendar_date", required: true, initial_value: date.format("%Y-%m-%d").to_string(), - class: "py-2 px-3 bg-zinc-800/50 rounded-lg grow", + class: + "py-2 px-3 bg-zinc-800/50 rounded-lg grow cursor-pointer", id: "input_category_calendar_date" }, input { r#type: "time", name: "category_calendar_time", initial_value: time.map(|calendar_time| - calendar_time.time().format("%H:%M").to_string() + calendar_time.time.format("%H:%M").to_string() ), - class: "py-2 px-3 bg-zinc-800/50 rounded-lg grow", + class: "py-2 px-3 bg-zinc-800/50 rounded-lg grow cursor-pointer", id: "input_category_calendar_time", oninput: move |event| { category_calendar_has_time.set(!event.value().is_empty()); @@ -330,7 +311,7 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() initial_value: category_calendar_reoccurrence_interval().map_or( String::new(), |_| reoccurrence.map_or(1, |reoccurrence| - reoccurrence.length()).to_string() + reoccurrence.length).to_string() ), class: "py-2 px-3 bg-zinc-800/50 rounded-lg col-span-2 text-right", id: "category_calendar_reoccurrence_length" @@ -354,7 +335,7 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() max: REMINDER_OFFSETS.len() as i64 - 1, initial_value: category_calendar_reminder_offset_index() .to_string(), - class: "grow input-range-reverse", + class: "grow input-range-reverse cursor-pointer", id: "category_calendar_has_reminder", oninput: move |event| { category_calendar_reminder_offset_index.set( @@ -381,37 +362,35 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() } }, if let Some(task) = task.as_ref() { - SubtasksForm { - task: task.clone() + SuspenseBoundary { + fallback: |_| { + VNode::empty() + }, + SubtasksForm { + task: task.clone() + } } } div { class: "flex flex-row justify-between mt-auto", button { r#type: "button", - class: "py-2 px-4 bg-zinc-300/50 rounded-lg", + class: "py-2 px-4 bg-zinc-300/50 rounded-lg cursor-pointer", onclick: move |_| { let task = task.clone(); async move { if let Some(task) = task { - if *(task.category()) == Category::Trash { - let _ = delete_task(task.id()).await; + if let Category::Trash = task.category { + let _ = delete_task(task.id).await; } else { - let new_task = NewTask::new( - task.title().to_owned(), - task.deadline(), - Category::Trash, - task.project_id() - ); - - let _ = edit_task(task.id(), new_task).await; + let new_task = NewTask { + title: task.title.to_owned(), + deadline: task.deadline, + category: Category::Trash, + project_id: task.project_id + }; + let _ = edit_task(task.id, new_task).await; } - - query_client.invalidate_queries(&[ - QueryKey::Tasks, - QueryKey::TasksInCategory(task.category().clone()), - QueryKey::TasksWithSubtasksInCategory(selected_category()), - ]); } on_successful_submit.call(()); } @@ -423,7 +402,7 @@ pub(crate) fn TaskForm(task: Option, on_successful_submit: EventHandler<() button { form: "form_task", r#type: "submit", - class: "py-2 px-4 bg-zinc-300/50 rounded-lg", + class: "py-2 px-4 bg-zinc-300/50 rounded-lg cursor-pointer", i { class: "fa-solid fa-floppy-disk" } diff --git a/src/components/task_list.rs b/src/components/task_list.rs index 943b8fa..8c6dd62 100644 --- a/src/components/task_list.rs +++ b/src/components/task_list.rs @@ -1,31 +1,24 @@ use crate::components::task_list_item::TaskListItem; use crate::models::category::Category; use crate::models::task::{Task, TaskWithSubtasks}; -use crate::query::{QueryErrors, QueryKey, QueryValue}; -use crate::server::tasks::complete_task; use dioxus::core_macro::rsx; use dioxus::dioxus_core::Element; use dioxus::prelude::*; -use dioxus_query::prelude::use_query_client; #[component] pub(crate) fn TaskList(tasks: Vec, class: Option<&'static str>) -> Element { - let query_client = use_query_client::(); let mut task_being_edited = use_context::>>(); - - tasks.sort(); - rsx! { div { class: format!("flex flex-col {}", class.unwrap_or("")), for task in tasks.clone() { div { - key: "{task.task().id()}", + key: "{task.task.id}", class: format!( "px-8 pt-4 {} flex flex-row gap-4 select-none {}", - if task.task().deadline().is_some() || !task.subtasks().is_empty() { + if task.task.deadline.is_some() || !task.subtasks.is_empty() { "pb-0.5" - } else if let Category::Calendar { time, .. } = task.task().category() { + } else if let Category::Calendar { time, .. } = &task.task.category { if time.is_some() { "pb-0.5" } else { @@ -34,47 +27,27 @@ pub(crate) fn TaskList(tasks: Vec, class: Option<&'static str> } else { "pb-4" }, - if task_being_edited().is_some_and(|t| t.id() == task.task().id()) { + if task_being_edited().is_some_and(|t| t.id == task.task.id) { "bg-zinc-700" } else { "" } ), onclick: { let task = task.clone(); - move |_| task_being_edited.set(Some(task.task().clone())) + move |_| task_being_edited.set(Some(task.task.clone())) }, i { class: format!( "{} text-3xl align-middle h-9 text-zinc-500", - if *(task.task().category()) == Category::Done { + if let Category::Done = task.task.category { "fa solid fa-square-check" } else { - "fa-regular fa-square" + "fa-regular fa-square cursor-pointer" } ), onclick: { - let task = task.clone(); move |event: Event| { // To prevent editing the task. event.stop_propagation(); - let task = task.clone(); - async move { - let completed_task = complete_task(task.task().id()).await - .unwrap(); - let mut query_keys = vec![ - QueryKey::Tasks, - QueryKey::TasksInCategory( - completed_task.category().clone() - ), - QueryKey::TasksWithSubtasksInCategory(completed_task.category().clone()), - ]; - if let Category::Calendar { reoccurrence: Some(_), .. } - = task.task().category() { - query_keys.push( - QueryKey::SubtasksOfTaskId(task.task().id()) - ); - } - query_client.invalidate_queries(&query_keys); - } } } }, diff --git a/src/components/task_list_item.rs b/src/components/task_list_item.rs index e7be8fd..53b257e 100644 --- a/src/components/task_list_item.rs +++ b/src/components/task_list_item.rs @@ -11,23 +11,23 @@ use voca_rs::Voca; #[component] pub(crate) fn TaskListItem(task: TaskWithSubtasks) -> Element { + let today_date = Local::now().date_naive(); rsx! { div { class: "flex flex-col", div { class: "mt-1 grow font-medium", - {task.task().title()} + {task.task.title} }, div { class: "flex flex-row gap-4", - if let Some(deadline) = task.task().deadline() { + if let Some(deadline) = task.task.deadline { div { class: "text-sm text-zinc-400", i { class: "fa-solid fa-bomb" }, { - let today_date = Local::now().date_naive(); format!( " {}", if deadline == today_date - chrono::Days::new(1) { @@ -69,7 +69,7 @@ pub(crate) fn TaskListItem(task: TaskWithSubtasks) -> Element { } } } - if let Category::Calendar { time, .. } = task.task().category() { + if let Category::Calendar { time, .. } = task.task.category { if let Some(calendar_time) = time { div { class: "text-sm text-zinc-400", @@ -78,12 +78,12 @@ pub(crate) fn TaskListItem(task: TaskWithSubtasks) -> Element { }, { let format = t!("time-format"); - format!(" {}", calendar_time.time().format(format.as_str())) + format!(" {}", calendar_time.time.format(format.as_str())) } } } } - if !task.subtasks().is_empty() { + if !task.subtasks.is_empty() { div { class: "text-sm text-zinc-400", i { @@ -91,10 +91,10 @@ pub(crate) fn TaskListItem(task: TaskWithSubtasks) -> Element { }, {format!( " {}/{}", - task.subtasks().iter() - .filter(|subtask| subtask.is_completed()) + task.subtasks.iter() + .filter(|subtask| subtask.is_completed) .count(), - task.subtasks().len() + task.subtasks.len() )} } } diff --git a/src/dotenv/mod.rs b/src/dotenv/mod.rs new file mode 100644 index 0000000..30abc29 --- /dev/null +++ b/src/dotenv/mod.rs @@ -0,0 +1,5 @@ +load_dotenv::load_dotenv!(); + +pub(crate) const LANGUAGE_CODE: &str = env!("LANGUAGE_CODE"); +#[cfg(feature = "mobile")] +pub(crate) const MOBILE_SERVER_URL: &str = env!("MOBILE_SERVER_URL"); diff --git a/src/errors/error.rs b/src/errors/error.rs deleted file mode 100644 index 965443c..0000000 --- a/src/errors/error.rs +++ /dev/null @@ -1,36 +0,0 @@ -use serde::{Deserialize, Serialize}; -use std::fmt::Display; -use std::str::FromStr; - -#[derive(Serialize, Deserialize, Clone, Debug)] -pub enum Error { - ServerInternal, -} - -#[cfg(feature = "server")] -impl From for Error { - fn from(_: diesel::result::Error) -> Self { - Self::ServerInternal - } -} - -// has to be implemented for Dioxus server functions -impl Display for Error { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::ServerInternal => write!(f, "internal server error"), - } - } -} - -// has to be implemented for Dioxus server functions -impl FromStr for Error { - type Err = (); - - fn from_str(s: &str) -> Result { - Ok(match s { - "internal server error" => Self::ServerInternal, - _ => return Err(()), - }) - } -} diff --git a/src/errors/error_vec.rs b/src/errors/error_vec.rs deleted file mode 100644 index 6c1326f..0000000 --- a/src/errors/error_vec.rs +++ /dev/null @@ -1,45 +0,0 @@ -use serde::Deserialize; -use serde_with::serde_derive::Serialize; -use std::fmt::Display; -use std::str::FromStr; - -#[derive(Serialize, Deserialize, Clone, Debug)] -pub struct ErrorVec { - errors: Vec, -} - -impl From> for Vec { - fn from(e: ErrorVec) -> Self { - e.errors - } -} - -impl From> for ErrorVec { - fn from(e: Vec) -> Self { - ErrorVec { errors: e } - } -} - -// has to be implemented for Dioxus server functions -impl Display for ErrorVec { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "{}", - self.errors - .iter() - .map(|e| e.to_string()) - .collect::>() - .join("\n") - ) - } -} - -// has to be implemented for Dioxus server functions -impl FromStr for ErrorVec { - type Err = (); - - fn from_str(_: &str) -> Result { - Ok(ErrorVec { errors: Vec::new() }) - } -} diff --git a/src/errors/mod.rs b/src/errors/mod.rs deleted file mode 100644 index 9b0ce7b..0000000 --- a/src/errors/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub(crate) mod error; -pub(crate) mod error_vec; -pub(crate) mod project_error; -pub(crate) mod subtask_error; -pub(crate) mod task_error; diff --git a/src/errors/project_error.rs b/src/errors/project_error.rs deleted file mode 100644 index 138ab0d..0000000 --- a/src/errors/project_error.rs +++ /dev/null @@ -1,59 +0,0 @@ -use crate::errors::error::Error; -use crate::errors::error_vec::ErrorVec; -use serde::{Deserialize, Serialize}; -use std::fmt::Display; -use std::str::FromStr; -use validator::{ValidationErrors, ValidationErrorsKind}; - -#[derive(Serialize, Deserialize, Debug)] -pub enum ProjectError { - TitleLengthInvalid, - Error(Error), -} - -impl From for ErrorVec { - fn from(validation_errors: ValidationErrors) -> Self { - validation_errors - .errors() - .iter() - .flat_map(|(field, error_kind)| match field.as_ref() { - "title" => match error_kind { - ValidationErrorsKind::Field(validation_errors) => validation_errors - .iter() - .map(|validation_error| validation_error.code.as_ref()) - .map(|code| match code { - "title_length" => ProjectError::TitleLengthInvalid, - _ => panic!("Unexpected validation error code: `{code}`."), - }) - .collect::>(), - _ => panic!("Unexpected validation error kind."), - }, - _ => panic!("Unexpected validation field name: `{field}`."), - }) - .collect::>() - .into() - } -} - -#[cfg(feature = "server")] -impl From for ProjectError { - fn from(_: diesel::result::Error) -> Self { - Self::Error(Error::ServerInternal) - } -} - -// Has to be implemented for Dioxus server functions. -impl Display for ProjectError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{self:?}") - } -} - -// Has to be implemented for Dioxus server functions. -impl FromStr for ProjectError { - type Err = (); - - fn from_str(_: &str) -> Result { - Ok(Self::Error(Error::ServerInternal)) - } -} diff --git a/src/errors/subtask_error.rs b/src/errors/subtask_error.rs deleted file mode 100644 index 3a0195d..0000000 --- a/src/errors/subtask_error.rs +++ /dev/null @@ -1,79 +0,0 @@ -use crate::errors::error::Error; -use crate::errors::error_vec::ErrorVec; -use serde::{Deserialize, Serialize}; -use std::fmt::Display; -use std::str::FromStr; -use validator::{ValidationErrors, ValidationErrorsKind}; - -#[derive(Serialize, Deserialize, Debug)] -pub enum SubtaskError { - TitleLengthInvalid, - TaskNotFound, - Error(Error), -} - -impl From for ErrorVec { - fn from(validation_errors: ValidationErrors) -> Self { - validation_errors - .errors() - .iter() - .flat_map(|(field, error_kind)| match field.as_ref() { - "title" => match error_kind { - ValidationErrorsKind::Field(validation_errors) => validation_errors - .iter() - .map(|validation_error| validation_error.code.as_ref()) - .map(|code| match code { - "title_length" => SubtaskError::TitleLengthInvalid, - _ => panic!("Unexpected validation error code: `{code}`."), - }) - .collect::>(), - _ => panic!("Unexpected validation error kind."), - }, - _ => panic!("Unexpected validation field name: `{field}`."), - }) - .collect::>() - .into() - } -} - -#[cfg(feature = "server")] -impl From for SubtaskError { - fn from(diesel_error: diesel::result::Error) -> Self { - match diesel_error { - diesel::result::Error::DatabaseError( - diesel::result::DatabaseErrorKind::ForeignKeyViolation, - info, - ) => match info.constraint_name() { - Some("subtasks_task_id_fkey") => Self::TaskNotFound, - _ => Self::Error(Error::ServerInternal), - }, - _ => Self::Error(Error::ServerInternal), - } - } -} - -impl From> for ErrorVec { - fn from(error_vec: ErrorVec) -> Self { - Vec::from(error_vec) - .into_iter() - .map(SubtaskError::Error) - .collect::>() - .into() - } -} - -// Has to be implemented for Dioxus server functions. -impl Display for SubtaskError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{self:?}") - } -} - -// Has to be implemented for Dioxus server functions. -impl FromStr for SubtaskError { - type Err = (); - - fn from_str(_: &str) -> Result { - Ok(Self::Error(Error::ServerInternal)) - } -} diff --git a/src/errors/task_error.rs b/src/errors/task_error.rs deleted file mode 100644 index 170d3fd..0000000 --- a/src/errors/task_error.rs +++ /dev/null @@ -1,69 +0,0 @@ -use crate::errors::error::Error; -use crate::errors::error_vec::ErrorVec; -use serde::{Deserialize, Serialize}; -use std::fmt::Display; -use std::str::FromStr; -use validator::{ValidationErrors, ValidationErrorsKind}; - -#[derive(Serialize, Deserialize, Debug)] -pub enum TaskError { - TitleLengthInvalid, - ProjectNotFound, - Error(Error), -} - -impl From for ErrorVec { - fn from(validation_errors: ValidationErrors) -> Self { - validation_errors - .errors() - .iter() - .flat_map(|(field, error_kind)| match field.as_ref() { - "title" => match error_kind { - ValidationErrorsKind::Field(validation_errors) => validation_errors - .iter() - .map(|validation_error| validation_error.code.as_ref()) - .map(|code| match code { - "title_length" => TaskError::TitleLengthInvalid, - _ => panic!("Unexpected validation error code: `{code}`."), - }) - .collect::>(), - _ => panic!("Unexpected validation error kind."), - }, - _ => panic!("Unexpected validation field name: `{field}`."), - }) - .collect::>() - .into() - } -} - -#[cfg(feature = "server")] -impl From for TaskError { - fn from(diesel_error: diesel::result::Error) -> Self { - match diesel_error { - diesel::result::Error::DatabaseError( - diesel::result::DatabaseErrorKind::ForeignKeyViolation, - info, - ) => match info.constraint_name() { - Some("tasks_project_id_fkey") => Self::ProjectNotFound, - _ => Self::Error(Error::ServerInternal), - }, - _ => Self::Error(Error::ServerInternal), - } - } -} - -// Has to be implemented for Dioxus server functions. -impl Display for TaskError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{self:?}") - } -} - -// Has to be implemented for Dioxus server functions. -impl FromStr for TaskError { - type Err = (); - - fn from_str(_: &str) -> Result { - Ok(Self::Error(Error::ServerInternal)) - } -} diff --git a/src/hooks/mod.rs b/src/hooks/mod.rs new file mode 100644 index 0000000..27b6209 --- /dev/null +++ b/src/hooks/mod.rs @@ -0,0 +1,61 @@ +use dioxus::{ + CapturedError, + fullstack::{Loader, Loading, WebSocketOptions, use_websocket}, + prelude::*, +}; +use serde::{Serialize, de::DeserializeOwned}; + +use crate::{ + models::{category::Category, project::Project, subtask::Subtask, task::TaskWithSubtasks}, + server::{ + projects::get_projects, subtasks::get_subtasks_of_task, + tasks::get_tasks_with_subtasks_in_category, updates::subscribe_to_updates, + }, +}; + +#[allow(clippy::result_large_err)] +fn use_loader_with_update_subscription( + mut future: impl FnMut() -> F + 'static, +) -> Result, Loading> +where + F: Future> + 'static, + T: 'static + PartialEq + Serialize + DeserializeOwned, + E: Into + 'static, +{ + let mut refresh_tick = use_signal(|| 0u64); + + let loader = use_loader(move || { + let _ = refresh_tick(); // Read => dependency. + future() + }); + + let mut socket = use_websocket(|| subscribe_to_updates(WebSocketOptions::default())); + use_future(move || async move { + while socket.recv().await.is_ok() { + refresh_tick += 1; + } + }); + + loader +} + +#[allow(clippy::result_large_err)] +pub(crate) fn use_projects() -> Result>, Loading> { + use_loader_with_update_subscription(get_projects).inspect(|projects| projects().sort()) +} + +#[allow(clippy::result_large_err)] +pub(crate) fn use_tasks_with_subtasks_in_category( + filtered_category: Category, +) -> Result>, Loading> { + use_loader_with_update_subscription(move || { + get_tasks_with_subtasks_in_category(filtered_category.clone()) + }) + .inspect(|tasks| tasks().sort()) +} + +#[allow(clippy::result_large_err)] +pub(crate) fn use_subtasks_of_task(task_id: i32) -> Result>, Loading> { + use_loader_with_update_subscription(move || get_subtasks_of_task(task_id)) + .inspect(|subtasks| subtasks().sort()) +} diff --git a/src/internationalization/mod.rs b/src/internationalization/mod.rs index 08f29ca..512a9f0 100644 --- a/src/internationalization/mod.rs +++ b/src/internationalization/mod.rs @@ -1,11 +1,18 @@ +use crate::dotenv; use chrono::Locale; -use dioxus::fullstack::once_cell::sync::Lazy; use feruca::Collator; use std::ops::Deref; -use std::sync::Mutex; +use std::sync::{LazyLock, Mutex}; use unic_langid_impl::LanguageIdentifier; -pub(crate) static COLLATOR: Lazy> = Lazy::new(|| Mutex::new(Collator::default())); +pub(crate) fn get_language_identifier() -> LanguageIdentifier { + dotenv::LANGUAGE_CODE + .parse::() + .expect("The LANGUAGE_CODE environment variable is not a valid language code.") +} + +pub(crate) static COLLATOR: LazyLock> = + LazyLock::new(|| Mutex::new(Collator::default())); pub(crate) struct LocaleFromLanguageIdentifier<'a>(&'a LanguageIdentifier); diff --git a/src/components/layout.rs b/src/layouts/main.rs similarity index 65% rename from src/components/layout.rs rename to src/layouts/main.rs index 3d7ad88..030610a 100644 --- a/src/components/layout.rs +++ b/src/layouts/main.rs @@ -9,7 +9,7 @@ use dioxus::dioxus_core::Element; use dioxus::prelude::*; #[component] -pub(crate) fn Layout() -> Element { +pub(crate) fn Main() -> Element { let mut display_form = use_signal(|| false); let project_being_edited = use_context_provider::>>(|| Signal::new(None)); @@ -20,7 +20,21 @@ pub(crate) fn Layout() -> Element { }); rsx! { - Outlet:: {} + SuspenseBoundary { + fallback: |_| { + rsx! { + div { + class: "grow flex flex-col justify-center items-center", + div { + i { + class: "text-3xl fa-solid fa-cog fa-spin" + } + } + } + } + }, + Outlet:: {} + } StickyBottom { FormOpenButton { opened: display_form, diff --git a/src/layouts/mod.rs b/src/layouts/mod.rs new file mode 100644 index 0000000..052501d --- /dev/null +++ b/src/layouts/mod.rs @@ -0,0 +1,2 @@ +mod main; +pub(crate) use main::Main; diff --git a/src/main.rs b/src/main.rs index f13e271..968ed5a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,15 +1,17 @@ mod components; -mod errors; +mod dotenv; +mod hooks; mod internationalization; +mod layouts; #[cfg(feature = "server")] mod migrations; mod models; -mod query; mod route; #[cfg(feature = "server")] mod schema; mod server; mod utils; +mod views; use components::app::App; use dioxus::prelude::*; @@ -21,6 +23,9 @@ fn main() { migrations::run_migrations().expect("Failed to run migrations."); ); - info!("Starting app."); + #[cfg(feature = "mobile")] + dioxus::fullstack::set_server_url(crate::dotenv::MOBILE_SERVER_URL); + + info!("Starting the app."); launch(App); } diff --git a/src/models/category.rs b/src/models/category.rs index 7d5a352..d889e3c 100644 --- a/src/models/category.rs +++ b/src/models/category.rs @@ -104,54 +104,15 @@ pub enum ReoccurrenceInterval { #[derive(Serialize, Deserialize, Hash, Clone, Debug)] pub struct Reoccurrence { - start_date: NaiveDate, - interval: ReoccurrenceInterval, - length: u32, -} - -impl Reoccurrence { - pub fn new(start_date: NaiveDate, interval: ReoccurrenceInterval, length: u32) -> Self { - Self { - start_date, - interval, - length, - } - } - - pub fn start_date(&self) -> NaiveDate { - self.start_date - } - - pub fn interval(&self) -> &ReoccurrenceInterval { - &self.interval - } - - pub fn length(&self) -> u32 { - self.length - } + pub start_date: NaiveDate, + pub interval: ReoccurrenceInterval, + pub length: u32, } #[serde_with::serde_as] #[derive(Serialize, Deserialize, Hash, Clone, Debug)] pub struct CalendarTime { - time: NaiveTime, + pub time: NaiveTime, #[serde_as(as = "Option>")] - reminder_offset: Option, -} - -impl CalendarTime { - pub fn new(time: NaiveTime, reminder_offset: Option) -> Self { - Self { - time, - reminder_offset, - } - } - - pub fn time(&self) -> NaiveTime { - self.time - } - - pub fn reminder_offset(&self) -> Option { - self.reminder_offset - } + pub reminder_offset: Option, } diff --git a/src/models/project.rs b/src/models/project.rs index 5518cd4..4ccae66 100644 --- a/src/models/project.rs +++ b/src/models/project.rs @@ -18,29 +18,10 @@ const TITLE_LENGTH_MAX: u64 = 255; diesel(table_name = crate::schema::projects, check_for_backend(diesel::pg::Pg)) )] pub struct Project { - id: i32, - title: String, - created_at: NaiveDateTime, - updated_at: NaiveDateTime, -} - -#[allow(dead_code)] -impl Project { - pub fn id(&self) -> i32 { - self.id - } - - pub fn title(&self) -> &str { - &self.title - } - - pub fn created_at(&self) -> NaiveDateTime { - self.created_at - } - - pub fn updated_at(&self) -> NaiveDateTime { - self.updated_at - } + pub id: i32, + pub title: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, } impl Eq for Project {} @@ -56,7 +37,7 @@ impl Ord for Project { COLLATOR .lock() .unwrap() - .collate(self.title(), other.title()) + .collate(self.title.as_str(), other.title.as_str()) } } @@ -71,9 +52,3 @@ pub struct NewProject { ))] pub title: String, } - -impl NewProject { - pub fn new(title: String) -> Self { - Self { title } - } -} diff --git a/src/models/subtask.rs b/src/models/subtask.rs index b7b2159..8ba7b9c 100644 --- a/src/models/subtask.rs +++ b/src/models/subtask.rs @@ -18,7 +18,7 @@ const TITLE_LENGTH_MAX: u64 = 255; derive(Queryable, Selectable, Identifiable, Associations) )] #[cfg_attr( - feature = "server", + feature = "server", diesel( table_name = subtasks, belongs_to(Task, foreign_key = task_id), @@ -26,38 +26,12 @@ const TITLE_LENGTH_MAX: u64 = 255; ) )] pub struct Subtask { - id: i32, - task_id: i32, - title: String, - is_completed: bool, - created_at: NaiveDateTime, - updated_at: NaiveDateTime, -} - -impl Subtask { - pub fn id(&self) -> i32 { - self.id - } - - pub fn task_id(&self) -> i32 { - self.task_id - } - - pub fn title(&self) -> &str { - &self.title - } - - pub fn is_completed(&self) -> bool { - self.is_completed - } - - pub fn created_at(&self) -> NaiveDateTime { - self.created_at - } - - pub fn updated_at(&self) -> NaiveDateTime { - self.updated_at - } + pub id: i32, + pub task_id: i32, + pub title: String, + pub is_completed: bool, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, } impl Eq for Subtask {} @@ -70,9 +44,9 @@ impl PartialOrd for Subtask { impl Ord for Subtask { fn cmp(&self, other: &Self) -> Ordering { - self.is_completed() - .cmp(&other.is_completed()) - .then(self.created_at().cmp(&other.created_at())) + self.is_completed + .cmp(&other.is_completed) + .then(self.created_at.cmp(&other.created_at)) } } @@ -90,18 +64,12 @@ pub struct NewSubtask { pub is_completed: bool, } -impl NewSubtask { - pub fn new(task_id: i32, title: String, is_completed: bool) -> Self { +impl From for NewSubtask { + fn from(subtask: Subtask) -> Self { Self { - task_id, - title, - is_completed, + task_id: subtask.task_id, + title: subtask.title, + is_completed: subtask.is_completed, } } } - -impl From for NewSubtask { - fn from(subtask: Subtask) -> Self { - Self::new(subtask.task_id, subtask.title, subtask.is_completed) - } -} diff --git a/src/models/task.rs b/src/models/task.rs index 7492347..a695bea 100644 --- a/src/models/task.rs +++ b/src/models/task.rs @@ -17,43 +17,13 @@ const TITLE_LENGTH_MAX: u64 = 255; #[cfg_attr(feature = "server", derive(Queryable, Selectable, Identifiable))] #[cfg_attr(feature = "server", diesel(table_name = tasks, check_for_backend(diesel::pg::Pg)))] pub struct Task { - id: i32, - title: String, - deadline: Option, - category: Category, - project_id: Option, - created_at: NaiveDateTime, - updated_at: NaiveDateTime, -} - -impl Task { - pub fn id(&self) -> i32 { - self.id - } - - pub fn title(&self) -> &str { - &self.title - } - - pub fn deadline(&self) -> Option { - self.deadline - } - - pub fn category(&self) -> &Category { - &self.category - } - - pub fn project_id(&self) -> Option { - self.project_id - } - - pub fn created_at(&self) -> NaiveDateTime { - self.created_at - } - - pub fn updated_at(&self) -> NaiveDateTime { - self.updated_at - } + pub id: i32, + pub title: String, + pub deadline: Option, + pub category: Category, + pub project_id: Option, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, } impl Eq for Task {} @@ -83,24 +53,22 @@ impl Ord for Task { .cmp(other_date) .then( ReverseOrdOption::from( - &self_time.as_ref().map(|calendar_time| calendar_time.time()), + &self_time.as_ref().map(|calendar_time| calendar_time.time), ) .cmp(&ReverseOrdOption::from( - &other_time - .as_ref() - .map(|calendar_time| calendar_time.time()), + &other_time.as_ref().map(|calendar_time| calendar_time.time), )), ) .then( - ReverseOrdOption::from(&self.deadline()) - .cmp(&ReverseOrdOption::from(&other.deadline())), + ReverseOrdOption::from(&self.deadline) + .cmp(&ReverseOrdOption::from(&other.deadline)), ) .then(self.created_at.cmp(&other.created_at)), (Category::Done, Category::Done) | (Category::Trash, Category::Trash) => { self.updated_at.cmp(&other.updated_at).reverse() } - (_, _) => ReverseOrdOption::from(&self.deadline()) - .cmp(&ReverseOrdOption::from(&other.deadline())) + (_, _) => ReverseOrdOption::from(&self.deadline) + .cmp(&ReverseOrdOption::from(&other.deadline)) .then(self.created_at.cmp(&other.created_at)), } } @@ -108,22 +76,8 @@ impl Ord for Task { #[derive(Serialize, Deserialize, PartialEq, Clone, Debug)] pub struct TaskWithSubtasks { - task: Task, - subtasks: Vec, -} - -impl TaskWithSubtasks { - pub fn new(task: Task, subtasks: Vec) -> Self { - Self { task, subtasks } - } - - pub fn task(&self) -> &Task { - &self.task - } - - pub fn subtasks(&self) -> &Vec { - &self.subtasks - } + pub task: Task, + pub subtasks: Vec, } impl Eq for TaskWithSubtasks {} @@ -136,7 +90,7 @@ impl PartialOrd for TaskWithSubtasks { impl Ord for TaskWithSubtasks { fn cmp(&self, other: &Self) -> Ordering { - self.task().cmp(other.task()) + self.task.cmp(&other.task) } } @@ -155,24 +109,13 @@ pub struct NewTask { pub project_id: Option, } -impl NewTask { - pub fn new( - title: String, - deadline: Option, - category: Category, - project_id: Option, - ) -> Self { +impl From for NewTask { + fn from(task: Task) -> Self { Self { - title, - deadline, - category, - project_id, + title: task.title, + deadline: task.deadline, + category: task.category, + project_id: task.project_id, } } } - -impl From for NewTask { - fn from(task: Task) -> Self { - Self::new(task.title, task.deadline, task.category, task.project_id) - } -} diff --git a/src/query/mod.rs b/src/query/mod.rs deleted file mode 100644 index a2382dd..0000000 --- a/src/query/mod.rs +++ /dev/null @@ -1,34 +0,0 @@ -use crate::errors::error::Error; -use crate::errors::error_vec::ErrorVec; -use crate::models::category::Category; -use crate::models::project::Project; -use crate::models::subtask::Subtask; -use crate::models::task::{Task, TaskWithSubtasks}; - -pub(crate) mod projects; -pub(crate) mod subtasks; -pub(crate) mod tasks; - -#[allow(dead_code)] -#[derive(PartialEq, Debug)] -pub(crate) enum QueryValue { - Projects(Vec), - Tasks(Vec), - TasksWithSubtasks(Vec), - Subtasks(Vec), -} - -#[allow(dead_code)] -#[derive(Debug)] -pub(crate) enum QueryErrors { - Error(ErrorVec), -} - -#[derive(PartialEq, Eq, Hash, Clone, Debug)] -pub(crate) enum QueryKey { - Projects, - Tasks, - TasksInCategory(Category), - TasksWithSubtasksInCategory(Category), - SubtasksOfTaskId(i32), -} diff --git a/src/query/projects.rs b/src/query/projects.rs deleted file mode 100644 index 7bb1b10..0000000 --- a/src/query/projects.rs +++ /dev/null @@ -1,21 +0,0 @@ -use crate::query::{QueryErrors, QueryKey, QueryValue}; -use crate::server::projects::get_projects; -use dioxus::prelude::ServerFnError; -use dioxus_query::prelude::{QueryResult, UseQuery, use_get_query}; - -pub(crate) fn use_projects_query() -> UseQuery { - use_get_query([QueryKey::Projects, QueryKey::Tasks], fetch_projects) -} - -async fn fetch_projects(keys: Vec) -> QueryResult { - if let Some(QueryKey::Projects) = keys.first() { - match get_projects().await { - Ok(projects) => Ok(QueryValue::Projects(projects)), - Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), - Err(error) => panic!("Unexpected error: {error:?}"), - } - .into() - } else { - panic!("Unexpected query keys: {keys:?}"); - } -} diff --git a/src/query/subtasks.rs b/src/query/subtasks.rs deleted file mode 100644 index f0216c2..0000000 --- a/src/query/subtasks.rs +++ /dev/null @@ -1,26 +0,0 @@ -use crate::query::{QueryErrors, QueryKey, QueryValue}; -use crate::server::subtasks::get_subtasks_of_task; -use dioxus::prelude::ServerFnError; -use dioxus_query::prelude::{QueryResult, UseQuery, use_get_query}; - -pub(crate) fn use_subtasks_of_task_query( - task_id: i32, -) -> UseQuery { - use_get_query( - [QueryKey::SubtasksOfTaskId(task_id)], - fetch_subtasks_of_task, - ) -} - -async fn fetch_subtasks_of_task(keys: Vec) -> QueryResult { - if let Some(QueryKey::SubtasksOfTaskId(task_id)) = keys.first() { - match get_subtasks_of_task(*task_id).await { - Ok(subtasks) => Ok(QueryValue::Subtasks(subtasks)), - Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), - Err(error) => panic!("Unexpected error: {error:?}"), - } - .into() - } else { - panic!("Unexpected query keys: {keys:?}"); - } -} diff --git a/src/query/tasks.rs b/src/query/tasks.rs deleted file mode 100644 index e23b5b4..0000000 --- a/src/query/tasks.rs +++ /dev/null @@ -1,56 +0,0 @@ -use crate::models::category::Category; -use crate::query::{QueryErrors, QueryKey, QueryValue}; -use crate::server::tasks::{get_tasks_in_category, get_tasks_with_subtasks_in_category}; -use dioxus::prelude::ServerFnError; -use dioxus_query::prelude::{QueryResult, UseQuery, use_get_query}; - -#[allow(dead_code)] -pub(crate) fn use_tasks_in_category_query( - category: Category, -) -> UseQuery { - use_get_query( - [QueryKey::TasksInCategory(category), QueryKey::Tasks], - fetch_tasks_in_category, - ) -} - -async fn fetch_tasks_in_category(keys: Vec) -> QueryResult { - if let Some(QueryKey::TasksInCategory(category)) = keys.first() { - match get_tasks_in_category(category.clone()).await { - Ok(tasks) => Ok(QueryValue::Tasks(tasks)), - Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), - Err(error) => panic!("Unexpected error: {error:?}"), - } - .into() - } else { - panic!("Unexpected query keys: {keys:?}"); - } -} - -pub(crate) fn use_tasks_with_subtasks_in_category_query( - category: Category, -) -> UseQuery { - use_get_query( - [ - QueryKey::TasksWithSubtasksInCategory(category.clone()), - QueryKey::TasksInCategory(category), - QueryKey::Tasks, - ], - fetch_tasks_with_subtasks_in_category, - ) -} - -async fn fetch_tasks_with_subtasks_in_category( - keys: Vec, -) -> QueryResult { - if let Some(QueryKey::TasksWithSubtasksInCategory(category)) = keys.first() { - match get_tasks_with_subtasks_in_category(category.clone()).await { - Ok(tasks) => Ok(QueryValue::TasksWithSubtasks(tasks)), - Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), - Err(error) => panic!("Unexpected error: {error:?}"), - } - .into() - } else { - panic!("Unexpected query keys: {keys:?}"); - } -} diff --git a/src/route/mod.rs b/src/route/mod.rs index ee9ccb2..9a3f4d9 100644 --- a/src/route/mod.rs +++ b/src/route/mod.rs @@ -1,15 +1,15 @@ -use crate::components::layout::Layout; -use crate::components::pages::category_calendar_page::CategoryCalendarPage; -use crate::components::pages::category_done_page::CategoryDonePage; -use crate::components::pages::category_inbox_page::CategoryInboxPage; -use crate::components::pages::category_long_term_page::CategoryLongTermPage; -use crate::components::pages::category_next_steps_page::CategoryNextStepsPage; -use crate::components::pages::category_someday_maybe_page::CategorySomedayMaybePage; -use crate::components::pages::category_today_page::CategoryTodayPage; -use crate::components::pages::category_trash_page::CategoryTrashPage; -use crate::components::pages::category_waiting_for_page::CategoryWaitingForPage; -use crate::components::pages::not_found_page::NotFoundPage; -use crate::components::pages::projects_page::ProjectsPage; +use crate::layouts; +use crate::views::category_calendar_page::CategoryCalendarPage; +use crate::views::category_done_page::CategoryDonePage; +use crate::views::category_inbox_page::CategoryInboxPage; +use crate::views::category_long_term_page::CategoryLongTermPage; +use crate::views::category_next_steps_page::CategoryNextStepsPage; +use crate::views::category_someday_maybe_page::CategorySomedayMaybePage; +use crate::views::category_today_page::CategoryTodayPage; +use crate::views::category_trash_page::CategoryTrashPage; +use crate::views::category_waiting_for_page::CategoryWaitingForPage; +use crate::views::not_found_page::NotFoundPage; +use crate::views::projects_page::ProjectsPage; use dioxus::prelude::*; // All variants have the same postfix because they have to match the component names. @@ -17,7 +17,7 @@ use dioxus::prelude::*; #[derive(Clone, Routable, Debug, PartialEq)] #[rustfmt::skip] pub(crate) enum Route { - #[layout(Layout)] + #[layout(layouts::Main)] #[redirect("/", || Route::CategoryTodayPage {})] #[route("/today")] CategoryTodayPage, diff --git a/src/server/database_connection.rs b/src/server/database_connection.rs index fbf5a74..f2dbcd3 100644 --- a/src/server/database_connection.rs +++ b/src/server/database_connection.rs @@ -1,12 +1,8 @@ use diesel::pg::PgConnection; use diesel::prelude::*; -use dotenvy::dotenv; -use std::env; + +const DATABASE_URL: &str = "postgres://app:app@db/todo_baggins"; pub(crate) fn establish_database_connection() -> ConnectionResult { - dotenv().expect("Could not load environment variables."); - - let database_url = - env::var("DATABASE_URL").expect("The environment variable DATABASE_URL has to be set."); - PgConnection::establish(&database_url) + PgConnection::establish(DATABASE_URL) } diff --git a/src/server/internationalization.rs b/src/server/internationalization.rs deleted file mode 100644 index ef54774..0000000 --- a/src/server/internationalization.rs +++ /dev/null @@ -1,15 +0,0 @@ -use dioxus::prelude::ServerFnError; -use dioxus::prelude::*; -#[cfg(feature = "server")] -use dotenvy::dotenv; -use std::env; -use unic_langid_impl::LanguageIdentifier; - -#[server] -pub(crate) async fn get_language_identifier() -> Result { - dotenv().expect("Could not load environment variables from the .env file."); - - Ok(env::var("LANGUAGE_CODE") - .expect("The environment variable LANGUAGE_CODE must be set.") - .parse::()?) -} diff --git a/src/server/mod.rs b/src/server/mod.rs index 15324ed..e8a37b5 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,6 +1,6 @@ #[cfg(feature = "server")] pub(crate) mod database_connection; -pub(crate) mod internationalization; pub(crate) mod projects; pub(crate) mod subtasks; pub(crate) mod tasks; +pub(crate) mod updates; diff --git a/src/server/projects.rs b/src/server/projects.rs index 7714f69..984c04b 100644 --- a/src/server/projects.rs +++ b/src/server/projects.rs @@ -1,100 +1,75 @@ -use crate::errors::error::Error; -use crate::errors::error_vec::ErrorVec; -use crate::errors::project_error::ProjectError; use crate::models::project::{NewProject, Project}; #[cfg(feature = "server")] use crate::server::database_connection::establish_database_connection; #[cfg(feature = "server")] +use crate::server::updates::publish_update; +#[cfg(feature = "server")] use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper}; use dioxus::prelude::*; #[cfg(feature = "server")] use validator::Validate; #[server] -pub(crate) async fn create_project( - new_project: NewProject, -) -> Result>> { +pub(crate) async fn create_project(new_project: NewProject) -> Result { use crate::schema::projects; // TODO: replace with model sanitization (https://github.com/matous-volf/todo-baggins/issues/13) let mut new_project = new_project; new_project.title = new_project.title.trim().to_owned(); - new_project - .validate() - .map_err::, _>(|errors| errors.into())?; - - let mut connection = - establish_database_connection().map_err::, _>(|_| { - vec![ProjectError::Error(Error::ServerInternal)].into() - })?; + new_project.validate()?; + let mut connection = establish_database_connection()?; let new_project = diesel::insert_into(projects::table) .values(&new_project) .returning(Project::as_returning()) - .get_result(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_result(&mut connection)?; + + publish_update().await; Ok(new_project) } #[server] -pub(crate) async fn get_projects() -> Result, ServerFnError>> { +pub(crate) async fn get_projects() -> Result> { use crate::schema::projects::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; - + let mut connection = establish_database_connection()?; let results = projects .select(Project::as_select()) - .load::(&mut connection) - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + .load::(&mut connection)?; Ok(results) } #[server] -pub(crate) async fn edit_project( - project_id: i32, - new_project: NewProject, -) -> Result>> { +pub(crate) async fn edit_project(project_id: i32, new_project: NewProject) -> Result { use crate::schema::projects::dsl::*; // TODO: replace with model sanitization (https://github.com/matous-volf/todo-baggins/issues/13) let mut new_project = new_project; new_project.title = new_project.title.trim().to_owned(); - new_project - .validate() - .map_err::, _>(|errors| errors.into())?; - - let mut connection = - establish_database_connection().map_err::, _>(|_| { - vec![ProjectError::Error(Error::ServerInternal)].into() - })?; + new_project.validate()?; + let mut connection = establish_database_connection()?; let updated_project = diesel::update(projects) .filter(id.eq(project_id)) .set(title.eq(new_project.title)) .returning(Project::as_returning()) - .get_result(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_result(&mut connection)?; + publish_update().await; Ok(updated_project) } -// TODO: Get rid of this suppression. -//noinspection DuplicatedCode #[server] -pub(crate) async fn delete_project(project_id: i32) -> Result<(), ServerFnError>> { +pub(crate) async fn delete_project(project_id: i32) -> Result<()> { use crate::schema::projects::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; - - diesel::delete(projects.filter(id.eq(project_id))) - .execute(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + let mut connection = establish_database_connection()?; + diesel::delete(projects.filter(id.eq(project_id))).execute(&mut connection)?; + publish_update().await; Ok(()) } diff --git a/src/server/subtasks.rs b/src/server/subtasks.rs index 2f8ed31..6469861 100644 --- a/src/server/subtasks.rs +++ b/src/server/subtasks.rs @@ -1,86 +1,64 @@ -use crate::errors::error::Error; -use crate::errors::error_vec::ErrorVec; -use crate::errors::subtask_error::SubtaskError; use crate::models::subtask::{NewSubtask, Subtask}; #[cfg(feature = "server")] use crate::server::database_connection::establish_database_connection; #[cfg(feature = "server")] use crate::server::tasks::trigger_task_updated_at; #[cfg(feature = "server")] +use crate::server::updates::publish_update; +#[cfg(feature = "server")] use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper}; use dioxus::prelude::*; #[cfg(feature = "server")] use validator::Validate; #[server] -pub(crate) async fn create_subtask( - new_subtask: NewSubtask, -) -> Result>> { +pub(crate) async fn create_subtask(new_subtask: NewSubtask) -> Result { use crate::schema::subtasks; // TODO: replace with model sanitization (https://github.com/matous-volf/todo-baggins/issues/13) let mut new_subtask = new_subtask; new_subtask.title = new_subtask.title.trim().to_owned(); - new_subtask - .validate() - .map_err::, _>(|errors| errors.into())?; + new_subtask.validate()?; - let mut connection = - establish_database_connection().map_err::, _>(|_| { - vec![SubtaskError::Error(Error::ServerInternal)].into() - })?; + let mut connection = establish_database_connection()?; let created_subtask = diesel::insert_into(subtasks::table) .values(&new_subtask) .returning(Subtask::as_returning()) - .get_result(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_result(&mut connection)?; - trigger_task_updated_at(new_subtask.task_id) - .await - .map_err::, _>(|error_vec| error_vec.into())?; + trigger_task_updated_at(new_subtask.task_id).await?; + publish_update().await; Ok(created_subtask) } #[server] -pub(crate) async fn get_subtasks_of_task( - filtered_task_id: i32, -) -> Result, ServerFnError>> { +pub(crate) async fn get_subtasks_of_task(filtered_task_id: i32) -> Result> { use crate::schema::subtasks::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + let mut connection = establish_database_connection()?; let results = subtasks .select(Subtask::as_select()) .filter(task_id.eq(filtered_task_id)) - .load::(&mut connection) - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + .load::(&mut connection)?; Ok(results) } #[server] -pub(crate) async fn edit_subtask( - subtask_id: i32, - new_subtask: NewSubtask, -) -> Result>> { +pub(crate) async fn edit_subtask(subtask_id: i32, new_subtask: NewSubtask) -> Result { use crate::schema::subtasks::dsl::*; // TODO: replace with model sanitization (https://github.com/matous-volf/todo-baggins/issues/13) let mut new_subtask = new_subtask; new_subtask.title = new_subtask.title.trim().to_owned(); - new_subtask - .validate() - .map_err::, _>(|errors| errors.into())?; + new_subtask.validate()?; - let mut connection = - establish_database_connection().map_err::, _>(|_| { - vec![SubtaskError::Error(Error::ServerInternal)].into() - })?; + let mut connection = establish_database_connection()?; let updated_task = diesel::update(subtasks) .filter(id.eq(subtask_id)) @@ -89,50 +67,41 @@ pub(crate) async fn edit_subtask( is_completed.eq(new_subtask.is_completed), )) .returning(Subtask::as_returning()) - .get_result(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_result(&mut connection)?; - trigger_task_updated_at(new_subtask.task_id) - .await - .map_err::, _>(|error_vec| error_vec.into())?; + trigger_task_updated_at(new_subtask.task_id).await?; + publish_update().await; Ok(updated_task) } -#[server] -pub(crate) async fn restore_subtasks_of_task( - filtered_task_id: i32, -) -> Result, ServerFnError>> { +#[cfg(feature = "server")] +pub(super) async fn restore_subtasks_of_task(filtered_task_id: i32) -> Result> { use crate::schema::subtasks::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + let mut connection = establish_database_connection()?; let updated_subtasks = diesel::update(subtasks) .filter(task_id.eq(filtered_task_id)) .set(is_completed.eq(false)) .returning(Subtask::as_returning()) - .get_results(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_results(&mut connection)?; Ok(updated_subtasks) } -// TODO: Get rid of this suppression. -//noinspection DuplicatedCode #[server] -pub(crate) async fn delete_subtask(subtask_id: i32) -> Result<(), ServerFnError>> { +pub(crate) async fn delete_subtask(subtask_id: i32) -> Result<()> { use crate::schema::subtasks::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + let mut connection = establish_database_connection()?; let deleted_subtask = diesel::delete(subtasks.filter(id.eq(subtask_id))) .returning(Subtask::as_returning()) - .get_result(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_result(&mut connection)?; - trigger_task_updated_at(deleted_subtask.task_id()).await?; + trigger_task_updated_at(deleted_subtask.task_id).await?; + publish_update().await; Ok(()) } diff --git a/src/server/tasks.rs b/src/server/tasks.rs index 2032e9c..52519e2 100644 --- a/src/server/tasks.rs +++ b/src/server/tasks.rs @@ -1,6 +1,3 @@ -use crate::errors::error::Error; -use crate::errors::error_vec::ErrorVec; -use crate::errors::task_error::TaskError; use crate::models::category::Category; #[cfg(feature = "server")] use crate::models::category::ReoccurrenceInterval; @@ -12,6 +9,8 @@ use crate::server::database_connection::establish_database_connection; #[cfg(feature = "server")] use crate::server::subtasks::restore_subtasks_of_task; #[cfg(feature = "server")] +use crate::server::updates::publish_update; +#[cfg(feature = "server")] use chrono::{Datelike, Days, Local, Months, NaiveDate}; #[cfg(feature = "server")] use diesel::prelude::*; @@ -24,65 +23,52 @@ use time::Month; use validator::Validate; #[server] -pub(crate) async fn create_task( - new_task: NewTask, -) -> Result>> { +pub(crate) async fn create_task(new_task: NewTask) -> Result { use crate::schema::tasks; // TODO: replace with model sanitization (https://github.com/matous-volf/todo-baggins/issues/13) let mut new_task = new_task; new_task.title = new_task.title.trim().to_owned(); - new_task - .validate() - .map_err::, _>(|errors| errors.into())?; + new_task.validate()?; - let mut connection = - establish_database_connection().map_err::, _>(|_| { - vec![TaskError::Error(Error::ServerInternal)].into() - })?; + let mut connection = establish_database_connection()?; let new_task = diesel::insert_into(tasks::table) .values(&new_task) .returning(Task::as_returning()) - .get_result(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_result(&mut connection)?; + publish_update().await; Ok(new_task) } #[server] -pub(crate) async fn get_task(task_id: i32) -> Result>> { +pub(crate) async fn get_task(task_id: i32) -> Result { use crate::schema::tasks::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + let mut connection = establish_database_connection()?; let task = tasks .find(task_id) .select(Task::as_select()) .first(&mut connection) - .optional() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + .optional()?; // TODO: Handle not finding the task. Ok(task.unwrap()) } #[server] -pub(crate) async fn get_tasks_in_category( - filtered_category: Category, -) -> Result, ServerFnError>> { +pub(crate) async fn get_tasks_in_category(filtered_category: Category) -> Result> { use crate::schema::tasks::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + let mut connection = establish_database_connection()?; let results = tasks .select(Task::as_select()) .filter(filtered_category.eq_sql_predicate()) - .load::(&mut connection) - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + .load::(&mut connection)?; Ok(results) } @@ -90,52 +76,40 @@ pub(crate) async fn get_tasks_in_category( #[server] pub(crate) async fn get_tasks_with_subtasks_in_category( filtered_category: Category, -) -> Result, ServerFnError>> { +) -> Result> { use crate::schema::tasks; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + let mut connection = establish_database_connection()?; let tasks_in_category = tasks::table .filter(filtered_category.eq_sql_predicate()) .select(Task::as_select()) - .load(&mut connection) - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + .load(&mut connection)?; let subtasks = Subtask::belonging_to(&tasks_in_category) .select(Subtask::as_select()) - .load(&mut connection) - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + .load(&mut connection)?; let tasks_with_subtasks = subtasks .grouped_by(&tasks_in_category) .into_iter() .zip(tasks_in_category) - .map(|(pages, book)| TaskWithSubtasks::new(book, pages)) + .map(|(subtasks, task)| TaskWithSubtasks { task, subtasks }) .collect(); Ok(tasks_with_subtasks) } #[server] -pub(crate) async fn edit_task( - task_id: i32, - mut new_task: NewTask, -) -> Result>> { +pub(crate) async fn edit_task(task_id: i32, mut new_task: NewTask) -> Result { use crate::schema::tasks::dsl::*; // TODO: replace with model sanitization (https://github.com/matous-volf/todo-baggins/issues/13) - let mut new_task = new_task; new_task.title = new_task.title.trim().to_owned(); - new_task - .validate() - .map_err::, _>(|errors| errors.into())?; + new_task.validate()?; - let mut connection = - establish_database_connection().map_err::, _>(|_| { - vec![TaskError::Error(Error::ServerInternal)].into() - })?; + let mut connection = establish_database_connection()?; let updated_task = diesel::update(tasks) .filter(id.eq(task_id)) @@ -146,14 +120,14 @@ pub(crate) async fn edit_task( project_id.eq(new_task.project_id), )) .returning(Task::as_returning()) - .get_result(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_result(&mut connection)?; + publish_update().await; Ok(updated_task) } #[server] -pub(crate) async fn complete_task(task_id: i32) -> Result>> { +pub(crate) async fn complete_task(task_id: i32) -> Result { let task = get_task(task_id).await?; let mut new_task = NewTask::from(task); @@ -163,13 +137,13 @@ pub(crate) async fn complete_task(task_id: i32) -> Result *date = *date + Days::new(reoccurrence.length() as u64), + match reoccurrence.interval { + ReoccurrenceInterval::Day => *date = *date + Days::new(reoccurrence.length as u64), ReoccurrenceInterval::Month | ReoccurrenceInterval::Year => { *date = *date + Months::new( - reoccurrence.length() - * if *(reoccurrence.interval()) == ReoccurrenceInterval::Year { + reoccurrence.length + * if reoccurrence.interval == ReoccurrenceInterval::Year { 12 } else { 1 @@ -178,7 +152,7 @@ pub(crate) async fn complete_task(task_id: i32) -> Result Result, _>(|_| vec![Error::ServerInternal].into())?; + let updated_task = edit_task(task_id, new_task).await?; + publish_update().await; Ok(updated_task) } -// TODO: Get rid of this suppression. -//noinspection DuplicatedCode #[server] -pub(crate) async fn delete_task(task_id: i32) -> Result<(), ServerFnError>> { +pub(crate) async fn delete_task(task_id: i32) -> Result<()> { use crate::schema::tasks::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + let mut connection = establish_database_connection()?; - diesel::delete(tasks.filter(id.eq(task_id))) - .execute(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + diesel::delete(tasks.filter(id.eq(task_id))).execute(&mut connection)?; + publish_update().await; Ok(()) } #[cfg(feature = "server")] -pub(crate) async fn trigger_task_updated_at(task_id: i32) -> Result> { +pub(crate) async fn trigger_task_updated_at(task_id: i32) -> Result { use crate::schema::tasks::dsl::*; - let mut connection = establish_database_connection() - .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + let mut connection = establish_database_connection()?; let updated_task = diesel::update(tasks) .filter(id.eq(task_id)) .set(updated_at.eq(Local::now().naive_local())) .returning(Task::as_returning()) - .get_result(&mut connection) - .map_err::, _>(|error| vec![error.into()].into())?; + .get_result(&mut connection)?; Ok(updated_task) } diff --git a/src/server/updates.rs b/src/server/updates.rs new file mode 100644 index 0000000..f98ca8b --- /dev/null +++ b/src/server/updates.rs @@ -0,0 +1,76 @@ +use dioxus::{ + fullstack::{WebSocketOptions, Websocket}, + prelude::*, +}; +use serde::{Deserialize, Serialize}; + +#[cfg(feature = "server")] +use rand::random; +#[cfg(feature = "server")] +use tokio::sync::Mutex; + +#[derive(Serialize, Deserialize)] +pub(crate) struct UpdateEvent; + +#[cfg(feature = "server")] +mod server_only { + use std::{ + collections::{HashMap, HashSet}, + ops::Deref, + sync::LazyLock, + }; + + use dioxus::fullstack::TypedWebsocket; + use tokio::sync::{Mutex, RwLock}; + + use crate::server::updates::UpdateEvent; + + pub(super) struct SubscribedClient { + pub(super) websocket: Mutex>, + } + + pub(super) struct SubscribedClients(RwLock>); + + impl Deref for SubscribedClients { + type Target = RwLock>; + + fn deref(&self) -> &Self::Target { + &self.0 + } + } + + pub(super) static SUBSCRIBED_CLIENTS: LazyLock = + LazyLock::new(|| SubscribedClients(RwLock::new(HashMap::new()))); + + pub(crate) async fn publish_update() { + let mut disconnected_client_ids = HashSet::new(); + let subscribed_clients = SUBSCRIBED_CLIENTS.read().await; + for (id, client) in subscribed_clients.iter() { + if let Err(_) = client.websocket.lock().await.send(UpdateEvent).await { + disconnected_client_ids.insert(id.clone()); + } + } + drop(subscribed_clients); + if !disconnected_client_ids.is_empty() { + let mut subscribed_clients = SUBSCRIBED_CLIENTS.write().await; + subscribed_clients.retain(|id, _| !disconnected_client_ids.contains(id)); + } + } +} + +#[cfg(feature = "server")] +pub(super) use server_only::*; + +#[get("/api/subscribe_to_updates")] +pub(crate) async fn subscribe_to_updates( + websocket_options: WebSocketOptions, +) -> Result> { + Ok(websocket_options.on_upgrade(move |socket| async move { + SUBSCRIBED_CLIENTS.write().await.insert( + random(), + SubscribedClient { + websocket: Mutex::new(socket), + }, + ); + })) +} diff --git a/src/views/category_calendar_page.rs b/src/views/category_calendar_page.rs new file mode 100644 index 0000000..758e496 --- /dev/null +++ b/src/views/category_calendar_page.rs @@ -0,0 +1,14 @@ +use crate::components::category_calendar_task_list::CategoryCalendarTaskList; +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryCalendarPage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryCalendarTaskList {} + } + } +} diff --git a/src/views/category_done_page.rs b/src/views/category_done_page.rs new file mode 100644 index 0000000..55da3b4 --- /dev/null +++ b/src/views/category_done_page.rs @@ -0,0 +1,17 @@ +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use crate::models::category::Category; +use crate::views::category_page::CategoryPage; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryDonePage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryPage { + category: Category::Done, + } + } + } +} diff --git a/src/views/category_inbox_page.rs b/src/views/category_inbox_page.rs new file mode 100644 index 0000000..643ed6d --- /dev/null +++ b/src/views/category_inbox_page.rs @@ -0,0 +1,17 @@ +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use crate::models::category::Category; +use crate::views::category_page::CategoryPage; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryInboxPage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryPage { + category: Category::Inbox, + } + } + } +} diff --git a/src/views/category_long_term_page.rs b/src/views/category_long_term_page.rs new file mode 100644 index 0000000..b68920d --- /dev/null +++ b/src/views/category_long_term_page.rs @@ -0,0 +1,17 @@ +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use crate::models::category::Category; +use crate::views::category_page::CategoryPage; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryLongTermPage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryPage { + category: Category::LongTerm, + } + } + } +} diff --git a/src/views/category_next_steps_page.rs b/src/views/category_next_steps_page.rs new file mode 100644 index 0000000..0a30e39 --- /dev/null +++ b/src/views/category_next_steps_page.rs @@ -0,0 +1,17 @@ +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use crate::models::category::Category; +use crate::views::category_page::CategoryPage; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryNextStepsPage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryPage { + category: Category::NextSteps, + } + } + } +} diff --git a/src/views/category_page.rs b/src/views/category_page.rs new file mode 100644 index 0000000..b80a395 --- /dev/null +++ b/src/views/category_page.rs @@ -0,0 +1,18 @@ +use crate::components::task_list::TaskList; +use crate::hooks::use_tasks_with_subtasks_in_category; +use crate::models::category::Category; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryPage(category: Category) -> Element { + let tasks = use_tasks_with_subtasks_in_category(category)?(); + + rsx! { + TaskList { + tasks: tasks.clone(), + class: "pb-36" + } + } +} diff --git a/src/views/category_someday_maybe_page.rs b/src/views/category_someday_maybe_page.rs new file mode 100644 index 0000000..3c87b04 --- /dev/null +++ b/src/views/category_someday_maybe_page.rs @@ -0,0 +1,17 @@ +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use crate::models::category::Category; +use crate::views::category_page::CategoryPage; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategorySomedayMaybePage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryPage { + category: Category::SomedayMaybe, + } + } + } +} diff --git a/src/views/category_today_page.rs b/src/views/category_today_page.rs new file mode 100644 index 0000000..219e11f --- /dev/null +++ b/src/views/category_today_page.rs @@ -0,0 +1,12 @@ +use crate::components::category_today_task_list::CategoryTodayTaskList; +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryTodayPage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryTodayTaskList {} + } + } +} diff --git a/src/views/category_trash_page.rs b/src/views/category_trash_page.rs new file mode 100644 index 0000000..977ca0f --- /dev/null +++ b/src/views/category_trash_page.rs @@ -0,0 +1,17 @@ +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use crate::models::category::Category; +use crate::views::category_page::CategoryPage; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryTrashPage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryPage { + category: Category::Trash, + } + } + } +} diff --git a/src/views/category_waiting_for_page.rs b/src/views/category_waiting_for_page.rs new file mode 100644 index 0000000..cc6df9e --- /dev/null +++ b/src/views/category_waiting_for_page.rs @@ -0,0 +1,17 @@ +use crate::components::error_boundary_message::ErrorBoundaryMessage; +use crate::models::category::Category; +use crate::views::category_page::CategoryPage; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn CategoryWaitingForPage() -> Element { + rsx! { + ErrorBoundaryMessage { + CategoryPage { + category: Category::WaitingFor(String::new()), + } + } + } +} diff --git a/src/components/pages/mod.rs b/src/views/mod.rs similarity index 100% rename from src/components/pages/mod.rs rename to src/views/mod.rs diff --git a/src/components/pages/not_found_page.rs b/src/views/not_found_page.rs similarity index 87% rename from src/components/pages/not_found_page.rs rename to src/views/not_found_page.rs index 599ec1c..77a3c36 100644 --- a/src/components/pages/not_found_page.rs +++ b/src/views/not_found_page.rs @@ -3,6 +3,6 @@ use dioxus::prelude::*; #[component] pub(crate) fn NotFoundPage(route: Vec) -> Element { rsx! { - {"404"} + "404" } } diff --git a/src/views/projects_page.rs b/src/views/projects_page.rs new file mode 100644 index 0000000..7985236 --- /dev/null +++ b/src/views/projects_page.rs @@ -0,0 +1,11 @@ +use crate::components::{error_boundary_message::ErrorBoundaryMessage, project_list::ProjectList}; +use dioxus::prelude::*; + +#[component] +pub(crate) fn ProjectsPage() -> Element { + rsx! { + ErrorBoundaryMessage { + ProjectList {} + } + } +} diff --git a/tailwind.css b/tailwind.css new file mode 100644 index 0000000..7e117e1 --- /dev/null +++ b/tailwind.css @@ -0,0 +1,2 @@ +/* stylelint-disable-next-line import-notation */ +@import "tailwindcss";