diff --git a/package-lock.json b/package-lock.json index 02a63d27..19547d79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,6 @@ "cm6-graphql": "^0.0.9", "codemirror": "^6.0.1", "codemirror-json-schema": "^0.6.1", - "codemirror-json5": "^1.0.3", "date-fns": "^3.3.1", "focus-trap-react": "^10.1.1", "format-graphql": "^1.4.0", @@ -77,7 +76,7 @@ "react-devtools": "^4.28.5", "tailwindcss": "^3.2.7", "typescript": "^5.0.2", - "vite": "^4.0.0", + "vite": "^5.1.1", "vite-plugin-svgr": "^2.4.0", "vite-plugin-top-level-await": "^1.2.4", "vitest": "^0.29.2" @@ -668,10 +667,26 @@ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", "optional": true }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -685,9 +700,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -701,9 +716,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -717,9 +732,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], @@ -733,9 +748,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -749,9 +764,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -765,9 +780,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -781,9 +796,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -797,9 +812,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -813,9 +828,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -829,9 +844,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -845,9 +860,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -861,9 +876,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -877,9 +892,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -893,9 +908,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -909,9 +924,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -925,9 +940,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -941,9 +956,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -957,9 +972,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -973,9 +988,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -989,9 +1004,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -1005,9 +1020,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -1367,6 +1382,175 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sagold/json-pointer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@sagold/json-pointer/-/json-pointer-5.1.1.tgz", @@ -2186,9 +2370,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz", - "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/http-cache-semantics": { @@ -3604,6 +3788,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/codemirror-json5/-/codemirror-json5-1.0.3.tgz", "integrity": "sha512-HmmoYO2huQxoaoG5ARKjqQc9mz7/qmNPvMbISVfIE2Gk1+4vZQg9X3G6g49MYM5IK00Ol3aijd7OKrySuOkA7Q==", + "optional": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -4262,9 +4447,9 @@ "optional": true }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, "bin": { @@ -4274,28 +4459,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/escalade": { @@ -6264,6 +6450,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "devOptional": true, "bin": { "json5": "lib/cli.js" }, @@ -6354,6 +6541,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lezer-json5/-/lezer-json5-2.0.2.tgz", "integrity": "sha512-NRmtBlKW/f8mA7xatKq8IUOq045t8GVHI4kZXrUtYYUdiVeGiO6zKGAV7/nUAnf5q+rYTY+SWX/gvQdFXMjNxQ==", + "optional": true, "dependencies": { "@lezer/lr": "^1.0.0" } @@ -6782,9 +6970,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -7517,9 +7705,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "funding": [ { "type": "opencollective", @@ -7535,7 +7723,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -8389,18 +8577,34 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", "fsevents": "~2.3.2" } }, @@ -9835,29 +10039,29 @@ } }, "node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.1.tgz", + "integrity": "sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==", "dev": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -9912,6 +10116,466 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vite-node/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/vite-plugin-svgr": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-2.4.0.tgz", @@ -10016,6 +10680,466 @@ } } }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vitest/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", diff --git a/package.json b/package.json index 7c0e80b7..06adea0b 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,6 @@ "cm6-graphql": "^0.0.9", "codemirror": "^6.0.1", "codemirror-json-schema": "^0.6.1", - "codemirror-json5": "^1.0.3", "date-fns": "^3.3.1", "focus-trap-react": "^10.1.1", "format-graphql": "^1.4.0", @@ -94,7 +93,7 @@ "react-devtools": "^4.28.5", "tailwindcss": "^3.2.7", "typescript": "^5.0.2", - "vite": "^4.0.0", + "vite": "^5.1.1", "vite-plugin-svgr": "^2.4.0", "vite-plugin-top-level-await": "^1.2.4", "vitest": "^0.29.2" diff --git a/src-tauri/src/http.rs b/src-tauri/src/http.rs index 0ac86b42..619bc1c2 100644 --- a/src-tauri/src/http.rs +++ b/src-tauri/src/http.rs @@ -13,12 +13,12 @@ use log::{error, info, warn}; use reqwest::redirect::Policy; use reqwest::{multipart, Url}; use sqlx::types::{Json, JsonValue}; -use tauri::AppHandle; +use tauri::{Manager, Window}; use crate::{models, render, response_err}; pub async fn send_http_request( - app_handle: &AppHandle, + window: &Window, request: models::HttpRequest, response: &models::HttpResponse, environment: Option, @@ -26,7 +26,7 @@ pub async fn send_http_request( download_path: Option, ) -> Result { let environment_ref = environment.as_ref(); - let workspace = models::get_workspace(app_handle, &request.workspace_id) + let workspace = models::get_workspace(window, &request.workspace_id) .await .expect("Failed to get Workspace"); @@ -86,7 +86,7 @@ pub async fn send_http_request( let url = match Url::from_str(url_string.as_str()) { Ok(u) => u, Err(e) => { - return response_err(response, e.to_string(), app_handle).await; + return response_err(response, e.to_string(), window).await; } }; @@ -291,7 +291,7 @@ pub async fn send_http_request( let sendable_req = match request_builder.build() { Ok(r) => r, Err(e) => { - return response_err(response, e.to_string(), app_handle).await; + return response_err(response, e.to_string(), window).await; } }; @@ -337,7 +337,7 @@ pub async fn send_http_request( { // Write body to FS - let dir = app_handle.path_resolver().app_data_dir().unwrap(); + let dir = window.app_handle().path_resolver().app_data_dir().unwrap(); let base_dir = dir.join("responses"); create_dir_all(base_dir.clone()).expect("Failed to create responses dir"); let body_path = match response.id.is_empty() { @@ -360,7 +360,7 @@ pub async fn send_http_request( ); } - response = models::update_response_if_id(app_handle, &response) + response = models::update_response_if_id(window, &response) .await .expect("Failed to update response"); @@ -392,13 +392,13 @@ pub async fn send_http_request( .collect::>(), ); cookie_jar.cookies = json_cookies; - if let Err(e) = models::upsert_cookie_jar(&app_handle, &cookie_jar).await { + if let Err(e) = models::upsert_cookie_jar(window, &cookie_jar).await { error!("Failed to update cookie jar: {}", e); }; } Ok(response) } - Err(e) => response_err(response, e.to_string(), app_handle).await, + Err(e) => response_err(response, e.to_string(), window).await, } } diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index afa58d3a..87aa04c7 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -27,7 +27,7 @@ use sqlx::types::Json; use sqlx::{Pool, Sqlite, SqlitePool}; #[cfg(target_os = "macos")] use tauri::TitleBarStyle; -use tauri::{AppHandle, RunEvent, State, Window, WindowUrl, Wry}; +use tauri::{AppHandle, RunEvent, State, Window, WindowUrl}; use tauri::{Manager, WindowEvent}; use tauri_plugin_log::{fern, LogTarget}; use tauri_plugin_window_state::{StateFlags, WindowExt}; @@ -96,10 +96,10 @@ async fn migrate_db(app_handle: AppHandle, db: &Mutex>) -> Result<( #[tauri::command] async fn cmd_grpc_reflect( request_id: &str, - app_handle: AppHandle, + window: Window, grpc_handle: State<'_, Mutex>, ) -> Result, String> { - let req = get_grpc_request(&app_handle, request_id) + let req = get_grpc_request(&window, request_id) .await .map_err(|e| e.to_string())?; let uri = safe_uri(&req.url).map_err(|e| e.to_string())?; @@ -129,16 +129,16 @@ async fn cmd_grpc_reflect( #[tauri::command] async fn cmd_grpc_call_unary( request_id: &str, - app_handle: AppHandle, + w: Window, grpc_handle: State<'_, Mutex>, ) -> Result { - let req = get_grpc_request(&app_handle, request_id) + let req = get_grpc_request(&w, request_id) .await .map_err(|e| e.to_string())?; let conn = { let req = req.clone(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection { workspace_id: req.workspace_id, request_id: req.id, @@ -153,7 +153,7 @@ async fn cmd_grpc_call_unary( let req = req.clone(); let conn = conn.clone(); upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { workspace_id: req.workspace_id, request_id: req.id, @@ -191,7 +191,7 @@ async fn cmd_grpc_call_unary( { Ok(msg) => { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: serialize_message(&msg)?, workspace_id: req.workspace_id, @@ -207,7 +207,7 @@ async fn cmd_grpc_call_unary( }; upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection { elapsed: start.elapsed().as_millis() as i64, ..conn @@ -220,17 +220,14 @@ async fn cmd_grpc_call_unary( } #[tauri::command] -async fn cmd_grpc_client_streaming( - request_id: &str, - app_handle: AppHandle, -) -> Result { - let req = get_grpc_request(&app_handle, request_id) +async fn cmd_grpc_client_streaming(request_id: &str, w: Window) -> Result { + let req = get_grpc_request(&w, request_id) .await .map_err(|e| e.to_string())?; let conn = { let req = req.clone(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection { workspace_id: req.workspace_id, request_id: req.id, @@ -245,7 +242,7 @@ async fn cmd_grpc_client_streaming( let conn = conn.clone(); let req = req.clone(); upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Initiating connection".to_string(), workspace_id: req.workspace_id, @@ -284,7 +281,7 @@ async fn cmd_grpc_client_streaming( let cb = { let cancelled_rx = cancelled_rx.clone(); - let app_handle = app_handle.clone(); + let w = w.clone(); let conn = conn.clone(); let req = req.clone(); @@ -308,12 +305,12 @@ async fn cmd_grpc_client_streaming( match serde_json::from_str::(ev.payload().unwrap()) { Ok(IncomingMsg::Message(msg)) => { in_msg_tx.try_send(msg.clone()).unwrap(); - let app_handle = app_handle.clone(); + let w = w.clone(); let req = req.clone(); let conn = conn.clone(); tauri::async_runtime::spawn(async move { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: msg, workspace_id: req.workspace_id, @@ -338,16 +335,15 @@ async fn cmd_grpc_client_streaming( } } }; - let event_handler = - app_handle.listen_global(format!("grpc_client_msg_{}", conn.id).as_str(), cb); + let event_handler = w.listen_global(format!("grpc_client_msg_{}", conn.id).as_str(), cb); let start = std::time::Instant::now(); let grpc_listen = { - let app_handle = app_handle.clone(); + let w = w.clone(); let conn = conn.clone(); let req = req.clone(); async move { - let grpc_handle = app_handle.state::>(); + let grpc_handle = w.state::>(); let msg = grpc_handle .lock() .await @@ -367,7 +363,7 @@ async fn cmd_grpc_client_streaming( .unwrap(); let message = serialize_message(&msg).unwrap(); upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message, workspace_id: req.workspace_id, @@ -384,12 +380,12 @@ async fn cmd_grpc_client_streaming( { let conn = conn.clone(); - let app_handle = app_handle.clone(); + let w = w.clone(); tauri::async_runtime::spawn(async move { tokio::select! { _ = grpc_listen => { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Connection completed".to_string(), workspace_id: req.workspace_id, @@ -401,7 +397,7 @@ async fn cmd_grpc_client_streaming( ) .await.unwrap(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection { elapsed: start.elapsed().as_millis() as i64, ..conn @@ -412,7 +408,7 @@ async fn cmd_grpc_client_streaming( }, _ = cancelled_rx.changed() => { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Connection cancelled".to_string(), workspace_id: req.workspace_id, @@ -425,7 +421,7 @@ async fn cmd_grpc_client_streaming( .await.unwrap(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection { elapsed: start.elapsed().as_millis() as i64, ..conn @@ -435,7 +431,7 @@ async fn cmd_grpc_client_streaming( .unwrap(); }, } - app_handle.unlisten(event_handler); + w.unlisten(event_handler); }); }; @@ -445,16 +441,16 @@ async fn cmd_grpc_client_streaming( #[tauri::command] async fn cmd_grpc_streaming( request_id: &str, - app_handle: AppHandle, + w: Window, grpc_handle: State<'_, Mutex>, ) -> Result { - let req = get_grpc_request(&app_handle, request_id) + let req = get_grpc_request(&w, request_id) .await .map_err(|e| e.to_string())?; let conn = { let req = req.clone(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection { workspace_id: req.workspace_id, request_id: req.id, @@ -469,7 +465,7 @@ async fn cmd_grpc_streaming( let conn = conn.clone(); let req = req.clone(); upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Initiating connection".to_string(), workspace_id: req.workspace_id, @@ -524,7 +520,7 @@ async fn cmd_grpc_streaming( let cb = { let cancelled_rx = cancelled_rx.clone(); - let app_handle = app_handle.clone(); + let w = w.clone(); let conn = conn.clone(); let req = req.clone(); @@ -537,12 +533,12 @@ async fn cmd_grpc_streaming( match serde_json::from_str::(ev.payload().unwrap()) { Ok(IncomingMsg::Message(msg)) => { in_msg_tx.try_send(msg.clone()).unwrap(); - let app_handle = app_handle.clone(); + let w = w.clone(); let req = req.clone(); let conn = conn.clone(); tauri::async_runtime::spawn(async move { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: msg, workspace_id: req.workspace_id, @@ -565,11 +561,10 @@ async fn cmd_grpc_streaming( } } }; - let event_handler = - app_handle.listen_global(format!("grpc_client_msg_{}", conn.id).as_str(), cb); + let event_handler = w.listen_global(format!("grpc_client_msg_{}", conn.id).as_str(), cb); let grpc_listen = { - let app_handle = app_handle.clone(); + let w = w.clone(); let conn = conn.clone(); let req = req.clone(); async move { @@ -580,7 +575,7 @@ async fn cmd_grpc_streaming( let req = req.clone(); let conn = conn.clone(); upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: item, workspace_id: req.workspace_id, @@ -609,11 +604,11 @@ async fn cmd_grpc_streaming( { let conn = conn.clone(); tauri::async_runtime::spawn(async move { - let app_handle = app_handle.clone(); + let w = w.clone(); tokio::select! { _ = grpc_listen => { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Connection completed".to_string(), workspace_id: req.workspace_id, @@ -625,7 +620,7 @@ async fn cmd_grpc_streaming( ) .await.unwrap(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection{ elapsed: start.elapsed().as_millis() as i64, ..conn @@ -634,7 +629,7 @@ async fn cmd_grpc_streaming( }, _ = cancelled_rx.changed() => { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Connection cancelled".to_string(), workspace_id: req.workspace_id, @@ -646,7 +641,7 @@ async fn cmd_grpc_streaming( ) .await.unwrap(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection{ elapsed: start.elapsed().as_millis() as i64, ..conn @@ -654,7 +649,7 @@ async fn cmd_grpc_streaming( ).await.unwrap(); }, } - app_handle.unlisten(event_handler); + w.unlisten(event_handler); }); }; @@ -664,17 +659,17 @@ async fn cmd_grpc_streaming( #[tauri::command] async fn cmd_grpc_server_streaming( request_id: &str, - app_handle: AppHandle, + w: Window, grpc_handle: State<'_, Mutex>, ) -> Result { - let req = get_grpc_request(&app_handle, request_id) + let req = get_grpc_request(&w, request_id) .await .map_err(|e| e.to_string())?; let conn = { let req = req.clone(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection { workspace_id: req.workspace_id, request_id: req.id, @@ -689,7 +684,7 @@ async fn cmd_grpc_server_streaming( let req = req.clone(); let conn = conn.clone(); upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Initiating connection".to_string(), workspace_id: req.workspace_id, @@ -752,24 +747,23 @@ async fn cmd_grpc_server_streaming( } } }; - let event_handler = - app_handle.listen_global(format!("grpc_client_msg_{}", conn.id).as_str(), cb); + let event_handler = w.listen_global(format!("grpc_client_msg_{}", conn.id).as_str(), cb); let start = std::time::Instant::now(); let grpc_listen = { let conn_id = conn.clone().id; - let app_handle = app_handle.clone(); + let w = w.clone(); let req = req.clone(); async move { loop { let req = req.clone(); let conn_id = conn_id.clone(); - let app_handle = app_handle.clone(); + let w = w.clone(); match stream.next().await { Some(Ok(item)) => { let item = serialize_message(&item).unwrap(); upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: item, workspace_id: req.workspace_id, @@ -799,12 +793,12 @@ async fn cmd_grpc_server_streaming( { let conn = conn.clone(); let req = req.clone(); - let app_handle = app_handle.clone(); + let w = w.clone(); tauri::async_runtime::spawn(async move { tokio::select! { _ = grpc_listen => { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Connection completed".to_string(), workspace_id: req.workspace_id, @@ -816,7 +810,7 @@ async fn cmd_grpc_server_streaming( ) .await.unwrap(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection{ elapsed: start.elapsed().as_millis() as i64, ..conn @@ -825,7 +819,7 @@ async fn cmd_grpc_server_streaming( }, _ = cancelled_rx.changed() => { upsert_grpc_message( - &app_handle, + &w, &GrpcMessage { message: "Connection cancelled".to_string(), workspace_id: req.workspace_id, @@ -837,7 +831,7 @@ async fn cmd_grpc_server_streaming( ) .await.unwrap(); upsert_grpc_connection( - &app_handle, + &w, &GrpcConnection{ elapsed: start.elapsed().as_millis() as i64, ..conn @@ -845,7 +839,7 @@ async fn cmd_grpc_server_streaming( ).await.unwrap(); }, } - app_handle.unlisten(event_handler); + w.unlisten(event_handler); }); } @@ -857,13 +851,13 @@ async fn cmd_send_ephemeral_request( mut request: HttpRequest, environment_id: Option<&str>, cookie_jar_id: Option<&str>, - app_handle: AppHandle, + window: Window, ) -> Result { let response = HttpResponse::new(); request.id = "".to_string(); let environment = match environment_id { Some(id) => Some( - get_environment(&app_handle, id) + get_environment(&window, id) .await .expect("Failed to get environment"), ), @@ -871,7 +865,7 @@ async fn cmd_send_ephemeral_request( }; let cookie_jar = match cookie_jar_id { Some(id) => Some( - get_cookie_jar(&app_handle, id) + get_cookie_jar(&window, id) .await .expect("Failed to get cookie jar"), ), @@ -879,25 +873,12 @@ async fn cmd_send_ephemeral_request( }; // let cookie_jar_id2 = cookie_jar_id.unwrap_or("").to_string(); - send_http_request( - &app_handle, - request, - &response, - environment, - cookie_jar, - None, - ) - .await + send_http_request(&window, request, &response, environment, cookie_jar, None).await } #[tauri::command] -async fn cmd_filter_response( - window: Window, - app_handle: AppHandle, - response_id: &str, - filter: &str, -) -> Result { - let response = get_http_response(&app_handle, response_id) +async fn cmd_filter_response(w: Window, response_id: &str, filter: &str) -> Result { + let response = get_http_response(&w, response_id) .await .expect("Failed to get response"); @@ -921,30 +902,23 @@ async fn cmd_filter_response( }; let body = read_to_string(response.body_path.unwrap()).unwrap(); - let filter_result = plugin::run_plugin_filter(&window.app_handle(), plugin_name, filter, &body) + let filter_result = plugin::run_plugin_filter(&w.app_handle(), plugin_name, filter, &body) .await .expect("Failed to run filter"); Ok(filter_result.filtered) } #[tauri::command] -async fn cmd_import_data( - window: Window, - app_handle: AppHandle, - file_paths: Vec<&str>, -) -> Result { +async fn cmd_import_data(w: Window, file_paths: Vec<&str>) -> Result { let mut result: Option = None; let plugins = vec!["importer-yaak", "importer-insomnia", "importer-postman"]; for plugin_name in plugins { - if let Some(r) = plugin::run_plugin_import( - &window.app_handle(), - plugin_name, - file_paths.first().unwrap(), - ) - .await + if let Some(r) = + plugin::run_plugin_import(&w.app_handle(), plugin_name, file_paths.first().unwrap()) + .await { analytics::track_event( - &window.app_handle(), + &w.app_handle(), AnalyticsResource::App, AnalyticsAction::Import, Some(json!({ "plugin": plugin_name })), @@ -961,32 +935,30 @@ async fn cmd_import_data( let mut imported_resources = ImportResources::default(); info!("Importing resources"); - for w in r.resources.workspaces { - let x = upsert_workspace(&app_handle, w) + for v in r.resources.workspaces { + let x = upsert_workspace(&w, v) .await .expect("Failed to create workspace"); imported_resources.workspaces.push(x.clone()); info!("Imported workspace: {}", x.name); } - for e in r.resources.environments { - let x = upsert_environment(&app_handle, e) + for v in r.resources.environments { + let x = upsert_environment(&w, v) .await .expect("Failed to create environment"); imported_resources.environments.push(x.clone()); info!("Imported environment: {}", x.name); } - for f in r.resources.folders { - let x = upsert_folder(&app_handle, f) - .await - .expect("Failed to create folder"); + for v in r.resources.folders { + let x = upsert_folder(&w, v).await.expect("Failed to create folder"); imported_resources.folders.push(x.clone()); info!("Imported folder: {}", x.name); } - for r in r.resources.requests { - let x = upsert_http_request(&app_handle, r) + for v in r.resources.requests { + let x = upsert_http_request(&w, v) .await .expect("Failed to create request"); imported_resources.requests.push(x.clone()); @@ -1030,19 +1002,19 @@ async fn cmd_export_data( #[tauri::command] async fn cmd_send_request( - app_handle: AppHandle, + w: Window, request_id: &str, environment_id: Option<&str>, cookie_jar_id: Option<&str>, download_dir: Option<&str>, ) -> Result { - let request = get_http_request(&app_handle, request_id) + let request = get_http_request(&w, request_id) .await .expect("Failed to get request"); let environment = match environment_id { Some(id) => Some( - get_environment(&app_handle, id) + get_environment(&w, id) .await .expect("Failed to get environment"), ), @@ -1051,7 +1023,7 @@ async fn cmd_send_request( let cookie_jar = match cookie_jar_id { Some(id) => Some( - get_cookie_jar(&app_handle, id) + get_cookie_jar(&w, id) .await .expect("Failed to get cookie jar"), ), @@ -1059,7 +1031,7 @@ async fn cmd_send_request( }; let response = create_response( - &app_handle, + &w, &request.id, 0, 0, @@ -1082,7 +1054,7 @@ async fn cmd_send_request( }; send_http_request( - &app_handle, + &w, request.clone(), &response, environment, @@ -1095,12 +1067,12 @@ async fn cmd_send_request( async fn response_err( response: &HttpResponse, error: String, - app_handle: &AppHandle, + w: &Window, ) -> Result { let mut response = response.clone(); response.elapsed = -1; response.error = Some(error.clone()); - response = update_response_if_id(&app_handle, &response) + response = update_response_if_id(w, &response) .await .expect("Failed to update response"); Ok(response) @@ -1108,7 +1080,7 @@ async fn response_err( #[tauri::command] async fn cmd_track_event( - window: Window, + window: Window, resource: &str, action: &str, attributes: Option, @@ -1129,19 +1101,15 @@ async fn cmd_track_event( } #[tauri::command] -async fn cmd_set_update_mode(update_mode: &str, app_handle: AppHandle) -> Result { - cmd_set_key_value("app", "update_mode", update_mode, app_handle) +async fn cmd_set_update_mode(update_mode: &str, w: Window) -> Result { + cmd_set_key_value("app", "update_mode", update_mode, w) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_get_key_value( - namespace: &str, - key: &str, - app_handle: AppHandle, -) -> Result, ()> { - let result = get_key_value_raw(&app_handle, namespace, key).await; +async fn cmd_get_key_value(namespace: &str, key: &str, w: Window) -> Result, ()> { + let result = get_key_value_raw(&w, namespace, key).await; Ok(result) } @@ -1150,35 +1118,29 @@ async fn cmd_set_key_value( namespace: &str, key: &str, value: &str, - app_handle: AppHandle, + w: Window, ) -> Result { - let (key_value, _created) = set_key_value_raw(&app_handle, namespace, key, value).await; + let (key_value, _created) = set_key_value_raw(&w, namespace, key, value).await; Ok(key_value) } #[tauri::command] -async fn cmd_create_workspace(name: &str, app_handle: AppHandle) -> Result { - upsert_workspace(&app_handle, Workspace::new(name.to_string())) +async fn cmd_create_workspace(name: &str, w: Window) -> Result { + upsert_workspace(&w, Workspace::new(name.to_string())) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_update_cookie_jar( - cookie_jar: CookieJar, - app_handle: AppHandle, -) -> Result { - upsert_cookie_jar(&app_handle, &cookie_jar) +async fn cmd_update_cookie_jar(cookie_jar: CookieJar, w: Window) -> Result { + upsert_cookie_jar(&w, &cookie_jar) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_delete_cookie_jar( - app_handle: AppHandle, - cookie_jar_id: &str, -) -> Result { - delete_cookie_jar(&app_handle, cookie_jar_id) +async fn cmd_delete_cookie_jar(w: Window, cookie_jar_id: &str) -> Result { + delete_cookie_jar(&w, cookie_jar_id) .await .map_err(|e| e.to_string()) } @@ -1187,10 +1149,10 @@ async fn cmd_delete_cookie_jar( async fn cmd_create_cookie_jar( workspace_id: &str, name: &str, - app_handle: AppHandle, + w: Window, ) -> Result { upsert_cookie_jar( - &app_handle, + &w, &CookieJar { name: name.to_string(), workspace_id: workspace_id.to_string(), @@ -1206,10 +1168,10 @@ async fn cmd_create_environment( workspace_id: &str, name: &str, variables: Vec, - app_handle: AppHandle, + w: Window, ) -> Result { upsert_environment( - &app_handle, + &w, Environment { workspace_id: workspace_id.to_string(), name: name.to_string(), @@ -1227,10 +1189,10 @@ async fn cmd_create_grpc_request( name: &str, sort_priority: f64, folder_id: Option<&str>, - app_handle: AppHandle, + w: Window, ) -> Result { upsert_grpc_request( - &app_handle, + &w, &GrpcRequest { workspace_id: workspace_id.to_string(), name: name.to_string(), @@ -1244,11 +1206,8 @@ async fn cmd_create_grpc_request( } #[tauri::command] -async fn cmd_duplicate_grpc_request( - id: &str, - app_handle: AppHandle, -) -> Result { - duplicate_grpc_request(&app_handle, id) +async fn cmd_duplicate_grpc_request(id: &str, w: Window) -> Result { + duplicate_grpc_request(&w, id) .await .map_err(|e| e.to_string()) } @@ -1259,10 +1218,10 @@ async fn cmd_create_http_request( name: &str, sort_priority: f64, folder_id: Option<&str>, - app_handle: AppHandle, + w: Window, ) -> Result { upsert_http_request( - &app_handle, + &w, HttpRequest { workspace_id: workspace_id.to_string(), name: name.to_string(), @@ -1277,21 +1236,15 @@ async fn cmd_create_http_request( } #[tauri::command] -async fn cmd_duplicate_http_request( - id: &str, - app_handle: AppHandle, -) -> Result { - duplicate_http_request(&app_handle, id) +async fn cmd_duplicate_http_request(id: &str, w: Window) -> Result { + duplicate_http_request(&w, id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_update_workspace( - workspace: Workspace, - app_handle: AppHandle, -) -> Result { - upsert_workspace(&app_handle, workspace) +async fn cmd_update_workspace(workspace: Workspace, w: Window) -> Result { + upsert_workspace(&w, workspace) .await .map_err(|e| e.to_string()) } @@ -1299,19 +1252,16 @@ async fn cmd_update_workspace( #[tauri::command] async fn cmd_update_environment( environment: Environment, - app_handle: AppHandle, + w: Window, ) -> Result { - upsert_environment(&app_handle, environment) + upsert_environment(&w, environment) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_update_grpc_request( - request: GrpcRequest, - app_handle: AppHandle, -) -> Result { - upsert_grpc_request(&app_handle, &request) +async fn cmd_update_grpc_request(request: GrpcRequest, w: Window) -> Result { + upsert_grpc_request(&w, &request) .await .map_err(|e| e.to_string()) } @@ -1319,39 +1269,30 @@ async fn cmd_update_grpc_request( #[tauri::command] async fn cmd_update_http_request( request: HttpRequest, - app_handle: AppHandle, + window: Window, ) -> Result { - upsert_http_request(&app_handle, request) + upsert_http_request(&window, request) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_delete_grpc_request( - app_handle: AppHandle, - request_id: &str, -) -> Result { - delete_grpc_request(&app_handle, request_id) +async fn cmd_delete_grpc_request(w: Window, request_id: &str) -> Result { + delete_grpc_request(&w, request_id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_delete_http_request( - app_handle: AppHandle, - request_id: &str, -) -> Result { - delete_http_request(&app_handle, request_id) +async fn cmd_delete_http_request(w: Window, request_id: &str) -> Result { + delete_http_request(&w, request_id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_list_folders( - workspace_id: &str, - app_handle: AppHandle, -) -> Result, String> { - list_folders(&app_handle, workspace_id) +async fn cmd_list_folders(workspace_id: &str, w: Window) -> Result, String> { + list_folders(&w, workspace_id) .await .map_err(|e| e.to_string()) } @@ -1362,10 +1303,10 @@ async fn cmd_create_folder( name: &str, sort_priority: f64, folder_id: Option<&str>, - app_handle: AppHandle, + w: Window, ) -> Result { upsert_folder( - &app_handle, + &w, Folder { workspace_id: workspace_id.to_string(), name: name.to_string(), @@ -1379,25 +1320,20 @@ async fn cmd_create_folder( } #[tauri::command] -async fn cmd_update_folder(folder: Folder, app_handle: AppHandle) -> Result { - upsert_folder(&app_handle, folder) +async fn cmd_update_folder(folder: Folder, w: Window) -> Result { + upsert_folder(&w, folder).await.map_err(|e| e.to_string()) +} + +#[tauri::command] +async fn cmd_delete_folder(w: Window, folder_id: &str) -> Result { + delete_folder(&w, folder_id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_delete_folder(app_handle: AppHandle, folder_id: &str) -> Result { - delete_folder(&app_handle, folder_id) - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -async fn cmd_delete_environment( - app_handle: AppHandle, - environment_id: &str, -) -> Result { - delete_environment(&app_handle, environment_id) +async fn cmd_delete_environment(w: Window, environment_id: &str) -> Result { + delete_environment(&w, environment_id) .await .map_err(|e| e.to_string()) } @@ -1405,9 +1341,9 @@ async fn cmd_delete_environment( #[tauri::command] async fn cmd_list_grpc_connections( request_id: &str, - app_handle: AppHandle, + w: Window, ) -> Result, String> { - list_grpc_connections(&app_handle, request_id) + list_grpc_connections(&w, request_id) .await .map_err(|e| e.to_string()) } @@ -1415,30 +1351,24 @@ async fn cmd_list_grpc_connections( #[tauri::command] async fn cmd_list_grpc_messages( connection_id: &str, - app_handle: AppHandle, + w: Window, ) -> Result, String> { - list_grpc_messages(&app_handle, connection_id) + list_grpc_messages(&w, connection_id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_list_grpc_requests( - workspace_id: &str, - app_handle: AppHandle, -) -> Result, String> { - let requests = list_grpc_requests(&app_handle, workspace_id) +async fn cmd_list_grpc_requests(workspace_id: &str, w: Window) -> Result, String> { + let requests = list_grpc_requests(&w, workspace_id) .await .map_err(|e| e.to_string())?; Ok(requests) } #[tauri::command] -async fn cmd_list_http_requests( - workspace_id: &str, - app_handle: AppHandle, -) -> Result, String> { - let requests = list_requests(&app_handle, workspace_id) +async fn cmd_list_http_requests(workspace_id: &str, w: Window) -> Result, String> { + let requests = list_requests(&w, workspace_id) .await .expect("Failed to find requests"); // .map_err(|e| e.to_string()) @@ -1446,11 +1376,8 @@ async fn cmd_list_http_requests( } #[tauri::command] -async fn cmd_list_environments( - workspace_id: &str, - app_handle: AppHandle, -) -> Result, String> { - let environments = list_environments(&app_handle, workspace_id) +async fn cmd_list_environments(workspace_id: &str, w: Window) -> Result, String> { + let environments = list_environments(&w, workspace_id) .await .expect("Failed to find environments"); @@ -1458,58 +1385,46 @@ async fn cmd_list_environments( } #[tauri::command] -async fn cmd_get_settings(app_handle: AppHandle) -> Result { - Ok(get_or_create_settings(&app_handle).await) +async fn cmd_get_settings(w: Window) -> Result { + Ok(get_or_create_settings(&w).await) } #[tauri::command] -async fn cmd_update_settings( - settings: Settings, - app_handle: AppHandle, -) -> Result { - update_settings(&app_handle, settings) +async fn cmd_update_settings(settings: Settings, w: Window) -> Result { + update_settings(&w, settings) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_get_folder(id: &str, app_handle: AppHandle) -> Result { - get_folder(&app_handle, id).await.map_err(|e| e.to_string()) +async fn cmd_get_folder(id: &str, w: Window) -> Result { + get_folder(&w, id).await.map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_get_grpc_request(id: &str, app_handle: AppHandle) -> Result { - get_grpc_request(&app_handle, id) - .await - .map_err(|e| e.to_string()) +async fn cmd_get_grpc_request(id: &str, w: Window) -> Result { + get_grpc_request(&w, id).await.map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_get_http_request(id: &str, app_handle: AppHandle) -> Result { - get_http_request(&app_handle, id) - .await - .map_err(|e| e.to_string()) +async fn cmd_get_http_request(id: &str, w: Window) -> Result { + get_http_request(&w, id).await.map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_get_cookie_jar(id: &str, app_handle: AppHandle) -> Result { - get_cookie_jar(&app_handle, id) - .await - .map_err(|e| e.to_string()) +async fn cmd_get_cookie_jar(id: &str, w: Window) -> Result { + get_cookie_jar(&w, id).await.map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_list_cookie_jars( - workspace_id: &str, - app_handle: AppHandle, -) -> Result, String> { - let cookie_jars = list_cookie_jars(&app_handle, workspace_id) +async fn cmd_list_cookie_jars(workspace_id: &str, w: Window) -> Result, String> { + let cookie_jars = list_cookie_jars(&w, workspace_id) .await .expect("Failed to find cookie jars"); if cookie_jars.is_empty() { let cookie_jar = upsert_cookie_jar( - &app_handle, + &w, &CookieJar { name: "Default".to_string(), workspace_id: workspace_id.to_string(), @@ -1525,75 +1440,62 @@ async fn cmd_list_cookie_jars( } #[tauri::command] -async fn cmd_get_environment(id: &str, app_handle: AppHandle) -> Result { - get_environment(&app_handle, id) - .await - .map_err(|e| e.to_string()) +async fn cmd_get_environment(id: &str, w: Window) -> Result { + get_environment(&w, id).await.map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_get_workspace(id: &str, app_handle: AppHandle) -> Result { - get_workspace(&app_handle, id) - .await - .map_err(|e| e.to_string()) +async fn cmd_get_workspace(id: &str, w: Window) -> Result { + get_workspace(&w, id).await.map_err(|e| e.to_string()) } #[tauri::command] async fn cmd_list_http_responses( request_id: &str, limit: Option, - app_handle: AppHandle, + w: Window, ) -> Result, String> { - list_responses(&app_handle, request_id, limit) + list_responses(&w, request_id, limit) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_delete_http_response(id: &str, app_handle: AppHandle) -> Result { - delete_http_response(&app_handle, id) +async fn cmd_delete_http_response(id: &str, w: Window) -> Result { + delete_http_response(&w, id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_delete_grpc_connection( - id: &str, - app_handle: AppHandle, -) -> Result { - delete_grpc_connection(&app_handle, id) +async fn cmd_delete_grpc_connection(id: &str, w: Window) -> Result { + delete_grpc_connection(&w, id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_delete_all_grpc_connections( - request_id: &str, - app_handle: AppHandle, -) -> Result<(), String> { - delete_all_grpc_connections(&app_handle, request_id) +async fn cmd_delete_all_grpc_connections(request_id: &str, w: Window) -> Result<(), String> { + delete_all_grpc_connections(&w, request_id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_delete_all_http_responses( - request_id: &str, - app_handle: AppHandle, -) -> Result<(), String> { - delete_all_http_responses(&app_handle, request_id) +async fn cmd_delete_all_http_responses(request_id: &str, w: Window) -> Result<(), String> { + delete_all_http_responses(&w, request_id) .await .map_err(|e| e.to_string()) } #[tauri::command] -async fn cmd_list_workspaces(app_handle: AppHandle) -> Result, String> { - let workspaces = list_workspaces(&app_handle) +async fn cmd_list_workspaces(w: Window) -> Result, String> { + let workspaces = list_workspaces(&w) .await .expect("Failed to find workspaces"); if workspaces.is_empty() { let workspace = upsert_workspace( - &app_handle, + &w, Workspace { name: "Yaak".to_string(), ..Default::default() @@ -1608,17 +1510,14 @@ async fn cmd_list_workspaces(app_handle: AppHandle) -> Result, St } #[tauri::command] -async fn cmd_new_window(window: Window, url: &str) -> Result<(), String> { +async fn cmd_new_window(window: Window, url: &str) -> Result<(), String> { create_window(&window.app_handle(), Some(url)); Ok(()) } #[tauri::command] -async fn cmd_delete_workspace( - app_handle: AppHandle, - workspace_id: &str, -) -> Result { - delete_workspace(&app_handle, workspace_id) +async fn cmd_delete_workspace(w: Window, workspace_id: &str) -> Result { + delete_workspace(&w, workspace_id) .await .map_err(|e| e.to_string()) } @@ -1840,7 +1739,7 @@ fn is_dev() -> bool { } } -fn create_window(handle: &AppHandle, url: Option<&str>) -> Window { +fn create_window(handle: &AppHandle, url: Option<&str>) -> Window { let app_menu = window_menu::os_default("Yaak".to_string().as_str()); let window_num = handle.windows().len(); let window_id = format!("wnd_{}", window_num); @@ -1930,8 +1829,8 @@ fn create_window(handle: &AppHandle, url: Option<&str>) -> Window { win } -async fn get_update_mode(app_handle: &AppHandle) -> UpdateMode { - let settings = get_or_create_settings(app_handle).await; +async fn get_update_mode(h: &AppHandle) -> UpdateMode { + let settings = get_or_create_settings(h).await; update_mode_from_str(settings.update_channel.as_str()) } diff --git a/src-tauri/src/models.rs b/src-tauri/src/models.rs index 5620ca7b..9a2eb05f 100644 --- a/src-tauri/src/models.rs +++ b/src-tauri/src/models.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use sqlx::types::chrono::NaiveDateTime; use sqlx::types::{Json, JsonValue}; use sqlx::{Pool, Sqlite}; -use tauri::{AppHandle, Manager}; +use tauri::{AppHandle, Manager, Wry}; use tokio::sync::Mutex; fn default_true() -> bool { @@ -260,32 +260,32 @@ pub struct KeyValue { } pub async fn set_key_value_string( - app_handle: &AppHandle, + mgr: &impl Manager, namespace: &str, key: &str, value: &str, ) -> (KeyValue, bool) { let encoded = serde_json::to_string(value); - set_key_value_raw(app_handle, namespace, key, &encoded.unwrap()).await + set_key_value_raw(mgr, namespace, key, &encoded.unwrap()).await } pub async fn set_key_value_int( - app_handle: &AppHandle, + mgr: &impl Manager, namespace: &str, key: &str, value: i32, ) -> (KeyValue, bool) { let encoded = serde_json::to_string(&value); - set_key_value_raw(app_handle, namespace, key, &encoded.unwrap()).await + set_key_value_raw(mgr, namespace, key, &encoded.unwrap()).await } pub async fn get_key_value_string( - app_handle: &AppHandle, + mgr: &impl Manager, namespace: &str, key: &str, default: &str, ) -> String { - match get_key_value_raw(app_handle, namespace, key).await { + match get_key_value_raw(mgr, namespace, key).await { None => default.to_string(), Some(v) => { let result = serde_json::from_str(&v.value); @@ -301,12 +301,12 @@ pub async fn get_key_value_string( } pub async fn get_key_value_int( - app_handle: &AppHandle, + mgr: &impl Manager, namespace: &str, key: &str, default: i32, ) -> i32 { - match get_key_value_raw(app_handle, namespace, key).await { + match get_key_value_raw(mgr, namespace, key).await { None => default.clone(), Some(v) => { let result = serde_json::from_str(&v.value); @@ -322,13 +322,13 @@ pub async fn get_key_value_int( } pub async fn set_key_value_raw( - app_handle: &AppHandle, + mgr: &impl Manager, namespace: &str, key: &str, value: &str, ) -> (KeyValue, bool) { - let db = get_db(app_handle).await; - let existing = get_key_value_raw(app_handle, namespace, key).await; + let db = get_db(mgr).await; + let existing = get_key_value_raw(mgr, namespace, key).await; sqlx::query!( r#" INSERT INTO key_values (namespace, key, value) @@ -344,18 +344,18 @@ pub async fn set_key_value_raw( .await .expect("Failed to insert key value"); - let kv = get_key_value_raw(app_handle, namespace, key) + let kv = get_key_value_raw(mgr, namespace, key) .await .expect("Failed to get key value"); (kv, existing.is_none()) } pub async fn get_key_value_raw( - app_handle: &AppHandle, + mgr: &impl Manager, namespace: &str, key: &str, ) -> Option { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( KeyValue, r#" @@ -371,8 +371,8 @@ pub async fn get_key_value_raw( .ok() } -pub async fn list_workspaces(app_handle: &AppHandle) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; +pub async fn list_workspaces(mgr: &impl Manager) -> Result, sqlx::Error> { + let db = get_db(mgr).await; sqlx::query_as!( Workspace, r#" @@ -387,8 +387,8 @@ pub async fn list_workspaces(app_handle: &AppHandle) -> Result, s .await } -pub async fn get_workspace(app_handle: &AppHandle, id: &str) -> Result { - let db = get_db(app_handle).await; +pub async fn get_workspace(mgr: &impl Manager, id: &str) -> Result { + let db = get_db(mgr).await; sqlx::query_as!( Workspace, r#" @@ -404,9 +404,9 @@ pub async fn get_workspace(app_handle: &AppHandle, id: &str) -> Result Result { - let db = get_db(app_handle).await; - let workspace = get_workspace(app_handle, id).await?; +pub async fn delete_workspace(mgr: &impl Manager, id: &str) -> Result { + let db = get_db(mgr).await; + let workspace = get_workspace(mgr, id).await?; let _ = sqlx::query!( r#" DELETE FROM workspaces @@ -417,15 +417,15 @@ pub async fn delete_workspace(app_handle: &AppHandle, id: &str) -> Result Result { - let db = get_db(app_handle).await; +pub async fn get_cookie_jar(mgr: &impl Manager, id: &str) -> Result { + let db = get_db(mgr).await; sqlx::query_as!( CookieJar, r#" @@ -441,10 +441,10 @@ pub async fn get_cookie_jar(app_handle: &AppHandle, id: &str) -> Result, workspace_id: &str, ) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( CookieJar, r#" @@ -459,9 +459,12 @@ pub async fn list_cookie_jars( .await } -pub async fn delete_cookie_jar(app_handle: &AppHandle, id: &str) -> Result { - let cookie_jar = get_cookie_jar(app_handle, id).await?; - let db = get_db(app_handle).await; +pub async fn delete_cookie_jar( + mgr: &impl Manager, + id: &str, +) -> Result { + let cookie_jar = get_cookie_jar(mgr, id).await?; + let db = get_db(mgr).await; let _ = sqlx::query!( r#" @@ -473,23 +476,23 @@ pub async fn delete_cookie_jar(app_handle: &AppHandle, id: &str) -> Result, id: &str, ) -> Result { - let mut request = get_grpc_request(app_handle, id).await?.clone(); + let mut request = get_grpc_request(mgr, id).await?.clone(); request.id = "".to_string(); - upsert_grpc_request(app_handle, &request).await + upsert_grpc_request(mgr, &request).await } pub async fn upsert_grpc_request( - app_handle: &AppHandle, + mgr: &impl Manager, request: &GrpcRequest, ) -> Result { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; let id = match request.id.as_str() { "" => generate_id(Some("gr")), _ => request.id.to_string(), @@ -527,17 +530,17 @@ pub async fn upsert_grpc_request( .execute(&db) .await?; - match get_grpc_request(app_handle, &id).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_grpc_request(mgr, &id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn get_grpc_request( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( GrpcRequest, r#" @@ -555,10 +558,10 @@ pub async fn get_grpc_request( } pub async fn list_grpc_requests( - app_handle: &AppHandle, + mgr: &impl Manager, workspace_id: &str, ) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( GrpcRequest, r#" @@ -576,10 +579,10 @@ pub async fn list_grpc_requests( } pub async fn upsert_grpc_connection( - app_handle: &AppHandle, + mgr: &impl Manager, connection: &GrpcConnection, ) -> Result { - let db = get_db(&app_handle).await; + let db = get_db(mgr).await; let id = match connection.id.as_str() { "" => generate_id(Some("gc")), _ => connection.id.to_string(), @@ -606,17 +609,17 @@ pub async fn upsert_grpc_connection( .execute(&db) .await?; - match get_grpc_connection(app_handle, &id).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_grpc_connection(mgr, &id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn get_grpc_connection( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let db = get_db(&app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( GrpcConnection, r#" @@ -633,10 +636,10 @@ pub async fn get_grpc_connection( } pub async fn list_grpc_connections( - app_handle: &AppHandle, + mgr: &impl Manager, request_id: &str, ) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( GrpcConnection, r#" @@ -654,10 +657,10 @@ pub async fn list_grpc_connections( } pub async fn upsert_grpc_message( - app_handle: &AppHandle, + mgr: &impl Manager, message: &GrpcMessage, ) -> Result { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; let id = match message.id.as_str() { "" => generate_id(Some("gm")), _ => message.id.to_string(), @@ -685,17 +688,17 @@ pub async fn upsert_grpc_message( .execute(&db) .await?; - match get_grpc_message(app_handle, &id).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_grpc_message(mgr, &id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn get_grpc_message( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( GrpcMessage, r#" @@ -712,10 +715,10 @@ pub async fn get_grpc_message( } pub async fn list_grpc_messages( - app_handle: &AppHandle, + mgr: &impl Manager, connection_id: &str, ) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( GrpcMessage, r#" @@ -732,7 +735,7 @@ pub async fn list_grpc_messages( } pub async fn upsert_cookie_jar( - app_handle: &AppHandle, + mgr: &impl Manager, cookie_jar: &CookieJar, ) -> Result { let id = match cookie_jar.id.as_str() { @@ -741,7 +744,7 @@ pub async fn upsert_cookie_jar( }; let trimmed_name = cookie_jar.name.trim(); - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" INSERT INTO cookie_jars ( @@ -761,17 +764,17 @@ pub async fn upsert_cookie_jar( .execute(&db) .await?; - match get_cookie_jar(app_handle, &id).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_cookie_jar(mgr, &id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn list_environments( - app_handle: &AppHandle, + mgr: &impl Manager, workspace_id: &str, ) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( Environment, r#" @@ -787,11 +790,11 @@ pub async fn list_environments( } pub async fn delete_environment( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let db = get_db(app_handle).await; - let env = get_environment(app_handle, id).await?; + let db = get_db(mgr).await; + let env = get_environment(mgr, id).await?; let _ = sqlx::query!( r#" DELETE FROM environments @@ -802,11 +805,11 @@ pub async fn delete_environment( .execute(&db) .await; - emit_deleted_model(app_handle, env) + emit_deleted_model(mgr, env) } -async fn get_settings(app_handle: &AppHandle) -> Result { - let db = get_db(app_handle).await; +async fn get_settings(mgr: &impl Manager) -> Result { + let db = get_db(mgr).await; sqlx::query_as!( Settings, r#" @@ -820,12 +823,12 @@ async fn get_settings(app_handle: &AppHandle) -> Result { .await } -pub async fn get_or_create_settings(app_handle: &AppHandle) -> Settings { - if let Ok(settings) = get_settings(app_handle).await { +pub async fn get_or_create_settings(mgr: &impl Manager) -> Settings { + if let Ok(settings) = get_settings(mgr).await { return settings; } - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" INSERT INTO settings (id) @@ -836,16 +839,14 @@ pub async fn get_or_create_settings(app_handle: &AppHandle) -> Settings { .await .expect("Failed to insert settings"); - get_settings(&app_handle) - .await - .expect("Failed to get settings") + get_settings(mgr).await.expect("Failed to get settings") } pub async fn update_settings( - app_handle: &AppHandle, + mgr: &impl Manager, settings: Settings, ) -> Result { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" UPDATE settings SET ( @@ -859,14 +860,14 @@ pub async fn update_settings( .execute(&db) .await?; - match get_settings(app_handle).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_settings(mgr).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn upsert_environment( - app_handle: &AppHandle, + mgr: &impl Manager, environment: Environment, ) -> Result { let id = match environment.id.as_str() { @@ -874,7 +875,7 @@ pub async fn upsert_environment( _ => environment.id.to_string(), }; let trimmed_name = environment.name.trim(); - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" INSERT INTO environments ( @@ -894,14 +895,17 @@ pub async fn upsert_environment( .execute(&db) .await?; - match get_environment(app_handle, &id).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_environment(mgr, &id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } -pub async fn get_environment(app_handle: &AppHandle, id: &str) -> Result { - let db = get_db(app_handle).await; +pub async fn get_environment( + mgr: &impl Manager, + id: &str, +) -> Result { + let db = get_db(mgr).await; sqlx::query_as!( Environment, r#" @@ -917,8 +921,8 @@ pub async fn get_environment(app_handle: &AppHandle, id: &str) -> Result Result { - let db = get_db(app_handle).await; +pub async fn get_folder(mgr: &impl Manager, id: &str) -> Result { + let db = get_db(mgr).await; sqlx::query_as!( Folder, r#" @@ -934,10 +938,10 @@ pub async fn get_folder(app_handle: &AppHandle, id: &str) -> Result, workspace_id: &str, ) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( Folder, r#" @@ -952,9 +956,9 @@ pub async fn list_folders( .await } -pub async fn delete_folder(app_handle: &AppHandle, id: &str) -> Result { - let folder = get_folder(app_handle, id).await?; - let db = get_db(app_handle).await; +pub async fn delete_folder(mgr: &impl Manager, id: &str) -> Result { + let folder = get_folder(mgr, id).await?; + let db = get_db(mgr).await; let _ = sqlx::query!( r#" DELETE FROM folders @@ -965,17 +969,17 @@ pub async fn delete_folder(app_handle: &AppHandle, id: &str) -> Result Result { +pub async fn upsert_folder(mgr: &impl Manager, r: Folder) -> Result { let id = match r.id.as_str() { "" => generate_id(Some("fl")), _ => r.id.to_string(), }; let trimmed_name = r.name.trim(); - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" INSERT INTO folders ( @@ -997,23 +1001,23 @@ pub async fn upsert_folder(app_handle: &AppHandle, r: Folder) -> Result Ok(emit_upserted_model(app_handle, m)), + match get_folder(mgr, &id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn duplicate_http_request( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let mut request = get_http_request(app_handle, id).await?.clone(); + let mut request = get_http_request(mgr, id).await?.clone(); request.id = "".to_string(); - upsert_http_request(app_handle, request).await + upsert_http_request(mgr, request).await } pub async fn upsert_http_request( - app_handle: &AppHandle, + mgr: &impl Manager, r: HttpRequest, ) -> Result { let id = match r.id.as_str() { @@ -1024,7 +1028,7 @@ pub async fn upsert_http_request( let auth_json = Json(r.authentication); let trimmed_name = r.name.trim(); - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" @@ -1064,17 +1068,17 @@ pub async fn upsert_http_request( .execute(&db) .await?; - match get_http_request(app_handle, &id).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_http_request(mgr, &id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn list_requests( - app_handle: &AppHandle, + mgr: &impl Manager, workspace_id: &str, ) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( HttpRequest, r#" @@ -1095,10 +1099,10 @@ pub async fn list_requests( } pub async fn get_http_request( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( HttpRequest, @@ -1120,15 +1124,15 @@ pub async fn get_http_request( } pub async fn delete_http_request( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let req = get_http_request(app_handle, id).await?; + let req = get_http_request(mgr, id).await?; // DB deletes will cascade but this will delete the files - delete_all_http_responses(app_handle, id).await?; + delete_all_http_responses(mgr, id).await?; - let db = get_db(app_handle).await; + let db = get_db(mgr).await; let _ = sqlx::query!( r#" DELETE FROM http_requests @@ -1139,12 +1143,12 @@ pub async fn delete_http_request( .execute(&db) .await; - emit_deleted_model(app_handle, req) + emit_deleted_model(mgr, req) } #[allow(clippy::too_many_arguments)] pub async fn create_response( - app_handle: &AppHandle, + mgr: &impl Manager, request_id: &str, elapsed: i64, elapsed_headers: i64, @@ -1157,10 +1161,10 @@ pub async fn create_response( version: Option<&str>, remote_addr: Option<&str>, ) -> Result { - let req = get_http_request(app_handle, request_id).await?; + let req = get_http_request(mgr, request_id).await?; let id = generate_id(Some("rp")); let headers_json = Json(headers); - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" INSERT INTO http_responses ( @@ -1186,11 +1190,11 @@ pub async fn create_response( .execute(&db) .await?; - get_http_response(app_handle, &id).await + get_http_response(mgr, &id).await } -pub async fn cancel_pending_grpc_connections(app_handle: &AppHandle) -> Result<(), sqlx::Error> { - let db = get_db(app_handle).await; +pub async fn cancel_pending_grpc_connections(mgr: &impl Manager) -> Result<(), sqlx::Error> { + let db = get_db(mgr).await; sqlx::query!( r#" UPDATE grpc_connections @@ -1203,8 +1207,8 @@ pub async fn cancel_pending_grpc_connections(app_handle: &AppHandle) -> Result<( Ok(()) } -pub async fn cancel_pending_responses(app_handle: &AppHandle) -> Result<(), sqlx::Error> { - let db = get_db(app_handle).await; +pub async fn cancel_pending_responses(mgr: &impl Manager) -> Result<(), sqlx::Error> { + let db = get_db(mgr).await; sqlx::query!( r#" UPDATE http_responses @@ -1218,18 +1222,18 @@ pub async fn cancel_pending_responses(app_handle: &AppHandle) -> Result<(), sqlx } pub async fn update_response_if_id( - app_handle: &AppHandle, + mgr: &impl Manager, response: &HttpResponse, ) -> Result { if response.id.is_empty() { Ok(response.clone()) } else { - update_response(app_handle, response).await + update_response(mgr, response).await } } pub async fn upsert_workspace( - app_handle: &AppHandle, + mgr: &impl Manager, workspace: Workspace, ) -> Result { let id = match workspace.id.as_str() { @@ -1238,7 +1242,7 @@ pub async fn upsert_workspace( }; let trimmed_name = workspace.name.trim(); - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" INSERT INTO workspaces ( @@ -1266,18 +1270,18 @@ pub async fn upsert_workspace( .execute(&db) .await?; - match get_workspace(app_handle, &id).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_workspace(mgr, &id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn update_response( - app_handle: &AppHandle, + mgr: &impl Manager, response: &HttpResponse, ) -> Result { let headers_json = Json(&response.headers); - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query!( r#" UPDATE http_responses SET ( @@ -1301,17 +1305,17 @@ pub async fn update_response( .execute(&db) .await?; - match get_http_response(app_handle, &response.id).await { - Ok(m) => Ok(emit_upserted_model(app_handle, m)), + match get_http_response(mgr, &response.id).await { + Ok(m) => Ok(emit_upserted_model(mgr, m)), Err(e) => Err(e), } } pub async fn get_http_response( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( HttpResponse, r#" @@ -1330,12 +1334,12 @@ pub async fn get_http_response( } pub async fn list_responses( - app_handle: &AppHandle, + mgr: &impl Manager, request_id: &str, limit: Option, ) -> Result, sqlx::Error> { let limit_unwrapped = limit.unwrap_or_else(|| i64::MAX); - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( HttpResponse, r#" @@ -1357,10 +1361,10 @@ pub async fn list_responses( } pub async fn list_responses_by_workspace_id( - app_handle: &AppHandle, + mgr: &impl Manager, workspace_id: &str, ) -> Result, sqlx::Error> { - let db = get_db(app_handle).await; + let db = get_db(mgr).await; sqlx::query_as!( HttpResponse, r#" @@ -1380,12 +1384,12 @@ pub async fn list_responses_by_workspace_id( } pub async fn delete_grpc_request( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let req = get_grpc_request(app_handle, id).await?; + let req = get_grpc_request(mgr, id).await?; - let db = get_db(app_handle).await; + let db = get_db(mgr).await; let _ = sqlx::query!( r#" DELETE FROM grpc_requests @@ -1396,16 +1400,16 @@ pub async fn delete_grpc_request( .execute(&db) .await; - emit_deleted_model(app_handle, req) + emit_deleted_model(mgr, req) } pub async fn delete_grpc_connection( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let resp = get_grpc_connection(app_handle, id).await?; + let resp = get_grpc_connection(mgr, id).await?; - let db = get_db(app_handle).await; + let db = get_db(mgr).await; let _ = sqlx::query!( r#" DELETE FROM grpc_connections @@ -1416,14 +1420,14 @@ pub async fn delete_grpc_connection( .execute(&db) .await; - emit_deleted_model(app_handle, resp) + emit_deleted_model(mgr, resp) } pub async fn delete_http_response( - app_handle: &AppHandle, + mgr: &impl Manager, id: &str, ) -> Result { - let resp = get_http_response(app_handle, id).await?; + let resp = get_http_response(mgr, id).await?; // Delete the body file if it exists if let Some(p) = resp.body_path.clone() { @@ -1432,7 +1436,7 @@ pub async fn delete_http_response( }; } - let db = get_db(app_handle).await; + let db = get_db(mgr).await; let _ = sqlx::query!( r#" DELETE FROM http_responses @@ -1443,25 +1447,25 @@ pub async fn delete_http_response( .execute(&db) .await; - emit_deleted_model(app_handle, resp) + emit_deleted_model(mgr, resp) } pub async fn delete_all_grpc_connections( - app_handle: &AppHandle, + mgr: &impl Manager, request_id: &str, ) -> Result<(), sqlx::Error> { - for r in list_grpc_connections(app_handle, request_id).await? { - delete_grpc_connection(app_handle, &r.id).await?; + for r in list_grpc_connections(mgr, request_id).await? { + delete_grpc_connection(mgr, &r.id).await?; } Ok(()) } pub async fn delete_all_http_responses( - app_handle: &AppHandle, + mgr: &impl Manager, request_id: &str, ) -> Result<(), sqlx::Error> { - for r in list_responses(app_handle, request_id, None).await? { - delete_http_response(app_handle, &r.id).await?; + for r in list_responses(mgr, request_id, None).await? { + delete_http_response(mgr, &r.id).await?; } Ok(()) } @@ -1518,20 +1522,18 @@ pub async fn get_workspace_export_resources( }; } -fn emit_upserted_model(app_handle: &AppHandle, model: S) -> S { - app_handle - .emit_all("upserted_model", model.clone()) - .unwrap(); +fn emit_upserted_model(mgr: &impl Manager, model: S) -> S { + mgr.emit_all("upserted_model", model.clone()).unwrap(); model } -fn emit_deleted_model(app_handle: &AppHandle, model: S) -> Result { - app_handle.emit_all("deleted_model", model.clone()).unwrap(); +fn emit_deleted_model(mgr: &impl Manager, model: S) -> Result { + mgr.emit_all("deleted_model", model.clone()).unwrap(); Ok(model) } -async fn get_db(app_handle: &AppHandle) -> Pool { - let db_state = app_handle.state::>>(); +async fn get_db(w: &impl Manager) -> Pool { + let db_state = w.state::>>(); let db = &*db_state.lock().await; db.clone() } diff --git a/src-web/components/BasicAuth.tsx b/src-web/components/BasicAuth.tsx index 459a7b97..2724739c 100644 --- a/src-web/components/BasicAuth.tsx +++ b/src-web/components/BasicAuth.tsx @@ -15,6 +15,9 @@ export function BasicAuth({ requestId, authentication }: Props) { ) => void; onReset?: () => void; @@ -18,7 +16,6 @@ export function ResizeHandle({ style, justify, className, - barClassName, onResizeStart, onReset, isResizing, diff --git a/src-web/components/SettingsDialog.tsx b/src-web/components/SettingsDialog.tsx index 2419f44e..340c69fd 100644 --- a/src-web/components/SettingsDialog.tsx +++ b/src-web/components/SettingsDialog.tsx @@ -78,6 +78,7 @@ export const SettingsDialog = () => { size="sm" name="requestTimeout" label="Request Timeout (ms)" + placeholder="0" labelPosition="left" labelClassName="w-1/3" containerClassName="col-span-2" diff --git a/src-web/components/Sidebar.tsx b/src-web/components/Sidebar.tsx index ee21e96e..1f47b1d4 100644 --- a/src-web/components/Sidebar.tsx +++ b/src-web/components/Sidebar.tsx @@ -660,6 +660,7 @@ const SidebarItem = forwardRef(function SidebarItem( ), name: 'name', label: 'Name', + placeholder: 'New Name', defaultValue: itemName, }); updateAnyFolder.mutate({ id: itemId, update: (f) => ({ ...f, name }) }); diff --git a/src-web/components/SidebarActions.tsx b/src-web/components/SidebarActions.tsx index 79eb6589..124642a7 100644 --- a/src-web/components/SidebarActions.tsx +++ b/src-web/components/SidebarActions.tsx @@ -1,5 +1,4 @@ import { memo } from 'react'; -import { Simulate } from 'react-dom/test-utils'; import { useCreateFolder } from '../hooks/useCreateFolder'; import { useCreateGrpcRequest } from '../hooks/useCreateGrpcRequest'; import { useCreateHttpRequest } from '../hooks/useCreateHttpRequest'; diff --git a/src-web/components/WorkspaceActionsDropdown.tsx b/src-web/components/WorkspaceActionsDropdown.tsx index 707c15f5..728da6c0 100644 --- a/src-web/components/WorkspaceActionsDropdown.tsx +++ b/src-web/components/WorkspaceActionsDropdown.tsx @@ -117,6 +117,7 @@ export const WorkspaceActionsDropdown = memo(function WorkspaceActionsDropdown({ ), name: 'name', label: 'Name', + placeholder: 'New Name', defaultValue: activeWorkspace?.name, }); updateWorkspace.mutate({ name }); @@ -142,6 +143,7 @@ export const WorkspaceActionsDropdown = memo(function WorkspaceActionsDropdown({ defaultValue: 'My Workspace', title: 'New Workspace', confirmLabel: 'Create', + placeholder: 'My Workspace', }); createWorkspace.mutate({ name }); }, diff --git a/src-web/components/core/Editor/extensions.ts b/src-web/components/core/Editor/extensions.ts index e67052ac..97af76c1 100644 --- a/src-web/components/core/Editor/extensions.ts +++ b/src-web/components/core/Editor/extensions.ts @@ -31,6 +31,7 @@ import { } from '@codemirror/view'; import { tags as t } from '@lezer/highlight'; import { graphql, graphqlLanguageSupport } from 'cm6-graphql'; +import { EditorView } from 'codemirror'; import { jsonSchema } from 'codemirror-json-schema'; import type { Environment, Workspace } from '../../../lib/models'; import type { EditorProps } from './index'; @@ -60,6 +61,8 @@ export const myHighlightStyle = HighlightStyle.define([ { tag: [t.keyword, t.meta, t.operator], color: 'hsl(var(--color-red-600))' }, ]); +const myTheme = EditorView.theme({}, { dark: true }); + // export const defaultHighlightStyle = HighlightStyle.define([ // { tag: t.meta, color: '#404740' }, // { tag: t.link, textDecoration: 'underline' }, @@ -83,7 +86,7 @@ export const myHighlightStyle = HighlightStyle.define([ // ]); const syntaxExtensions: Record = { - 'application/grpc': jsonSchema() as any, // TODO: Fix this + 'application/grpc': jsonSchema() as unknown as LanguageSupport, // TODO: Fix this 'application/graphql': graphqlLanguageSupport(), 'application/json': json(), 'application/javascript': javascript(), @@ -131,6 +134,7 @@ export const baseExtensions = [ }, }), syntaxHighlighting(myHighlightStyle), + myTheme, EditorState.allowMultipleSelections.of(true), ]; diff --git a/src-web/components/core/Input.tsx b/src-web/components/core/Input.tsx index ff937f2c..861dfbdf 100644 --- a/src-web/components/core/Input.tsx +++ b/src-web/components/core/Input.tsx @@ -37,7 +37,7 @@ export type InputProps = Omit< rightSlot?: ReactNode; size?: 'xs' | 'sm' | 'md' | 'auto'; className?: string; - placeholder?: string; + placeholder: string; validate?: (v: string) => boolean; require?: boolean; wrapLines?: boolean; diff --git a/src-web/components/core/JsonAttributeTree.tsx b/src-web/components/core/JsonAttributeTree.tsx index 08ef46c8..860f06d3 100644 --- a/src-web/components/core/JsonAttributeTree.tsx +++ b/src-web/components/core/JsonAttributeTree.tsx @@ -5,6 +5,7 @@ import { Icon } from './Icon'; interface Props { depth?: number; + // eslint-disable-next-line @typescript-eslint/no-explicit-any attrValue: any; attrKey?: string | number; attrKeyJsonPath?: string; @@ -44,7 +45,8 @@ export const JsonAttributeTree = ({ depth = 0, attrKey, attrValue, attrKeyJsonPa } else if (jsonType === '[object Array]') { return { children: isExpanded - ? attrValue.flatMap((v: any, i: number) => ( + ? // eslint-disable-next-line @typescript-eslint/no-explicit-any + attrValue.flatMap((v: any, i: number) => ( { if (moveState.current !== null) { @@ -154,7 +154,6 @@ export function SplitLayout({ void; label: InputProps['label']; name: InputProps['name']; - defaultValue?: InputProps['defaultValue']; - placeholder?: InputProps['placeholder']; + defaultValue: InputProps['defaultValue']; + placeholder: InputProps['placeholder']; confirmLabel?: string; } diff --git a/src-web/hooks/useActiveRequest.ts b/src-web/hooks/useActiveRequest.ts index 1af9b2bf..4512ac98 100644 --- a/src-web/hooks/useActiveRequest.ts +++ b/src-web/hooks/useActiveRequest.ts @@ -1,4 +1,3 @@ -import { r } from 'vitest/dist/types-94cfe4b4'; import type { GrpcRequest, HttpRequest } from '../lib/models'; import { useActiveRequestId } from './useActiveRequestId'; import { useGrpcRequests } from './useGrpcRequests'; diff --git a/src-web/hooks/useCreateCookieJar.ts b/src-web/hooks/useCreateCookieJar.ts index 0e1bf02d..846b9d93 100644 --- a/src-web/hooks/useCreateCookieJar.ts +++ b/src-web/hooks/useCreateCookieJar.ts @@ -20,6 +20,7 @@ export function useCreateCookieJar() { id: 'new-cookie-jar', name: 'name', title: 'New CookieJar', + placeholder: 'My Jar', label: 'Name', defaultValue: 'My Jar', }); diff --git a/src-web/hooks/useCreateEnvironment.ts b/src-web/hooks/useCreateEnvironment.ts index 871be224..b8b17e29 100644 --- a/src-web/hooks/useCreateEnvironment.ts +++ b/src-web/hooks/useCreateEnvironment.ts @@ -20,6 +20,7 @@ export function useCreateEnvironment() { name: 'name', title: 'New Environment', label: 'Name', + placeholder: 'My Environment', defaultValue: 'My Environment', }); return invoke('cmd_create_environment', { name, variables: [], workspaceId }); diff --git a/src-web/hooks/useCreateGrpcRequest.ts b/src-web/hooks/useCreateGrpcRequest.ts index adaa7020..2b1b049c 100644 --- a/src-web/hooks/useCreateGrpcRequest.ts +++ b/src-web/hooks/useCreateGrpcRequest.ts @@ -1,13 +1,11 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { invoke } from '@tauri-apps/api'; import { trackEvent } from '../lib/analytics'; -import type { GrpcRequest, HttpRequest } from '../lib/models'; +import type { GrpcRequest } from '../lib/models'; import { useActiveEnvironmentId } from './useActiveEnvironmentId'; -import { useActiveRequest } from './useActiveRequest'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; import { useAppRoutes } from './useAppRoutes'; import { grpcRequestsQueryKey } from './useGrpcRequests'; -import { httpRequestsQueryKey } from './useHttpRequests'; export function useCreateGrpcRequest() { const workspaceId = useActiveWorkspaceId(); diff --git a/src-web/hooks/useUpdateAnyGrpcRequest.ts b/src-web/hooks/useUpdateAnyGrpcRequest.ts index 2c8caa85..2a5c630c 100644 --- a/src-web/hooks/useUpdateAnyGrpcRequest.ts +++ b/src-web/hooks/useUpdateAnyGrpcRequest.ts @@ -1,7 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { invoke } from '@tauri-apps/api'; import type { GrpcRequest } from '../lib/models'; -import { sleep } from '../lib/sleep'; import { getGrpcRequest } from '../lib/store'; import { grpcRequestsQueryKey } from './useGrpcRequests'; diff --git a/src-web/lib/minPromiseMillis.ts b/src-web/lib/minPromiseMillis.ts index c9272a50..08e4f06b 100644 --- a/src-web/lib/minPromiseMillis.ts +++ b/src-web/lib/minPromiseMillis.ts @@ -10,10 +10,12 @@ export async function minPromiseMillis(promise: Promise, millis: number) { result = await promise; } catch (e) { err = e; + const delayFor = millis - (Date.now() - start); + await sleep(delayFor); + throw err; } const delayFor = millis - (Date.now() - start); await sleep(delayFor); - if (err) throw err; - else return result; + return result; }