mirror of
https://git.stupid.fish/teidesu/scripts.git
synced 2025-07-28 02:32:11 +10:00
chore: update public repo
This commit is contained in:
parent
2423324540
commit
090a502ece
3 changed files with 335 additions and 40 deletions
|
@ -24,6 +24,7 @@
|
||||||
"spinnies": "^0.5.1",
|
"spinnies": "^0.5.1",
|
||||||
"tough-cookie": "^5.0.0",
|
"tough-cookie": "^5.0.0",
|
||||||
"tough-cookie-file-store": "^2.0.3",
|
"tough-cookie-file-store": "^2.0.3",
|
||||||
|
"tsx": "^4.19.2",
|
||||||
"undici": "^7.2.0",
|
"undici": "^7.2.0",
|
||||||
"wanakana": "^5.3.1"
|
"wanakana": "^5.3.1"
|
||||||
},
|
},
|
||||||
|
|
271
pnpm-lock.yaml
generated
271
pnpm-lock.yaml
generated
|
@ -62,6 +62,9 @@ importers:
|
||||||
tough-cookie-file-store:
|
tough-cookie-file-store:
|
||||||
specifier: ^2.0.3
|
specifier: ^2.0.3
|
||||||
version: 2.0.3
|
version: 2.0.3
|
||||||
|
tsx:
|
||||||
|
specifier: ^4.19.2
|
||||||
|
version: 4.19.2
|
||||||
typescript:
|
typescript:
|
||||||
specifier: ^5.0.0
|
specifier: ^5.0.0
|
||||||
version: 5.7.2
|
version: 5.7.2
|
||||||
|
@ -193,6 +196,150 @@ packages:
|
||||||
resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==}
|
resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==}
|
||||||
engines: {node: '>=16'}
|
engines: {node: '>=16'}
|
||||||
|
|
||||||
|
'@esbuild/aix-ppc64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [aix]
|
||||||
|
|
||||||
|
'@esbuild/android-arm64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/android-arm@0.23.1':
|
||||||
|
resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/android-x64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/darwin-arm64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@esbuild/darwin-x64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@esbuild/freebsd-arm64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@esbuild/freebsd-x64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@esbuild/linux-arm64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-arm@0.23.1':
|
||||||
|
resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-ia32@0.23.1':
|
||||||
|
resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-loong64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [loong64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-mips64el@0.23.1':
|
||||||
|
resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [mips64el]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-ppc64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-riscv64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [riscv64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-s390x@0.23.1':
|
||||||
|
resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [s390x]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-x64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/netbsd-x64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [netbsd]
|
||||||
|
|
||||||
|
'@esbuild/openbsd-arm64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [openbsd]
|
||||||
|
|
||||||
|
'@esbuild/openbsd-x64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [openbsd]
|
||||||
|
|
||||||
|
'@esbuild/sunos-x64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [sunos]
|
||||||
|
|
||||||
|
'@esbuild/win32-arm64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@esbuild/win32-ia32@0.23.1':
|
||||||
|
resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@esbuild/win32-x64@0.23.1':
|
||||||
|
resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
'@eslint-community/eslint-plugin-eslint-comments@4.4.1':
|
'@eslint-community/eslint-plugin-eslint-comments@4.4.1':
|
||||||
resolution: {integrity: sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==}
|
resolution: {integrity: sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
|
@ -773,6 +920,11 @@ packages:
|
||||||
es-module-lexer@1.5.4:
|
es-module-lexer@1.5.4:
|
||||||
resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
|
resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
|
||||||
|
|
||||||
|
esbuild@0.23.1:
|
||||||
|
resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
escalade@3.2.0:
|
escalade@3.2.0:
|
||||||
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
|
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
@ -1033,6 +1185,11 @@ packages:
|
||||||
fs-constants@1.0.0:
|
fs-constants@1.0.0:
|
||||||
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
|
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
|
||||||
|
|
||||||
|
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:
|
function-bind@1.1.2:
|
||||||
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
||||||
|
|
||||||
|
@ -1785,6 +1942,11 @@ packages:
|
||||||
tslib@2.8.1:
|
tslib@2.8.1:
|
||||||
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
||||||
|
|
||||||
|
tsx@4.19.2:
|
||||||
|
resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==}
|
||||||
|
engines: {node: '>=18.0.0'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
tunnel-agent@0.6.0:
|
tunnel-agent@0.6.0:
|
||||||
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
||||||
|
|
||||||
|
@ -2038,6 +2200,78 @@ snapshots:
|
||||||
esquery: 1.6.0
|
esquery: 1.6.0
|
||||||
jsdoc-type-pratt-parser: 4.1.0
|
jsdoc-type-pratt-parser: 4.1.0
|
||||||
|
|
||||||
|
'@esbuild/aix-ppc64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-arm64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-arm@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-x64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/darwin-arm64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/darwin-x64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/freebsd-arm64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/freebsd-x64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-arm64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-arm@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-ia32@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-loong64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-mips64el@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-ppc64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-riscv64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-s390x@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-x64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/netbsd-x64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/openbsd-arm64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/openbsd-x64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/sunos-x64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-arm64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-ia32@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-x64@0.23.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.15.0)':
|
'@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.15.0)':
|
||||||
dependencies:
|
dependencies:
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
|
@ -2677,6 +2911,33 @@ snapshots:
|
||||||
|
|
||||||
es-module-lexer@1.5.4: {}
|
es-module-lexer@1.5.4: {}
|
||||||
|
|
||||||
|
esbuild@0.23.1:
|
||||||
|
optionalDependencies:
|
||||||
|
'@esbuild/aix-ppc64': 0.23.1
|
||||||
|
'@esbuild/android-arm': 0.23.1
|
||||||
|
'@esbuild/android-arm64': 0.23.1
|
||||||
|
'@esbuild/android-x64': 0.23.1
|
||||||
|
'@esbuild/darwin-arm64': 0.23.1
|
||||||
|
'@esbuild/darwin-x64': 0.23.1
|
||||||
|
'@esbuild/freebsd-arm64': 0.23.1
|
||||||
|
'@esbuild/freebsd-x64': 0.23.1
|
||||||
|
'@esbuild/linux-arm': 0.23.1
|
||||||
|
'@esbuild/linux-arm64': 0.23.1
|
||||||
|
'@esbuild/linux-ia32': 0.23.1
|
||||||
|
'@esbuild/linux-loong64': 0.23.1
|
||||||
|
'@esbuild/linux-mips64el': 0.23.1
|
||||||
|
'@esbuild/linux-ppc64': 0.23.1
|
||||||
|
'@esbuild/linux-riscv64': 0.23.1
|
||||||
|
'@esbuild/linux-s390x': 0.23.1
|
||||||
|
'@esbuild/linux-x64': 0.23.1
|
||||||
|
'@esbuild/netbsd-x64': 0.23.1
|
||||||
|
'@esbuild/openbsd-arm64': 0.23.1
|
||||||
|
'@esbuild/openbsd-x64': 0.23.1
|
||||||
|
'@esbuild/sunos-x64': 0.23.1
|
||||||
|
'@esbuild/win32-arm64': 0.23.1
|
||||||
|
'@esbuild/win32-ia32': 0.23.1
|
||||||
|
'@esbuild/win32-x64': 0.23.1
|
||||||
|
|
||||||
escalade@3.2.0: {}
|
escalade@3.2.0: {}
|
||||||
|
|
||||||
escape-string-regexp@1.0.5: {}
|
escape-string-regexp@1.0.5: {}
|
||||||
|
@ -3021,6 +3282,9 @@ snapshots:
|
||||||
|
|
||||||
fs-constants@1.0.0: {}
|
fs-constants@1.0.0: {}
|
||||||
|
|
||||||
|
fsevents@2.3.3:
|
||||||
|
optional: true
|
||||||
|
|
||||||
function-bind@1.1.2: {}
|
function-bind@1.1.2: {}
|
||||||
|
|
||||||
get-caller-file@2.0.5: {}
|
get-caller-file@2.0.5: {}
|
||||||
|
@ -3921,6 +4185,13 @@ snapshots:
|
||||||
|
|
||||||
tslib@2.8.1: {}
|
tslib@2.8.1: {}
|
||||||
|
|
||||||
|
tsx@4.19.2:
|
||||||
|
dependencies:
|
||||||
|
esbuild: 0.23.1
|
||||||
|
get-tsconfig: 4.8.1
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents: 2.3.3
|
||||||
|
|
||||||
tunnel-agent@0.6.0:
|
tunnel-agent@0.6.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
safe-buffer: 5.2.1
|
safe-buffer: 5.2.1
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import { mkdir, writeFile } from 'node:fs/promises'
|
import { mkdir, rm, writeFile } from 'node:fs/promises'
|
||||||
import { join } from 'node:path'
|
import { join } from 'node:path'
|
||||||
import { ffetchAddons } from '@fuman/fetch'
|
import { ffetchAddons } from '@fuman/fetch'
|
||||||
import { asyncPool, base64 } from '@fuman/utils'
|
import { assert, asyncPool, base64 } from '@fuman/utils'
|
||||||
import { load } from 'cheerio'
|
import { load } from 'cheerio'
|
||||||
import Spinnies from 'spinnies'
|
import Spinnies from 'spinnies'
|
||||||
import { ProxyAgent } from 'undici'
|
import { ProxyAgent } from 'undici'
|
||||||
import { z } from 'zod'
|
import { z } from 'zod'
|
||||||
import { $ } from 'zx'
|
import { $, question } from 'zx'
|
||||||
import { downloadFile, ffetch as ffetchBase } from '../../utils/fetch.ts'
|
import { downloadFile, ffetch as ffetchBase } from '../../utils/fetch.ts'
|
||||||
import { sanitizeFilename } from '../../utils/fs.ts'
|
import { sanitizeFilename } from '../../utils/fs.ts'
|
||||||
import { chunks, getEnv } from '../../utils/misc.ts'
|
import { chunks, getEnv } from '../../utils/misc.ts'
|
||||||
|
@ -133,21 +133,18 @@ async function downloadTrack(track: ScTrack, opts: {
|
||||||
const artworkBytes = track.artwork_url ? new Uint8Array(await ffetchHtml(track.artwork_url).arrayBuffer()) : null
|
const artworkBytes = track.artwork_url ? new Uint8Array(await ffetchHtml(track.artwork_url).arrayBuffer()) : null
|
||||||
|
|
||||||
// find the best transcoding
|
// find the best transcoding
|
||||||
const transcoding = track.media.transcodings.sort((a, b) => {
|
let transcoding!: typeof track.media.transcodings[0]
|
||||||
// prefer non-legacy transcodings
|
for (const t of track.media.transcodings) {
|
||||||
if (a.is_legacy_transcoding && !b.is_legacy_transcoding) return -1
|
if (t.quality === 'hq') {
|
||||||
if (!a.is_legacy_transcoding && b.is_legacy_transcoding) return 1
|
transcoding = t
|
||||||
|
break
|
||||||
// prefer hq
|
}
|
||||||
if (a.quality === 'sq' && b.quality === 'hq') return -1
|
if (t.preset === 'opus_0_0') {
|
||||||
if (a.quality === 'hq' && b.quality === 'sq') return 1
|
transcoding = t
|
||||||
|
break
|
||||||
// prefer opus
|
}
|
||||||
if (a.preset === 'opus_0_0' && b.preset !== 'opus_0_0') return -1
|
transcoding = t
|
||||||
if (a.preset !== 'opus_0_0' && b.preset === 'opus_0_0') return 1
|
}
|
||||||
|
|
||||||
return 0
|
|
||||||
})[0]
|
|
||||||
|
|
||||||
const { url: hlsUrl } = await ffetchApi(transcoding.url, {
|
const { url: hlsUrl } = await ffetchApi(transcoding.url, {
|
||||||
query: {
|
query: {
|
||||||
|
@ -157,46 +154,55 @@ async function downloadTrack(track: ScTrack, opts: {
|
||||||
url: z.string(),
|
url: z.string(),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
const ext = transcoding.format.mime_type.match(/^audio\/(\w+)(;|$)/)![1]
|
let ext = transcoding.format.mime_type.match(/^audio\/(\w+)(;|$)/)![1]
|
||||||
|
if (ext === 'mp4') ext = 'm4a'
|
||||||
const filename = `${opts.destination}.${ext}`
|
const filename = `${opts.destination}.${ext}`
|
||||||
|
|
||||||
const params: string[] = [
|
const params: string[] = [
|
||||||
'-y',
|
'-y',
|
||||||
'-i',
|
'-i',
|
||||||
hlsUrl,
|
hlsUrl,
|
||||||
'-c',
|
|
||||||
'copy',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
if (ext === 'mp3') {
|
if (artworkBytes) {
|
||||||
if (artworkBytes) {
|
if (ext === 'mp3') {
|
||||||
await writeFile(artworkPath, artworkBytes)
|
await writeFile(artworkPath, artworkBytes)
|
||||||
params.push(
|
params.push(
|
||||||
'-i',
|
'-i',
|
||||||
artworkPath,
|
artworkPath,
|
||||||
'-map',
|
'-map',
|
||||||
'0:a',
|
'1:v:0',
|
||||||
|
'-id3v2_version',
|
||||||
|
'3',
|
||||||
|
'-metadata:s:v',
|
||||||
|
'title=Album cover',
|
||||||
|
'-metadata:s:v',
|
||||||
|
'comment=Cover (front)',
|
||||||
|
)
|
||||||
|
} else if (ext === 'ogg') {
|
||||||
|
const blob = base64.encode(await generateOpusImageBlob(artworkBytes))
|
||||||
|
params.push(
|
||||||
|
'-metadata',
|
||||||
|
`metadata_block_picture=${blob}`,
|
||||||
|
)
|
||||||
|
} else if (ext === 'm4a') {
|
||||||
|
await writeFile(artworkPath, artworkBytes)
|
||||||
|
params.push(
|
||||||
|
'-i',
|
||||||
|
artworkPath,
|
||||||
'-map',
|
'-map',
|
||||||
'1:0',
|
'1',
|
||||||
|
'-disposition:v',
|
||||||
|
'attached_pic',
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
params.push(
|
|
||||||
'-id3v2_version',
|
|
||||||
'3',
|
|
||||||
'-metadata:s:v',
|
|
||||||
'title="Album cover"',
|
|
||||||
'-metadata:s:v',
|
|
||||||
'comment="Cover (front)"',
|
|
||||||
)
|
|
||||||
} else if (ext === 'ogg' && artworkBytes) {
|
|
||||||
const blob = base64.encode(await generateOpusImageBlob(artworkBytes))
|
|
||||||
params.push(
|
|
||||||
'-metadata',
|
|
||||||
`metadata_block_picture=${blob}`,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
params.push(
|
params.push(
|
||||||
|
'-map',
|
||||||
|
'0:a',
|
||||||
|
'-c',
|
||||||
|
'copy',
|
||||||
'-metadata',
|
'-metadata',
|
||||||
`title=${track.title}`,
|
`title=${track.title}`,
|
||||||
'-metadata',
|
'-metadata',
|
||||||
|
@ -205,6 +211,8 @@ async function downloadTrack(track: ScTrack, opts: {
|
||||||
)
|
)
|
||||||
|
|
||||||
await $`ffmpeg ${params}`.quiet(true)
|
await $`ffmpeg ${params}`.quiet(true)
|
||||||
|
|
||||||
|
await rm(artworkPath, { force: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
async function downloadPlaylist(playlist: ScPlaylist) {
|
async function downloadPlaylist(playlist: ScPlaylist) {
|
||||||
|
@ -259,4 +267,19 @@ async function downloadPlaylist(playlist: ScPlaylist) {
|
||||||
spinnies.stopAll()
|
spinnies.stopAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
await downloadPlaylist(await fetchPlaylistByUrl('https://soundcloud.com/user-398958278/sets/l2grace'))
|
const url = process.argv[2] ?? await question('url > ')
|
||||||
|
if (!url.startsWith('https://soundcloud.com/')) {
|
||||||
|
console.error('url must start with https://soundcloud.com/')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url.match(/^https:\/\/soundcloud.com\/[a-z0-9-]+\/sets\//i)) {
|
||||||
|
await downloadPlaylist(await fetchPlaylistByUrl(url))
|
||||||
|
} else {
|
||||||
|
const track = await fetchTrackByUrl(url)
|
||||||
|
const filename = `${track.user.username}-${track.title}`
|
||||||
|
console.log('downloading track:', filename)
|
||||||
|
await downloadTrack(track, {
|
||||||
|
destination: join('assets/soundcloud-dl', sanitizeFilename(filename)),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue