diff --git a/package.json b/package.json index 06e69693..29042f83 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,9 @@ "license": "GPL-3.0-or-later", "author": "Equicord", "scripts": { - "build": "tsx scripts/build/build.mts", + "build": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/build.mjs", "buildStandalone": "pnpm build --standalone", - "buildWeb": "tsx scripts/build/buildWeb.mts", + "buildWeb": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/buildWeb.mjs", "buildWebStandalone": "pnpm buildWeb --standalone", "buildReporter": "pnpm buildWebStandalone --reporter --skip-extension", "buildReporterDesktop": "pnpm build --reporter", @@ -63,7 +63,7 @@ "@types/yazl": "^2.4.5", "diff": "^5.2.0", "discord-types": "^1.3.26", - "esbuild": "^0.23.0", + "esbuild": "^0.15.18", "eslint": "^9.8.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-simple-header": "^1.1.1", @@ -78,7 +78,7 @@ "stylelint-config-standard": "^36.0.1", "ts-patch": "^3.2.1", "ts-pattern": "^5.3.1", - "tsx": "^4.16.5", + "tsx": "^3.12.7", "type-fest": "^4.23.0", "typed-emitter": "^2.1.0", "typescript": "^5.5.4", @@ -114,7 +114,7 @@ "sourceDir": "./dist/firefox-unpacked" }, "engines": { - "node": ">=20", + "node": ">=18", "pnpm": ">=9" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e346c39..5f2c3b19 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -93,8 +93,8 @@ importers: specifier: ^1.3.26 version: 1.3.26 esbuild: - specifier: ^0.23.0 - version: 0.23.0 + specifier: ^0.15.18 + version: 0.15.18 eslint: specifier: ^9.8.0 version: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) @@ -138,8 +138,8 @@ importers: specifier: ^5.3.1 version: 5.3.1 tsx: - specifier: ^4.16.5 - version: 4.16.5 + specifier: ^3.12.7 + version: 3.12.7 type-fest: specifier: ^4.23.0 version: 4.23.0 @@ -250,34 +250,16 @@ packages: '@esbuild-kit/esm-loader@2.5.5': resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.23.0': - resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/android-arm64@0.17.18': resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} engines: {node: '>=12'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + '@esbuild/android-arm@0.15.18': + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.23.0': - resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} - engines: {node: '>=18'} - cpu: [arm64] + cpu: [arm] os: [android] '@esbuild/android-arm@0.17.18': @@ -286,160 +268,58 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.23.0': - resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-x64@0.17.18': resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.23.0': - resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/darwin-arm64@0.17.18': resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.23.0': - resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-x64@0.17.18': resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.23.0': - resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/freebsd-arm64@0.17.18': resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.23.0': - resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-x64@0.17.18': resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.23.0': - resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/linux-arm64@0.17.18': resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.23.0': - resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm@0.17.18': resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.23.0': - resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-ia32@0.17.18': resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + '@esbuild/linux-loong64@0.15.18': + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.23.0': - resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} - engines: {node: '>=18'} - cpu: [ia32] + cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.17.18': @@ -448,222 +328,72 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.23.0': - resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-mips64el@0.17.18': resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.23.0': - resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-ppc64@0.17.18': resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.23.0': - resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-riscv64@0.17.18': resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.23.0': - resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-s390x@0.17.18': resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.23.0': - resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-x64@0.17.18': resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.23.0': - resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/netbsd-x64@0.17.18': resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.23.0': - resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.23.0': - resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-x64@0.17.18': resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.23.0': - resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/sunos-x64@0.17.18': resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.23.0': - resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/win32-arm64@0.17.18': resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.23.0': - resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-ia32@0.17.18': resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.23.0': - resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-x64@0.17.18': resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.23.0': - resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1296,21 +1026,136 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esbuild-android-64@0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + esbuild-android-arm64@0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + esbuild-darwin-64@0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + esbuild-darwin-arm64@0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + esbuild-freebsd-64@0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + esbuild-freebsd-arm64@0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + esbuild-linux-32@0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + esbuild-linux-64@0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + esbuild-linux-arm64@0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + esbuild-linux-arm@0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + esbuild-linux-mips64le@0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + esbuild-linux-ppc64le@0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + esbuild-linux-riscv64@0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + esbuild-linux-s390x@0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + esbuild-netbsd-64@0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + esbuild-openbsd-64@0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + esbuild-sunos-64@0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + esbuild-windows-32@0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + esbuild-windows-64@0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + esbuild-windows-arm64@0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + esbuild@0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.17.18: resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} engines: {node: '>=12'} hasBin: true - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.23.0: - resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} - engines: {node: '>=18'} - hasBin: true - escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -1541,11 +1386,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1575,9 +1415,6 @@ packages: get-tsconfig@4.5.0: resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} - get-tsconfig@4.7.6: - resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} - get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} @@ -2171,9 +2008,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -2393,11 +2227,6 @@ packages: resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==} hasBin: true - tsx@4.16.5: - resolution: {integrity: sha512-ArsiAQHEW2iGaqZ8fTA1nX0a+lN5mNTyuGRRO6OW3H/Yno1y9/t1f9YOI1Cfoqz63VAthn++ZYcbDP7jPflc+A==} - engines: {node: '>=18.0.0'} - hasBin: true - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2631,213 +2460,78 @@ snapshots: '@esbuild-kit/core-utils': 3.1.0 get-tsconfig: 4.5.0 - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/aix-ppc64@0.23.0': - optional: true - '@esbuild/android-arm64@0.17.18': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.23.0': + '@esbuild/android-arm@0.15.18': optional: true '@esbuild/android-arm@0.17.18': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-arm@0.23.0': - optional: true - '@esbuild/android-x64@0.17.18': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/android-x64@0.23.0': - optional: true - '@esbuild/darwin-arm64@0.17.18': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.23.0': - optional: true - '@esbuild/darwin-x64@0.17.18': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.23.0': - optional: true - '@esbuild/freebsd-arm64@0.17.18': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.23.0': - optional: true - '@esbuild/freebsd-x64@0.17.18': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.23.0': - optional: true - '@esbuild/linux-arm64@0.17.18': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.23.0': - optional: true - '@esbuild/linux-arm@0.17.18': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-arm@0.23.0': - optional: true - '@esbuild/linux-ia32@0.17.18': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.23.0': + '@esbuild/linux-loong64@0.15.18': optional: true '@esbuild/linux-loong64@0.17.18': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.23.0': - optional: true - '@esbuild/linux-mips64el@0.17.18': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.23.0': - optional: true - '@esbuild/linux-ppc64@0.17.18': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.23.0': - optional: true - '@esbuild/linux-riscv64@0.17.18': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.23.0': - optional: true - '@esbuild/linux-s390x@0.17.18': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.23.0': - optional: true - '@esbuild/linux-x64@0.17.18': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/linux-x64@0.23.0': - optional: true - '@esbuild/netbsd-x64@0.17.18': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.23.0': - optional: true - - '@esbuild/openbsd-arm64@0.23.0': - optional: true - '@esbuild/openbsd-x64@0.17.18': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.23.0': - optional: true - '@esbuild/sunos-x64@0.17.18': optional: true - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.23.0': - optional: true - '@esbuild/win32-arm64@0.17.18': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.23.0': - optional: true - '@esbuild/win32-ia32@0.17.18': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.23.0': - optional: true - '@esbuild/win32-x64@0.17.18': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - - '@esbuild/win32-x64@0.23.0': - optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))': dependencies: eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) @@ -3598,6 +3292,91 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esbuild-android-64@0.15.18: + optional: true + + esbuild-android-arm64@0.15.18: + optional: true + + esbuild-darwin-64@0.15.18: + optional: true + + esbuild-darwin-arm64@0.15.18: + optional: true + + esbuild-freebsd-64@0.15.18: + optional: true + + esbuild-freebsd-arm64@0.15.18: + optional: true + + esbuild-linux-32@0.15.18: + optional: true + + esbuild-linux-64@0.15.18: + optional: true + + esbuild-linux-arm64@0.15.18: + optional: true + + esbuild-linux-arm@0.15.18: + optional: true + + esbuild-linux-mips64le@0.15.18: + optional: true + + esbuild-linux-ppc64le@0.15.18: + optional: true + + esbuild-linux-riscv64@0.15.18: + optional: true + + esbuild-linux-s390x@0.15.18: + optional: true + + esbuild-netbsd-64@0.15.18: + optional: true + + esbuild-openbsd-64@0.15.18: + optional: true + + esbuild-sunos-64@0.15.18: + optional: true + + esbuild-windows-32@0.15.18: + optional: true + + esbuild-windows-64@0.15.18: + optional: true + + esbuild-windows-arm64@0.15.18: + optional: true + + esbuild@0.15.18: + optionalDependencies: + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 + esbuild@0.17.18: optionalDependencies: '@esbuild/android-arm': 0.17.18 @@ -3623,59 +3402,6 @@ snapshots: '@esbuild/win32-ia32': 0.17.18 '@esbuild/win32-x64': 0.17.18 - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - esbuild@0.23.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.23.0 - '@esbuild/android-arm': 0.23.0 - '@esbuild/android-arm64': 0.23.0 - '@esbuild/android-x64': 0.23.0 - '@esbuild/darwin-arm64': 0.23.0 - '@esbuild/darwin-x64': 0.23.0 - '@esbuild/freebsd-arm64': 0.23.0 - '@esbuild/freebsd-x64': 0.23.0 - '@esbuild/linux-arm': 0.23.0 - '@esbuild/linux-arm64': 0.23.0 - '@esbuild/linux-ia32': 0.23.0 - '@esbuild/linux-loong64': 0.23.0 - '@esbuild/linux-mips64el': 0.23.0 - '@esbuild/linux-ppc64': 0.23.0 - '@esbuild/linux-riscv64': 0.23.0 - '@esbuild/linux-s390x': 0.23.0 - '@esbuild/linux-x64': 0.23.0 - '@esbuild/netbsd-x64': 0.23.0 - '@esbuild/openbsd-arm64': 0.23.0 - '@esbuild/openbsd-x64': 0.23.0 - '@esbuild/sunos-x64': 0.23.0 - '@esbuild/win32-arm64': 0.23.0 - '@esbuild/win32-ia32': 0.23.0 - '@esbuild/win32-x64': 0.23.0 - escalade@3.1.2: {} escape-string-regexp@1.0.5: {} @@ -3937,9 +3663,6 @@ snapshots: fsevents@2.3.2: optional: true - fsevents@2.3.3: - optional: true - function-bind@1.1.2: {} function.prototype.name@1.1.6: @@ -3973,10 +3696,6 @@ snapshots: get-tsconfig@4.5.0: {} - get-tsconfig@4.7.6: - dependencies: - resolve-pkg-maps: 1.0.0 - get-uri@6.0.3: dependencies: basic-ftp: 5.0.5 @@ -4552,8 +4271,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve@1.22.8: dependencies: is-core-module: 2.15.0 @@ -4850,13 +4567,6 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - tsx@4.16.5: - dependencies: - esbuild: 0.21.5 - get-tsconfig: 4.7.6 - optionalDependencies: - fsevents: 2.3.3 - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 diff --git a/scripts/build/build.mts b/scripts/build/build.mjs similarity index 81% rename from scripts/build/build.mts rename to scripts/build/build.mjs index cc74f0e7..0258604e 100644 --- a/scripts/build/build.mts +++ b/scripts/build/build.mjs @@ -17,13 +17,13 @@ * along with this program. If not, see . */ +import esbuild from "esbuild"; import { createPackage } from "@electron/asar"; -import { BuildOptions, Plugin } from "esbuild"; -import { existsSync, readdirSync } from "fs"; -import { readdir, rm, writeFile } from "fs/promises"; -import { join } from "path"; +import { readdir, writeFile } from "fs/promises"; +import { dirname, join } from "path"; +import { fileURLToPath } from "url"; -import { addBuild, BUILD_TIMESTAMP, buildOrWatchAll, commonOpts, exists, globPlugins, IS_DEV, IS_REPORTER, IS_STANDALONE, IS_UPDATER_DISABLED, resolvePluginName, VERSION, watch } from "./common.mjs"; +import { BUILD_TIMESTAMP, commonOpts, exists, globPlugins, IS_DEV, IS_REPORTER, IS_STANDALONE, IS_UPDATER_DISABLED, resolvePluginName, VERSION, watch } from "./common.mjs"; const defines = { IS_STANDALONE: String(IS_STANDALONE), @@ -41,6 +41,9 @@ if (defines.IS_STANDALONE === "false") // for the specific platform we're on defines["process.platform"] = JSON.stringify(process.platform); +/** + * @type {esbuild.BuildOptions} + */ const nodeCommonOpts = { ...commonOpts, format: "cjs", @@ -48,12 +51,15 @@ const nodeCommonOpts = { target: ["esnext"], external: ["electron", "original-fs", "~pluginNatives", ...commonOpts.external], define: defines -} satisfies BuildOptions; +}; -const sourceMapFooter = (s: string) => watch ? "" : `//# sourceMappingURL=vencord://${s}.js.map`; +const sourceMapFooter = s => watch ? "" : `//# sourceMappingURL=vencord://${s}.js.map`; const sourcemap = watch ? "inline" : "external"; -const globNativesPlugin: Plugin = { +/** + * @type {import("esbuild").Plugin} + */ +const globNativesPlugin = { name: "glob-natives-plugin", setup: build => { const filter = /^~pluginNatives$/; @@ -100,9 +106,9 @@ const globNativesPlugin: Plugin = { await Promise.all([ // Discord Desktop main & renderer & preload - addBuild({ + esbuild.build({ ...nodeCommonOpts, - entryPoints: ["src/main/index.ts"], + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/main/index.ts")], outfile: "dist/desktop/patcher.js", footer: { js: "//# sourceURL=VencordPatcher\n" + sourceMapFooter("patcher") }, sourcemap, @@ -117,9 +123,9 @@ await Promise.all([ globNativesPlugin ] }), - addBuild({ + esbuild.build({ ...commonOpts, - entryPoints: ["src/Vencord.ts"], + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/Vencord.ts")], outfile: "dist/desktop/renderer.js", format: "iife", target: ["esnext"], @@ -137,9 +143,9 @@ await Promise.all([ IS_EQUIBOP: "false" } }), - addBuild({ + esbuild.build({ ...nodeCommonOpts, - entryPoints: ["src/preload.ts"], + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/preload.ts")], outfile: "dist/desktop/preload.js", footer: { js: "//# sourceURL=VencordPreload\n" + sourceMapFooter("preload") }, sourcemap, @@ -152,9 +158,9 @@ await Promise.all([ }), // Vencord Desktop main & renderer & preload - addBuild({ + esbuild.build({ ...nodeCommonOpts, - entryPoints: ["src/main/index.ts"], + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/main/index.ts")], outfile: "dist/vesktop/main.js", footer: { js: "//# sourceURL=VencordMain\n" + sourceMapFooter("main") }, sourcemap, @@ -169,10 +175,10 @@ await Promise.all([ globNativesPlugin ] }), - addBuild({ + esbuild.build({ ...commonOpts, - entryPoints: ["src/Vencord.ts"], - outfile: "dist/vesktop/renderer.js", + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/Vencord.ts")], + outfile: "dist/vencordDesktopRenderer.js", format: "iife", target: ["esnext"], footer: { js: "//# sourceURL=VencordRenderer\n" + sourceMapFooter("renderer") }, @@ -189,9 +195,9 @@ await Promise.all([ IS_EQUIBOP: "false" } }), - addBuild({ + esbuild.build({ ...nodeCommonOpts, - entryPoints: ["src/preload.ts"], + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/preload.ts")], outfile: "dist/vesktop/preload.js", footer: { js: "//# sourceURL=VencordPreload\n" + sourceMapFooter("preload") }, sourcemap, @@ -204,9 +210,9 @@ await Promise.all([ }), // Equicord Desktop main & renderer & preload - addBuild({ + esbuild.build({ ...nodeCommonOpts, - entryPoints: ["src/main/index.ts"], + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/main/index.ts")], outfile: "dist/equibop/main.js", footer: { js: "//# sourceURL=EquicordMain\n" + sourceMapFooter("main") }, sourcemap, @@ -221,9 +227,9 @@ await Promise.all([ globNativesPlugin ] }), - addBuild({ + esbuild.build({ ...commonOpts, - entryPoints: ["src/Vencord.ts"], + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/Vencord.ts")], outfile: "dist/equibop/renderer.js", format: "iife", target: ["esnext"], @@ -241,9 +247,9 @@ await Promise.all([ IS_EQUIBOP: "true" } }), - addBuild({ + esbuild.build({ ...nodeCommonOpts, - entryPoints: ["src/preload.ts"], + entryPoints: [join(dirname(fileURLToPath(import.meta.url)), "../../src/preload.ts")], outfile: "dist/equibop/preload.js", footer: { js: "//# sourceURL=EquicordPreload\n" + sourceMapFooter("preload") }, sourcemap, @@ -254,9 +260,13 @@ await Promise.all([ IS_EQUIBOP: "true" } }), -]); - -await buildOrWatchAll(); +]).catch(err => { + console.error("Build failed"); + console.error(err.message); + // make ci fail + if (!commonOpts.watch) + process.exitCode = 1; +}); await Promise.all([ writeFile("dist/desktop/package.json", JSON.stringify({ @@ -278,24 +288,3 @@ await Promise.all([ createPackage("dist/equibop", "dist/equibop.asar"), createPackage("dist/vesktop", "dist/vesktop.asar") ]); - - -if (existsSync("dist/renderer.js")) { - console.warn("Legacy dist folder. Cleaning up and adding shims."); - - await Promise.all( - readdirSync("dist") - .filter(f => - f.endsWith(".map") || - f.endsWith(".LEGAL.txt") || - ["patcher", "preload", "renderer"].some(name => f.startsWith(name)) - ) - .map(file => rm(join("dist", file))) - ); - - await Promise.all([ - writeFile("dist/patcher.js", 'require("./desktop")'), - writeFile("dist/equicordDesktopMain.js", 'require("./equibop")'), - writeFile("dist/vencordDesktopMain.js", 'require("./vesktop")') - ]); -} diff --git a/scripts/build/buildWeb.mts b/scripts/build/buildWeb.mjs similarity index 87% rename from scripts/build/buildWeb.mts rename to scripts/build/buildWeb.mjs index 8f1b33ef..ede910a6 100644 --- a/scripts/build/buildWeb.mts +++ b/scripts/build/buildWeb.mjs @@ -23,12 +23,12 @@ import { appendFile, mkdir, readdir, readFile, rm, writeFile } from "fs/promises import { join } from "path"; import Zip from "zip-local"; -import { addBuild, BUILD_TIMESTAMP, buildOrWatchAll, commonOpts, globPlugins, IS_DEV, IS_REPORTER, VERSION } from "./common.mjs"; +import { BUILD_TIMESTAMP, commonOpts, globPlugins, IS_DEV, IS_REPORTER, VERSION } from "./common.mjs"; /** * @type {esbuild.BuildOptions} */ -const commonOptions: esbuild.BuildOptions = { +const commonOptions = { ...commonOpts, entryPoints: ["browser/Vencord.ts"], globalName: "Vencord", @@ -68,7 +68,7 @@ const RnNoiseFiles = [ await Promise.all( [ - addBuild({ + esbuild.build({ entryPoints: MonacoWorkerEntryPoints.map(entry => `node_modules/monaco-editor/esm/${entry}`), bundle: true, minify: true, @@ -76,7 +76,7 @@ await Promise.all( outbase: "node_modules/monaco-editor/esm/", outdir: "dist/browser/monaco" }), - addBuild({ + esbuild.build({ entryPoints: ["browser/monaco.ts"], bundle: true, minify: true, @@ -86,12 +86,12 @@ await Promise.all( ".ttf": "file" } }), - addBuild({ + esbuild.build({ ...commonOptions, outfile: "dist/browser/browser.js", footer: { js: "//# sourceURL=VencordWeb" } }), - addBuild({ + esbuild.build({ ...commonOptions, outfile: "dist/browser/extension.js", define: { @@ -100,7 +100,7 @@ await Promise.all( }, footer: { js: "//# sourceURL=VencordWeb" } }), - addBuild({ + esbuild.build({ ...commonOptions, inject: ["browser/GMPolyfill.js", ...(commonOptions?.inject || [])], define: { @@ -119,10 +119,11 @@ await Promise.all( ] ); -await buildOrWatchAll(); - -async function globDir(dir: string): Promise { - const files = [] as string[]; +/** + * @type {(dir: string) => Promise} + */ +async function globDir(dir) { + const files = []; for (const child of await readdir(dir, { withFileTypes: true })) { const p = join(dir, child.name); @@ -135,23 +136,34 @@ async function globDir(dir: string): Promise { return files; } -async function loadDir(dir: string, basePath = "") { +/** + * @type {(dir: string, basePath?: string) => Promise>} + */ +async function loadDir(dir, basePath = "") { const files = await globDir(dir); - return Object.fromEntries(await Promise.all(files.map(async f => - [f.slice(basePath.length), await readFile(f)] as const - ))); + return Object.fromEntries( + await Promise.all( + files.map( + async f => + [f.slice(basePath.length), await readFile(f)] + ) + ) + ); } -async function buildExtension(target: string, files: string[]): Promise { - const entries: Record = { +/** + * @type {(target: string, files: string[]) => Promise} + */ +async function buildExtension(target, files) { + const entries = { "dist/Vencord.js": await readFile("dist/browser/extension.js"), "dist/Vencord.css": await readFile("dist/browser/extension.css"), ...await loadDir("dist/browser/monaco"), ...Object.fromEntries(await Promise.all(RnNoiseFiles.map(async file => - [`third-party/rnnoise/${file.replace(/^dist\//, "")}`, await readFile(`node_modules/@sapphi-red/web-noise-suppressor/${file}`)] as const + [`third-party/rnnoise/${file.replace(/^dist\//, "")}`, await readFile(`node_modules/@sapphi-red/web-noise-suppressor/${file}`)] ))), ...Object.fromEntries(await Promise.all(files.map(async f => { - let content: Uint8Array | Buffer = await readFile(join("browser", f)); + let content = await readFile(join("browser", f)); if (f.startsWith("manifest")) { const json = JSON.parse(content.toString("utf-8")); json.version = VERSION; @@ -161,7 +173,7 @@ async function buildExtension(target: string, files: string[]): Promise { return [ f.startsWith("manifest") ? "manifest.json" : f, content - ] as const; + ]; }))) }; diff --git a/scripts/build/common.mts b/scripts/build/common.mjs similarity index 85% rename from scripts/build/common.mts rename to scripts/build/common.mjs index 334b356a..4df03885 100644 --- a/scripts/build/common.mts +++ b/scripts/build/common.mjs @@ -20,16 +20,17 @@ import "../suppressExperimentalWarnings.js"; import "../checkNodeVersion.js"; import { exec, execSync } from "child_process"; -import esbuild, { build, BuildOptions, context, Plugin } from "esbuild"; +import esbuild from "esbuild"; import { constants as FsConstants, readFileSync } from "fs"; import { access, readdir, readFile } from "fs/promises"; import { minify as minifyHtml } from "html-minifier-terser"; -import { join, relative } from "path"; +import { dirname, join, relative } from "path"; +import { fileURLToPath } from "url"; import { promisify } from "util"; import { getPluginTarget } from "../utils.mjs"; -const PackageJSON: typeof import("../../package.json") = JSON.parse(readFileSync("package.json", "utf-8")); +const PackageJSON = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), "../../package.json"))); export const VERSION = PackageJSON.version; // https://reproducible-builds.org/docs/source-date-epoch/ @@ -53,8 +54,11 @@ export const banner = { }; const PluginDefinitionNameMatcher = /definePlugin\(\{\s*(["'])?name\1:\s*(["'`])(.+?)\2/; - -export async function resolvePluginName(base: string, dirent: import("fs").Dirent) { +/** + * @param {string} base + * @param {import("fs").Dirent} dirent + */ +export async function resolvePluginName(base, dirent) { const fullPath = join(base, dirent.name); const content = dirent.isFile() ? await readFile(fullPath, "utf-8") @@ -75,13 +79,28 @@ export async function resolvePluginName(base: string, dirent: import("fs").Diren })(); } -export async function exists(path: string) { +export async function exists(path) { return await access(path, FsConstants.F_OK) .then(() => true) .catch(() => false); } -export const globPlugins: (kind: "web" | "discordDesktop" | "vencordDesktop" | "equicordDesktop") => Plugin = kind => ({ +// https://github.com/evanw/esbuild/issues/619#issuecomment-751995294 +/** + * @type {import("esbuild").Plugin} + */ +export const makeAllPackagesExternalPlugin = { + name: "make-all-packages-external", + setup(build) { + const filter = /^[^./]|^\.[^./]|^\.\.[^/]/; // Must not start with "/" or "./" or "../" + build.onResolve({ filter }, args => ({ path: args.path, external: true })); + } +}; + +/** + * @type {(kind: "web" | "discordDesktop" | "vencordDesktop" | "equicordDesktop") => import("esbuild").Plugin} + */ +export const globPlugins = kind => ({ name: "glob-plugins", setup: build => { const filter = /^~plugins$/; @@ -146,7 +165,10 @@ export const globPlugins: (kind: "web" | "discordDesktop" | "vencordDesktop" | " } }); -export const gitHashPlugin: Plugin = { +/** + * @type {import("esbuild").Plugin} + */ +export const gitHashPlugin = { name: "git-hash-plugin", setup: build => { const filter = /^~git-hash$/; @@ -159,7 +181,10 @@ export const gitHashPlugin: Plugin = { } }; -export const gitRemotePlugin: Plugin = { +/** + * @type {import("esbuild").Plugin} + */ +export const gitRemotePlugin = { name: "git-remote-plugin", setup: build => { const filter = /^~git-remote$/; @@ -181,7 +206,10 @@ export const gitRemotePlugin: Plugin = { } }; -export const fileUrlPlugin: Plugin = { +/** + * @type {import("esbuild").Plugin} + */ +export const fileUrlPlugin = { name: "file-uri-plugin", setup: build => { const filter = /^file:\/\/.+$/; @@ -201,7 +229,7 @@ export const fileUrlPlugin: Plugin = { const encoding = base64 ? "base64" : "utf-8"; - let content: string; + let content; if (!minify) { content = await readFile(path, encoding); if (!noTrim) content = content.trimEnd(); @@ -240,8 +268,12 @@ export const fileUrlPlugin: Plugin = { } }; -const styleModule = readFileSync("./scripts/build/module/style.js", "utf-8"); -export const stylePlugin: Plugin = { +const styleModule = readFileSync(join(dirname(fileURLToPath(import.meta.url)), "module/style.js"), "utf-8"); + +/** + * @type {import("esbuild").Plugin} + */ +export const stylePlugin = { name: "style-plugin", setup: ({ onResolve, onLoad }) => { onResolve({ filter: /\.css\?managed$/, namespace: "file" }, ({ path, resolveDir }) => ({ @@ -262,43 +294,23 @@ export const stylePlugin: Plugin = { } }; +/** + * @type {import("esbuild").BuildOptions} + */ export const commonOpts = { logLevel: "info", bundle: true, + watch, minify: !watch, - sourcemap: watch ? "inline" : "external", + sourcemap: watch ? "inline" : "", legalComments: "linked", banner, plugins: [fileUrlPlugin, gitHashPlugin, gitRemotePlugin, stylePlugin], external: ["~plugins", "~git-hash", "~git-remote", "/assets/*"], - inject: ["./scripts/build/inject/react.mjs"], + inject: [join(dirname(fileURLToPath(import.meta.url)), "inject/react.mjs")], jsxFactory: "VencordCreateElement", jsxFragment: "VencordFragment", - jsx: "transform" -} satisfies BuildOptions; - - -const builds = [] as BuildOptions[]; -export function addBuild(options: BuildOptions) { - builds.push(options); -} - -export async function buildOrWatchAll() { - if (watch) { - const contexts = await Promise.all(builds.map(context)); - await Promise.all(contexts.map(ctx => ctx.watch())); - } else { - try { - await Promise.all(builds.map(build)); - } catch (err) { - const reason = err instanceof Error - ? err.message - : err; - - console.error("Build failed"); - console.error(reason); - // make ci fail - process.exitCode = 1; - } - } -} + jsx: "transform", + // Work around https://github.com/evanw/esbuild/issues/2460 + tsconfig: join(dirname(fileURLToPath(import.meta.url)), "tsconfig.esbuild.json") +}; diff --git a/scripts/build/tsconfig.esbuild.json b/scripts/build/tsconfig.esbuild.json new file mode 100644 index 00000000..e3e28a14 --- /dev/null +++ b/scripts/build/tsconfig.esbuild.json @@ -0,0 +1,7 @@ +// Work around https://github.com/evanw/esbuild/issues/2460 +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "jsx": "react" + } +} diff --git a/scripts/utils.mts b/scripts/utils.mjs similarity index 79% rename from scripts/utils.mts rename to scripts/utils.mjs index 2027bed2..5b84c987 100644 --- a/scripts/utils.mts +++ b/scripts/utils.mjs @@ -16,11 +16,15 @@ * along with this program. If not, see . */ -export function getPluginTarget(filePath: string) { +/** + * @param {string} filePath + * @returns {string | null} + */ +export function getPluginTarget(filePath) { const pathParts = filePath.split(/[/\\]/); - if (/^index\.tsx?$/.test(pathParts.at(-1)!)) pathParts.pop(); + if (/^index\.tsx?$/.test(pathParts.at(-1))) pathParts.pop(); - const identifier = pathParts.at(-1)!.replace(/\.tsx?$/, ""); + const identifier = pathParts.at(-1).replace(/\.tsx?$/, ""); const identiferBits = identifier.split("."); return identiferBits.length === 1 ? null : identiferBits.at(-1); } diff --git a/src/api/Commands/index.ts b/src/api/Commands/index.ts index 147f720a..d069b5f0 100644 --- a/src/api/Commands/index.ts +++ b/src/api/Commands/index.ts @@ -138,6 +138,8 @@ export function registerCommand(command: C, plugin: string) { throw new Error(`Command '${command.name}' already exists.`); command.isVencordCommand = true; + command.untranslatedName ??= command.name; + command.untranslatedDescription ??= command.description; command.id ??= `-${BUILT_IN.length + 1}`; command.applicationId ??= "-1"; // BUILT_IN; command.type ??= ApplicationCommandType.CHAT_INPUT; diff --git a/src/api/Commands/types.ts b/src/api/Commands/types.ts index bd349e25..70b73775 100644 --- a/src/api/Commands/types.ts +++ b/src/api/Commands/types.ts @@ -93,8 +93,10 @@ export interface Command { isVencordCommand?: boolean; name: string; + untranslatedName?: string; displayName?: string; description: string; + untranslatedDescription?: string; displayDescription?: string; options?: Option[]; diff --git a/src/equicordplugins/allCallTimers/index.tsx b/src/equicordplugins/allCallTimers/index.tsx index d78b1242..88d83b4e 100644 --- a/src/equicordplugins/allCallTimers/index.tsx +++ b/src/equicordplugins/allCallTimers/index.tsx @@ -103,7 +103,6 @@ export default definePlugin({ description: "Add call timer to all users in a server voice channel.", authors: [EquicordDevs.MaxHerbold, Devs.D3SOX], settings, - patches: [ { find: "renderPrioritySpeaker", diff --git a/src/equicordplugins/questCompleter/index.tsx b/src/equicordplugins/questCompleter/index.tsx index 24f08ba2..2c167bfb 100644 --- a/src/equicordplugins/questCompleter/index.tsx +++ b/src/equicordplugins/questCompleter/index.tsx @@ -76,7 +76,6 @@ function ToolBarHeader() { } async function openCompleteQuestUI() { - // check if user is sharing screen and there is someone that is watching the stream const ApplicationStreamingStore = findByProps("getStreamerActiveStreamMetadata"); const RunningGameStore = findByProps("getRunningGames"); const ExperimentStore = findByProps("getGuildExperiments"); diff --git a/src/main/updater/git.ts b/src/main/updater/git.ts index 909abe0e..909f2b9d 100644 --- a/src/main/updater/git.ts +++ b/src/main/updater/git.ts @@ -25,6 +25,7 @@ import { promisify } from "util"; import { serializeErrors } from "./common"; const VENCORD_SRC_DIR = join(__dirname, ".."); +const EQUICORD_DIR = join(__dirname, "../../"); const execFile = promisify(cpExecFile); @@ -72,14 +73,16 @@ async function pull() { } async function build() { - const opts = { cwd: VENCORD_SRC_DIR }; + const opts = { cwd: EQUICORD_DIR }; const command = isFlatpak ? "flatpak-spawn" : "node"; - const args = isFlatpak ? ["--host", "node", "../scripts/build/build.mts"] : ["../scripts/build/build.mts"]; + const args = isFlatpak ? ["--host", "node", "scripts/build/build.mjs"] : ["scripts/build/build.mjs"]; if (IS_DEV) args.push("--dev"); const res = await execFile(command, args, opts); + console.log(res); + console.log(`\n\n\n\n\n${res.stderr}`); return !res.stderr.includes("Build failed"); }