Compare commits
5 Commits
5b35d2a5dc
...
b2163ef1b2
Author | SHA1 | Date | |
---|---|---|---|
b2163ef1b2 | |||
b1ddb5de38 | |||
d30b4b2dc7 | |||
85542d9c46 | |||
71a09daa2d |
.vscode
options.tspackage-lock.jsonpackage.jsonpublic/images/links
src
assets/styles
components
page/post
player
search
sidebar
content/friends
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -65,6 +65,7 @@
|
||||
"isodate",
|
||||
"jamo",
|
||||
"jian",
|
||||
"jiangcl",
|
||||
"jiasm",
|
||||
"jing",
|
||||
"jmoiron",
|
||||
@ -84,6 +85,7 @@
|
||||
"luoli",
|
||||
"luxon",
|
||||
"mboker",
|
||||
"metas",
|
||||
"microflash",
|
||||
"minagi",
|
||||
"miui",
|
||||
@ -101,6 +103,7 @@
|
||||
"opendal",
|
||||
"oppo",
|
||||
"opposans",
|
||||
"owspace",
|
||||
"pandiyan",
|
||||
"penheulim",
|
||||
"pilgi",
|
||||
|
@ -65,6 +65,7 @@ const Options = z
|
||||
post: z.number().default(6),
|
||||
comment: z.number().default(0),
|
||||
tag: z.number().default(20),
|
||||
calendar: z.boolean().default(false),
|
||||
}),
|
||||
comments: z.object({
|
||||
server: z.string().url().readonly(),
|
||||
@ -187,9 +188,10 @@ const options: z.input<typeof Options> = {
|
||||
},
|
||||
sidebar: {
|
||||
search: true,
|
||||
post: 6,
|
||||
comment: 6,
|
||||
tag: 20,
|
||||
post: 5,
|
||||
comment: 5,
|
||||
tag: 10,
|
||||
calendar: true,
|
||||
},
|
||||
comments: {
|
||||
server: 'https://comment.yufan.me',
|
||||
|
475
package-lock.json
generated
475
package-lock.json
generated
@ -12,12 +12,12 @@
|
||||
"@astrojs/mdx": "^3.1.9",
|
||||
"@astrojs/rss": "^4.0.9",
|
||||
"@zeabur/astro-adapter": "^1.0.6",
|
||||
"astro": "^4.16.12",
|
||||
"drizzle-orm": "^0.36.2",
|
||||
"astro": "^4.16.14",
|
||||
"drizzle-orm": "^0.36.4",
|
||||
"fuse.js": "^7.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"luxon": "^3.5.0",
|
||||
"marked": "^15.0.0",
|
||||
"marked": "^15.0.2",
|
||||
"pg": "^8.13.1",
|
||||
"qrcode-svg": "^1.1.0",
|
||||
"ultrahtml": "^1.5.3"
|
||||
@ -25,17 +25,17 @@
|
||||
"devDependencies": {
|
||||
"@astrojs/check": "^0.9.4",
|
||||
"@biomejs/biome": "^1.9.4",
|
||||
"@napi-rs/canvas": "^0.1.61",
|
||||
"@napi-rs/canvas": "^0.1.64",
|
||||
"@types/lodash": "^4.17.13",
|
||||
"@types/luxon": "^3.4.2",
|
||||
"@types/node": "^22.9.0",
|
||||
"@types/node": "^22.10.0",
|
||||
"@types/pg": "^8.11.10",
|
||||
"@types/qrcode-svg": "^1.1.5",
|
||||
"@types/unist": "^3.0.3",
|
||||
"aplayer": "^1.10.1",
|
||||
"astro-uploader": "^1.1.3",
|
||||
"bootstrap": "^5.3.3",
|
||||
"prettier": "^3.3.3",
|
||||
"prettier": "^3.4.0",
|
||||
"prettier-plugin-astro": "^0.14.1",
|
||||
"prettier-plugin-astro-organize-imports": "^0.4.11",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
@ -45,7 +45,7 @@
|
||||
"resize-sensor": "^0.0.6",
|
||||
"rimraf": "^6.0.1",
|
||||
"sharp": "^0.33.5",
|
||||
"typescript": "^5.6.3",
|
||||
"typescript": "^5.7.2",
|
||||
"unist-util-select": "^5.1.0"
|
||||
},
|
||||
"engines": {
|
||||
@ -1726,30 +1726,31 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.61.tgz",
|
||||
"integrity": "sha512-IJDok7OsGQ+Wd9QOWaOnFszw1mxNtJuynD+tBAhWMV6QJr7fWZx83eYS9xSl+3XR2tUa9oiHc44APcHBgdErmA==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.64.tgz",
|
||||
"integrity": "sha512-GjvaYebjPsnvGxBsUJxW2Bh1Di9kVifWZ+LLeQEI7se4SD5Ts7GRpdLXhKM05wA4GB9reClFLRd4lUoFMcTMxw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@napi-rs/canvas-android-arm64": "0.1.61",
|
||||
"@napi-rs/canvas-darwin-arm64": "0.1.61",
|
||||
"@napi-rs/canvas-darwin-x64": "0.1.61",
|
||||
"@napi-rs/canvas-linux-arm-gnueabihf": "0.1.61",
|
||||
"@napi-rs/canvas-linux-arm64-gnu": "0.1.61",
|
||||
"@napi-rs/canvas-linux-arm64-musl": "0.1.61",
|
||||
"@napi-rs/canvas-linux-x64-gnu": "0.1.61",
|
||||
"@napi-rs/canvas-linux-x64-musl": "0.1.61",
|
||||
"@napi-rs/canvas-win32-x64-msvc": "0.1.61"
|
||||
"@napi-rs/canvas-android-arm64": "0.1.64",
|
||||
"@napi-rs/canvas-darwin-arm64": "0.1.64",
|
||||
"@napi-rs/canvas-darwin-x64": "0.1.64",
|
||||
"@napi-rs/canvas-linux-arm-gnueabihf": "0.1.64",
|
||||
"@napi-rs/canvas-linux-arm64-gnu": "0.1.64",
|
||||
"@napi-rs/canvas-linux-arm64-musl": "0.1.64",
|
||||
"@napi-rs/canvas-linux-riscv64-gnu": "0.1.64",
|
||||
"@napi-rs/canvas-linux-x64-gnu": "0.1.64",
|
||||
"@napi-rs/canvas-linux-x64-musl": "0.1.64",
|
||||
"@napi-rs/canvas-win32-x64-msvc": "0.1.64"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-android-arm64": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.61.tgz",
|
||||
"integrity": "sha512-vnQobU4n2oTMXtDW0EHwdDIpUs4PqtAAK6vvYr9I9w984xrKe+NzFypmtGy/NkFrLoXn/i8WuCHAd1jLDGO3eA==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.64.tgz",
|
||||
"integrity": "sha512-kyS1b0lt3Nj6QDci8mHTjLA782OpUz5+yiDzsXeOOdqPgiKuDX6ff228gJcZ5/vEOf40rvxar9cYArsTeSuhqQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -1764,9 +1765,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-darwin-arm64": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.61.tgz",
|
||||
"integrity": "sha512-zH44Bs7SoaTMJ5TEuTwE4MQuijWNdvvleJacnclapKYSWywc4X5YResFmlDieHLESS0C0EwxpqyX0JT07IKKnQ==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.64.tgz",
|
||||
"integrity": "sha512-FiXkDoQcTaKWU5ZavEpyYTB+gwLtML/KMnYBi/t5gQGbEC5sOM16S4UtQNAb5zraam0/75wqFyVbgIt3H5JbWg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -1781,9 +1782,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-darwin-x64": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.61.tgz",
|
||||
"integrity": "sha512-pTNL/peBGHUZxECDXPw9IbL3aQdn+7UBjzqM1xo+L4rwBkFLewpst5aWsMDpYyjVGvKZHbNj3J1PMmlbu6XgzA==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.64.tgz",
|
||||
"integrity": "sha512-TobMkHfS93VBdZclq7V82tnbYT7+swKe4rhuRtIAi+HolIPhKkoZP6mUthl841Sfsuo0f2o6ZJxn+Y6DWmZ3Tg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -1798,9 +1799,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.61.tgz",
|
||||
"integrity": "sha512-sXrPJ+HvX3H58/uHP3QGe2Nafk1cUBfnErfQ8PtO464lEnhvCHdGsdml48dqhnQHErFkPYhHYobHDXfYT6Kq0w==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.64.tgz",
|
||||
"integrity": "sha512-Zs4+wQpLMjsIvC1sC0+HeYsMGrNtqkhgEMdIHEA5yWLaGmLlsiiqJ+ZZKasynHLklWFfV6ywkfhPTLs2n80tlQ==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@ -1815,9 +1816,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-arm64-gnu": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.61.tgz",
|
||||
"integrity": "sha512-HtLV2lWc3VIJ1XpXqoGJo596UCSYVbHIoFAO9Apj/BdNteBGUfUq1gDALrgM+WPhNM8XLMaU+HBphUVWRvgwBw==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.64.tgz",
|
||||
"integrity": "sha512-AaE2LU42iASw5PE8UdJ/GxAHfN2nKvnwgDL9rR+JzsN19fl4Av8R2VlnBBKVKGJekeqlAN+J+9oIFIGvKUpkpA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -1832,9 +1833,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-arm64-musl": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.61.tgz",
|
||||
"integrity": "sha512-W3jYZhDLghJauKQWl8lvA7ISElWzlkdUIM+bwQqlDzYtpD4wEgi/vICiMuUbJz73fKGgYwFLgKL6dF2H3bpVYg==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.64.tgz",
|
||||
"integrity": "sha512-EcScvyDfBaP44pfrRxDAmv/NKo7CAM34a5HVo6xSPAlLhLaOWTcMJrlZc14Sx105Q46u2myH1DcTtVsFO9XRfg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -1848,10 +1849,27 @@
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.64.tgz",
|
||||
"integrity": "sha512-XlqIGfNxV3JF4+mzn+BVxCsKeYGHhYnHo5m8COn012iEri0UXU65VSgMVbAa+78neu9bXoBWT0fUI2TrnV+u1Q==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-x64-gnu": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.61.tgz",
|
||||
"integrity": "sha512-tfMIZukLG+Q9mg+1LJFa852GhSlwg29pZaZ/UrLRdLRG0AJ1lckyHxOhNf9z+srMsEsryaQAIYHFIoOGYGhweA==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.64.tgz",
|
||||
"integrity": "sha512-TuVeg6ISOV/NmAYE7Gg5/lyE/SW3a2Unrd+3kTVcI76LHfZwZcdPaNaU9GKJLLv1O5/zMcgK/lJmYOpI+JU4NQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -1866,9 +1884,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-x64-musl": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.61.tgz",
|
||||
"integrity": "sha512-Go7zAENKdoDELf4X55pCbt4IrbrNOL+BarxO8A3MdDKF+isBioG4lNXpnAdswrDx8iJu+o1rzaGupQsF9YWxFg==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.64.tgz",
|
||||
"integrity": "sha512-JwfHdmSIRPlP+u8xglfxcqYfpjg6k/HROBKjeA5eSNCHUiSdH/HStyieAkMInyNjbqVL0FwTgLLNWW16fqTq8w==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -1883,9 +1901,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-win32-x64-msvc": {
|
||||
"version": "0.1.61",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.61.tgz",
|
||||
"integrity": "sha512-awGSMk4PlCV7SWC9ZxREkZvtiY+NWkramwYoQIEUJ+0KatLCbFnAaoxT7B7QE25ZUrjd1c3ZeV/Ae4Sggt276A==",
|
||||
"version": "0.1.64",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.64.tgz",
|
||||
"integrity": "sha512-iVrrc+Ob9yNJ6yPeMRympLOszg2JvV6DaSostBbAs714eaQ/+i5b6dTI0QRdb/JWpm95CQ7SM/kOPZJZv7Rfjw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -2102,9 +2120,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.26.0.tgz",
|
||||
"integrity": "sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz",
|
||||
"integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@ -2115,9 +2133,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm64": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.26.0.tgz",
|
||||
"integrity": "sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz",
|
||||
"integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -2128,9 +2146,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.26.0.tgz",
|
||||
"integrity": "sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz",
|
||||
"integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -2141,9 +2159,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.26.0.tgz",
|
||||
"integrity": "sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz",
|
||||
"integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -2154,9 +2172,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-freebsd-arm64": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.26.0.tgz",
|
||||
"integrity": "sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz",
|
||||
"integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -2167,9 +2185,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-freebsd-x64": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.26.0.tgz",
|
||||
"integrity": "sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz",
|
||||
"integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -2180,9 +2198,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.26.0.tgz",
|
||||
"integrity": "sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz",
|
||||
"integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@ -2193,9 +2211,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.26.0.tgz",
|
||||
"integrity": "sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz",
|
||||
"integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@ -2206,9 +2224,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.26.0.tgz",
|
||||
"integrity": "sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz",
|
||||
"integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -2219,9 +2237,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.26.0.tgz",
|
||||
"integrity": "sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz",
|
||||
"integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -2232,9 +2250,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.26.0.tgz",
|
||||
"integrity": "sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz",
|
||||
"integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
@ -2245,9 +2263,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.26.0.tgz",
|
||||
"integrity": "sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz",
|
||||
"integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
@ -2258,9 +2276,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.26.0.tgz",
|
||||
"integrity": "sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz",
|
||||
"integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
@ -2271,9 +2289,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.26.0.tgz",
|
||||
"integrity": "sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz",
|
||||
"integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -2284,9 +2302,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.26.0.tgz",
|
||||
"integrity": "sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz",
|
||||
"integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -2297,9 +2315,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.26.0.tgz",
|
||||
"integrity": "sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz",
|
||||
"integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -2310,9 +2328,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.26.0.tgz",
|
||||
"integrity": "sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz",
|
||||
"integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
@ -2323,9 +2341,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.26.0.tgz",
|
||||
"integrity": "sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz",
|
||||
"integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -2336,44 +2354,44 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@shikijs/core": {
|
||||
"version": "1.22.2",
|
||||
"resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.22.2.tgz",
|
||||
"integrity": "sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==",
|
||||
"version": "1.23.1",
|
||||
"resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.23.1.tgz",
|
||||
"integrity": "sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@shikijs/engine-javascript": "1.22.2",
|
||||
"@shikijs/engine-oniguruma": "1.22.2",
|
||||
"@shikijs/types": "1.22.2",
|
||||
"@shikijs/engine-javascript": "1.23.1",
|
||||
"@shikijs/engine-oniguruma": "1.23.1",
|
||||
"@shikijs/types": "1.23.1",
|
||||
"@shikijs/vscode-textmate": "^9.3.0",
|
||||
"@types/hast": "^3.0.4",
|
||||
"hast-util-to-html": "^9.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@shikijs/engine-javascript": {
|
||||
"version": "1.22.2",
|
||||
"resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.22.2.tgz",
|
||||
"integrity": "sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==",
|
||||
"version": "1.23.1",
|
||||
"resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.23.1.tgz",
|
||||
"integrity": "sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@shikijs/types": "1.22.2",
|
||||
"@shikijs/types": "1.23.1",
|
||||
"@shikijs/vscode-textmate": "^9.3.0",
|
||||
"oniguruma-to-js": "0.4.3"
|
||||
"oniguruma-to-es": "0.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@shikijs/engine-oniguruma": {
|
||||
"version": "1.22.2",
|
||||
"resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.22.2.tgz",
|
||||
"integrity": "sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==",
|
||||
"version": "1.23.1",
|
||||
"resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.23.1.tgz",
|
||||
"integrity": "sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@shikijs/types": "1.22.2",
|
||||
"@shikijs/types": "1.23.1",
|
||||
"@shikijs/vscode-textmate": "^9.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@shikijs/types": {
|
||||
"version": "1.22.2",
|
||||
"resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.22.2.tgz",
|
||||
"integrity": "sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==",
|
||||
"version": "1.23.1",
|
||||
"resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.23.1.tgz",
|
||||
"integrity": "sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@shikijs/vscode-textmate": "^9.3.0",
|
||||
@ -2520,13 +2538,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "22.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
|
||||
"integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
|
||||
"version": "22.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.0.tgz",
|
||||
"integrity": "sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.19.8"
|
||||
"undici-types": "~6.20.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pg": {
|
||||
@ -2670,9 +2688,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vscode/emmet-helper": {
|
||||
"version": "2.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.10.0.tgz",
|
||||
"integrity": "sha512-UHw1EQRgLbSYkyB73/7wR/IzV6zTBnbzEHuuU4Z6b95HKf2lmeTdGwBIwspWBSRrnIA1TI2x2tetBym6ErA7Gw==",
|
||||
"version": "2.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz",
|
||||
"integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@ -2889,9 +2907,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/astro": {
|
||||
"version": "4.16.12",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-4.16.12.tgz",
|
||||
"integrity": "sha512-NnFeIKhGW6MdXCQT2hRariUwfxqJUIRs6qKqaovaQkTojzxh2r1L8C49qanKc+huH9wK2C94VZB2T/tosyRl1A==",
|
||||
"version": "4.16.14",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-4.16.14.tgz",
|
||||
"integrity": "sha512-2IuLkIp4idyspugq+F52rHZyNqHHi2AdQzuKp3SGytg/YAm50dNeWhP/7l+enjgWZLloLq5xsH5gVQpoDFoyFg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@astrojs/compiler": "^2.10.3",
|
||||
@ -3263,9 +3281,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001680",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz",
|
||||
"integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==",
|
||||
"version": "1.0.30001684",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz",
|
||||
"integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
@ -3611,9 +3629,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.5",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
|
||||
"integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@ -3755,9 +3773,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/drizzle-orm": {
|
||||
"version": "0.36.2",
|
||||
"resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.36.2.tgz",
|
||||
"integrity": "sha512-uVwIdQMo+zwI09hCSNVR29tYn4Vw6F7gga/CsZgDJmTSGDdUdLo+Ur45Qc3gDK7oFTxD/eRANNnPgvPmRY+jSA==",
|
||||
"version": "0.36.4",
|
||||
"resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.36.4.tgz",
|
||||
"integrity": "sha512-1OZY3PXD7BR00Gl61UUOFihslDldfH4NFRH2MbP54Yxi0G/PKn4HfO65JYZ7c16DeP3SpM3Aw+VXVG9j6CRSXA==",
|
||||
"license": "Apache-2.0",
|
||||
"peerDependencies": {
|
||||
"@aws-sdk/client-rds-data": ">=3",
|
||||
@ -3765,7 +3783,7 @@
|
||||
"@electric-sql/pglite": ">=0.2.0",
|
||||
"@libsql/client": ">=0.10.0",
|
||||
"@libsql/client-wasm": ">=0.10.0",
|
||||
"@neondatabase/serverless": ">=0.1",
|
||||
"@neondatabase/serverless": ">=0.10.0",
|
||||
"@op-engineering/op-sqlite": ">=2",
|
||||
"@opentelemetry/api": "^1.4.1",
|
||||
"@planetscale/database": ">=1",
|
||||
@ -3896,9 +3914,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.5.59",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.59.tgz",
|
||||
"integrity": "sha512-faAXB6+gEbC8FsiRdpOXgOe4snP49YwjiXynEB8Mp7sUx80W5eN+BnnBHJ/F7eIeLzs+QBfDD40bJMm97oEFcw==",
|
||||
"version": "1.5.65",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz",
|
||||
"integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/emmet": {
|
||||
@ -3924,6 +3942,12 @@
|
||||
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/emoji-regex-xs": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
|
||||
"integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
||||
@ -4561,15 +4585,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-from-parse5": {
|
||||
"version": "8.0.1",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz",
|
||||
"integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==",
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz",
|
||||
"integrity": "sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hast": "^3.0.0",
|
||||
"@types/unist": "^3.0.0",
|
||||
"devlop": "^1.0.0",
|
||||
"hastscript": "^8.0.0",
|
||||
"hastscript": "^9.0.0",
|
||||
"property-information": "^6.0.0",
|
||||
"vfile": "^6.0.0",
|
||||
"vfile-location": "^5.0.0",
|
||||
@ -4801,9 +4825,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/hastscript": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz",
|
||||
"integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==",
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz",
|
||||
"integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hast": "^3.0.0",
|
||||
@ -5290,9 +5314,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/magic-string": {
|
||||
"version": "0.30.12",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
|
||||
"integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
|
||||
"version": "0.30.14",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz",
|
||||
"integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0"
|
||||
@ -5356,9 +5380,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/marked": {
|
||||
"version": "15.0.0",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-15.0.0.tgz",
|
||||
"integrity": "sha512-0mouKmBROJv/WSHJBPZZyYofUgawMChnD5je/g+aOBXsHDjb/IsnTQj7mnhQZu+qPJmRQ0ecX3mLGEUm3BgwYA==",
|
||||
"version": "15.0.2",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-15.0.2.tgz",
|
||||
"integrity": "sha512-85RUkoYKIVB21PbMKrnD6aCl9ws+XKEyhJNMbLn206NyD3jbBo7Ec7Wi4Jrsn4dV1a2ng7K/jfkmIN0DNoS41w==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"marked": "bin/marked.js"
|
||||
@ -6344,9 +6368,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/micromark-util-subtokenize": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.2.tgz",
|
||||
"integrity": "sha512-xKxhkB62vwHUuuxHe9Xqty3UaAsizV2YKq5OV344u3hFBbf8zIYrhYOWhAQb94MtMPkjTOzzjJ/hid9/dR5vFA==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz",
|
||||
"integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "GitHub Sponsors",
|
||||
@ -6585,9 +6609,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/node-gyp-build": {
|
||||
"version": "4.8.3",
|
||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.3.tgz",
|
||||
"integrity": "sha512-EMS95CMJzdoSKoIiXo8pxKoL8DYxwIZXYlLmgPb8KUv794abpnLK6ynsCAWNliOjREKruYKdzbh76HHYUHX7nw==",
|
||||
"version": "4.8.4",
|
||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
|
||||
"integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"node-gyp-build": "bin.js",
|
||||
@ -6682,16 +6706,15 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/oniguruma-to-js": {
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/oniguruma-to-js/-/oniguruma-to-js-0.4.3.tgz",
|
||||
"integrity": "sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==",
|
||||
"node_modules/oniguruma-to-es": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.4.1.tgz",
|
||||
"integrity": "sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"regex": "^4.3.2"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
"emoji-regex-xs": "^1.0.0",
|
||||
"regex": "^5.0.0",
|
||||
"regex-recursion": "^4.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/opendal": {
|
||||
@ -7253,9 +7276,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "3.3.3",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
|
||||
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.0.tgz",
|
||||
"integrity": "sha512-/OXNZcLyWkfo13ofOW5M7SLh+k5pnIs07owXK2teFpnfaOEcycnSy7HQxldaVX1ZP/7Q8oO1eDuQJNwbomQq5Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
@ -7494,9 +7517,27 @@
|
||||
}
|
||||
},
|
||||
"node_modules/regex": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/regex/-/regex-4.4.0.tgz",
|
||||
"integrity": "sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==",
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/regex/-/regex-5.0.2.tgz",
|
||||
"integrity": "sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"regex-utilities": "^2.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/regex-recursion": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-4.2.1.tgz",
|
||||
"integrity": "sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"regex-utilities": "^2.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/regex-utilities": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
|
||||
"integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/rehype": {
|
||||
@ -7991,9 +8032,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "4.26.0",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.26.0.tgz",
|
||||
"integrity": "sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==",
|
||||
"version": "4.27.4",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz",
|
||||
"integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/estree": "1.0.6"
|
||||
@ -8006,24 +8047,24 @@
|
||||
"npm": ">=8.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@rollup/rollup-android-arm-eabi": "4.26.0",
|
||||
"@rollup/rollup-android-arm64": "4.26.0",
|
||||
"@rollup/rollup-darwin-arm64": "4.26.0",
|
||||
"@rollup/rollup-darwin-x64": "4.26.0",
|
||||
"@rollup/rollup-freebsd-arm64": "4.26.0",
|
||||
"@rollup/rollup-freebsd-x64": "4.26.0",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.26.0",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.26.0",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.26.0",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.26.0",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.26.0",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.26.0",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.26.0",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.26.0",
|
||||
"@rollup/rollup-linux-x64-musl": "4.26.0",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.26.0",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.26.0",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.26.0",
|
||||
"@rollup/rollup-android-arm-eabi": "4.27.4",
|
||||
"@rollup/rollup-android-arm64": "4.27.4",
|
||||
"@rollup/rollup-darwin-arm64": "4.27.4",
|
||||
"@rollup/rollup-darwin-x64": "4.27.4",
|
||||
"@rollup/rollup-freebsd-arm64": "4.27.4",
|
||||
"@rollup/rollup-freebsd-x64": "4.27.4",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.27.4",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.27.4",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.27.4",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.27.4",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.27.4",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.27.4",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.27.4",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.27.4",
|
||||
"@rollup/rollup-linux-x64-musl": "4.27.4",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.27.4",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.27.4",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.27.4",
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
@ -8188,15 +8229,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/shiki": {
|
||||
"version": "1.22.2",
|
||||
"resolved": "https://registry.npmjs.org/shiki/-/shiki-1.22.2.tgz",
|
||||
"integrity": "sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==",
|
||||
"version": "1.23.1",
|
||||
"resolved": "https://registry.npmjs.org/shiki/-/shiki-1.23.1.tgz",
|
||||
"integrity": "sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@shikijs/core": "1.22.2",
|
||||
"@shikijs/engine-javascript": "1.22.2",
|
||||
"@shikijs/engine-oniguruma": "1.22.2",
|
||||
"@shikijs/types": "1.22.2",
|
||||
"@shikijs/core": "1.23.1",
|
||||
"@shikijs/engine-javascript": "1.23.1",
|
||||
"@shikijs/engine-oniguruma": "1.23.1",
|
||||
"@shikijs/types": "1.23.1",
|
||||
"@shikijs/vscode-textmate": "^9.3.0",
|
||||
"@types/hast": "^3.0.4"
|
||||
}
|
||||
@ -8540,9 +8581,9 @@
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/type-fest": {
|
||||
"version": "4.26.1",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz",
|
||||
"integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==",
|
||||
"version": "4.28.0",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.28.0.tgz",
|
||||
"integrity": "sha512-jXMwges/FVbFRe5lTMJZVEZCrO9kI9c8k0PA/z7nF3bo0JSCCLysvokFjNPIUK/itEMas10MQM+AiHoHt/T/XA==",
|
||||
"license": "(MIT OR CC0-1.0)",
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
@ -8559,9 +8600,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.6.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
|
||||
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
|
||||
"integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
@ -8588,9 +8629,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"version": "6.20.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
|
||||
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
|
||||
"devOptional": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
@ -9407,9 +9448,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/xxhash-wasm": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz",
|
||||
"integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==",
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
|
||||
"integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/y18n": {
|
||||
@ -9429,9 +9470,9 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
|
||||
"integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
|
||||
"integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
|
16
package.json
16
package.json
@ -45,12 +45,12 @@
|
||||
"@astrojs/mdx": "^3.1.9",
|
||||
"@astrojs/rss": "^4.0.9",
|
||||
"@zeabur/astro-adapter": "^1.0.6",
|
||||
"astro": "^4.16.12",
|
||||
"drizzle-orm": "^0.36.2",
|
||||
"astro": "^4.16.14",
|
||||
"drizzle-orm": "^0.36.4",
|
||||
"fuse.js": "^7.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"luxon": "^3.5.0",
|
||||
"marked": "^15.0.0",
|
||||
"marked": "^15.0.2",
|
||||
"pg": "^8.13.1",
|
||||
"qrcode-svg": "^1.1.0",
|
||||
"ultrahtml": "^1.5.3"
|
||||
@ -58,17 +58,17 @@
|
||||
"devDependencies": {
|
||||
"@astrojs/check": "^0.9.4",
|
||||
"@biomejs/biome": "^1.9.4",
|
||||
"@napi-rs/canvas": "^0.1.61",
|
||||
"@napi-rs/canvas": "^0.1.64",
|
||||
"@types/lodash": "^4.17.13",
|
||||
"@types/luxon": "^3.4.2",
|
||||
"@types/node": "^22.9.0",
|
||||
"@types/node": "^22.10.0",
|
||||
"@types/pg": "^8.11.10",
|
||||
"@types/qrcode-svg": "^1.1.5",
|
||||
"@types/unist": "^3.0.3",
|
||||
"aplayer": "^1.10.1",
|
||||
"astro-uploader": "^1.1.3",
|
||||
"bootstrap": "^5.3.3",
|
||||
"prettier": "^3.3.3",
|
||||
"prettier": "^3.4.0",
|
||||
"prettier-plugin-astro": "^0.14.1",
|
||||
"prettier-plugin-astro-organize-imports": "^0.4.11",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
@ -78,10 +78,10 @@
|
||||
"resize-sensor": "^0.0.6",
|
||||
"rimraf": "^6.0.1",
|
||||
"sharp": "^0.33.5",
|
||||
"typescript": "^5.6.3",
|
||||
"typescript": "^5.7.2",
|
||||
"unist-util-select": "^5.1.0"
|
||||
},
|
||||
"packageManager": "npm@10.9.0",
|
||||
"packageManager": "npm@10.9.1",
|
||||
"engines": {
|
||||
"node": "22.11.0"
|
||||
}
|
||||
|
BIN
public/images/links/jiangcl.com.jpg
Normal file
BIN
public/images/links/jiangcl.com.jpg
Normal file
Binary file not shown.
After ![]() (image error) Size: 36 KiB |
@ -2740,11 +2740,11 @@ a:hover .overlay {
|
||||
search style
|
||||
--------------------------------------------------------------*/
|
||||
|
||||
.widget_search label {
|
||||
.widget-search label {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.widget_search .search-field {
|
||||
.widget-search .search-field {
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 100%;
|
||||
@ -2772,46 +2772,46 @@ a:hover .overlay {
|
||||
-webkit-box-shadow 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.widget_search .search-field:hover,
|
||||
.widget_search .search-field:focus {
|
||||
.widget-search .search-field:hover,
|
||||
.widget-search .search-field:focus {
|
||||
border-color: var(--border-muted);
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.widget_search .screen-reader-text,
|
||||
.widget_search .search-submit {
|
||||
.widget-search .screen-reader-text,
|
||||
.widget-search .search-submit {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
widget_recent_comments style
|
||||
widget_recent_entries style
|
||||
widget-recent-comments style
|
||||
widget-recent-entries style
|
||||
--------------------------------------------------------------*/
|
||||
|
||||
.widget_recent_entries ul,
|
||||
.widget_recent_comments ul {
|
||||
.widget-recent-entries ul,
|
||||
.widget-recent-comments ul {
|
||||
padding-left: 1.25rem;
|
||||
}
|
||||
|
||||
.widget_recent_entries ul li,
|
||||
.widget_recent_comments ul li {
|
||||
.widget-recent-entries ul li,
|
||||
.widget-recent-comments ul li {
|
||||
margin-bottom: 0.75rem;
|
||||
list-style-type: circle;
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.widget_recent_entries ul li a {
|
||||
.widget-recent-entries ul li a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.widget_recent_entries ul li span {
|
||||
.widget-recent-entries ul li span {
|
||||
color: var(--color-muted);
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.widget_recent_comments ul li span {
|
||||
.widget-recent-comments ul li span {
|
||||
font-weight: 600;
|
||||
color: var(--color-dark);
|
||||
margin-right: 5px;
|
||||
@ -2850,7 +2850,7 @@ a:hover .overlay {
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
widget_recent_comments style
|
||||
widget-recent-comments style
|
||||
--------------------------------------------------------------*/
|
||||
|
||||
.widget_nav_menu ul li {
|
||||
|
@ -3,31 +3,31 @@
|
||||
*/
|
||||
@font-face {
|
||||
font-family: 'OPPOSans';
|
||||
src: url(opposans.ttf) format('truetype');
|
||||
src: url(https://cdn.yufan.me/opposans/opposans.ttf) format('truetype');
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'OPPOSans';
|
||||
src: url(opposans.ttf) format('truetype');
|
||||
src: url(https://cdn.yufan.me/opposans/opposans.ttf) format('truetype');
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'OPPOSans';
|
||||
src: url(opposans.ttf) format('truetype');
|
||||
src: url(https://cdn.yufan.me/opposans/opposans.ttf) format('truetype');
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'OPPOSans';
|
||||
src: url(opposans.ttf) format('truetype');
|
||||
src: url(https://cdn.yufan.me/opposans/opposans.ttf) format('truetype');
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'OPPOSans';
|
||||
src: url(opposans.ttf) format('truetype');
|
||||
src: url(https://cdn.yufan.me/opposans/opposans.ttf) format('truetype');
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ const historicalPosts = (): Post[] => {
|
||||
const now = DateTime.now().setZone(options.settings.timeZone);
|
||||
const radical = now.month + now.day;
|
||||
|
||||
return [posts[offset + radical - 1], posts[offset + radical + 43 - 1], posts[offset + radical + 43 * 2 - 1]];
|
||||
return [posts[offset + radical + 43 * 2 - 1], posts[offset + radical + 43 - 1], posts[offset + radical - 1]];
|
||||
};
|
||||
const featurePosts = options.settings.post.feature ?? [];
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
const net_ease_anonymous_token =
|
||||
'de91e1f8119d32e01cc73efcb82c0a30c9137e8d4f88dbf5e3d7bf3f28998f21add2bc8204eeee5e56c0bbb8743574b46ca2c10c35dc172199bef9bf4d60ecdeab066bb4dc737d1c3324751bcc9aaf44c3061cd18d77b7a0';
|
||||
|
||||
export { net_ease_anonymous_token };
|
726
src/components/player/netease/config.ts
Normal file
726
src/components/player/netease/config.ts
Normal file
@ -0,0 +1,726 @@
|
||||
// An request token which is decoded from the Netease Android Player.
|
||||
const neteaseAnonymousToken =
|
||||
'de91e1f8119d32e01cc73efcb82c0a30c9137e8d4f88dbf5e3d7bf3f28998f21add2bc8204eeee5e56c0bbb8743574b46ca2c10c35dc172199bef9bf4d60ecdeab066bb4dc737d1c3324751bcc9aaf44c3061cd18d77b7a0';
|
||||
|
||||
// A selected IP set which locates in China.
|
||||
const chineseIPs = [
|
||||
'58.14.0.0',
|
||||
'58.16.0.0',
|
||||
'58.24.0.0',
|
||||
'58.30.0.0',
|
||||
'58.32.0.0',
|
||||
'58.66.0.0',
|
||||
'58.68.128.0',
|
||||
'58.82.0.0',
|
||||
'58.87.64.0',
|
||||
'58.99.128.0',
|
||||
'58.100.0.0',
|
||||
'58.116.0.0',
|
||||
'58.128.0.0',
|
||||
'58.144.0.0',
|
||||
'58.154.0.0',
|
||||
'58.192.0.0',
|
||||
'58.240.0.0',
|
||||
'59.32.0.0',
|
||||
'59.64.0.0',
|
||||
'59.80.0.0',
|
||||
'59.107.0.0',
|
||||
'59.108.0.0',
|
||||
'59.151.0.0',
|
||||
'59.155.0.0',
|
||||
'59.172.0.0',
|
||||
'59.191.0.0',
|
||||
'59.191.240.0',
|
||||
'59.192.0.0',
|
||||
'60.0.0.0',
|
||||
'60.55.0.0',
|
||||
'60.63.0.0',
|
||||
'60.160.0.0',
|
||||
'60.194.0.0',
|
||||
'60.200.0.0',
|
||||
'60.208.0.0',
|
||||
'60.232.0.0',
|
||||
'60.235.0.0',
|
||||
'60.245.128.0',
|
||||
'60.247.0.0',
|
||||
'60.252.0.0',
|
||||
'60.253.128.0',
|
||||
'60.255.0.0',
|
||||
'61.4.80.0',
|
||||
'61.4.176.0',
|
||||
'61.8.160.0',
|
||||
'61.28.0.0',
|
||||
'61.29.128.0',
|
||||
'61.45.128.0',
|
||||
'61.47.128.0',
|
||||
'61.48.0.0',
|
||||
'61.87.192.0',
|
||||
'61.128.0.0',
|
||||
'61.232.0.0',
|
||||
'61.236.0.0',
|
||||
'61.240.0.0',
|
||||
'114.28.0.0',
|
||||
'114.54.0.0',
|
||||
'114.60.0.0',
|
||||
'114.64.0.0',
|
||||
'114.68.0.0',
|
||||
'114.80.0.0',
|
||||
'116.1.0.0',
|
||||
'116.2.0.0',
|
||||
'116.4.0.0',
|
||||
'116.8.0.0',
|
||||
'116.13.0.0',
|
||||
'116.16.0.0',
|
||||
'116.52.0.0',
|
||||
'116.56.0.0',
|
||||
'116.58.128.0',
|
||||
'116.58.208.0',
|
||||
'116.60.0.0',
|
||||
'116.66.0.0',
|
||||
'116.69.0.0',
|
||||
'116.70.0.0',
|
||||
'116.76.0.0',
|
||||
'116.89.144.0',
|
||||
'116.90.184.0',
|
||||
'116.95.0.0',
|
||||
'116.112.0.0',
|
||||
'116.116.0.0',
|
||||
'116.128.0.0',
|
||||
'116.192.0.0',
|
||||
'116.193.16.0',
|
||||
'116.193.32.0',
|
||||
'116.194.0.0',
|
||||
'116.196.0.0',
|
||||
'116.198.0.0',
|
||||
'116.199.0.0',
|
||||
'116.199.128.0',
|
||||
'116.204.0.0',
|
||||
'116.207.0.0',
|
||||
'116.208.0.0',
|
||||
'116.212.160.0',
|
||||
'116.213.64.0',
|
||||
'116.213.128.0',
|
||||
'116.214.32.0',
|
||||
'116.214.64.0',
|
||||
'116.214.128.0',
|
||||
'116.215.0.0',
|
||||
'116.216.0.0',
|
||||
'116.224.0.0',
|
||||
'116.242.0.0',
|
||||
'116.244.0.0',
|
||||
'116.248.0.0',
|
||||
'116.252.0.0',
|
||||
'116.254.128.0',
|
||||
'116.255.128.0',
|
||||
'117.8.0.0',
|
||||
'117.21.0.0',
|
||||
'117.22.0.0',
|
||||
'117.24.0.0',
|
||||
'117.32.0.0',
|
||||
'117.40.0.0',
|
||||
'117.44.0.0',
|
||||
'117.48.0.0',
|
||||
'117.53.48.0',
|
||||
'117.53.176.0',
|
||||
'117.57.0.0',
|
||||
'117.58.0.0',
|
||||
'117.59.0.0',
|
||||
'117.60.0.0',
|
||||
'117.64.0.0',
|
||||
'117.72.0.0',
|
||||
'117.74.64.0',
|
||||
'117.74.128.0',
|
||||
'117.75.0.0',
|
||||
'117.76.0.0',
|
||||
'117.80.0.0',
|
||||
'117.100.0.0',
|
||||
'117.103.16.0',
|
||||
'117.103.128.0',
|
||||
'117.106.0.0',
|
||||
'117.112.0.0',
|
||||
'117.120.64.0',
|
||||
'117.120.128.0',
|
||||
'117.121.0.0',
|
||||
'117.121.128.0',
|
||||
'117.121.192.0',
|
||||
'117.122.128.0',
|
||||
'117.124.0.0',
|
||||
'117.128.0.0',
|
||||
'118.24.0.0',
|
||||
'118.64.0.0',
|
||||
'118.66.0.0',
|
||||
'118.67.112.0',
|
||||
'118.72.0.0',
|
||||
'118.80.0.0',
|
||||
'118.84.0.0',
|
||||
'118.88.32.0',
|
||||
'118.88.64.0',
|
||||
'118.88.128.0',
|
||||
'118.89.0.0',
|
||||
'118.91.240.0',
|
||||
'118.102.16.0',
|
||||
'118.112.0.0',
|
||||
'118.120.0.0',
|
||||
'118.124.0.0',
|
||||
'118.126.0.0',
|
||||
'118.132.0.0',
|
||||
'118.144.0.0',
|
||||
'118.178.0.0',
|
||||
'118.180.0.0',
|
||||
'118.184.0.0',
|
||||
'118.192.0.0',
|
||||
'118.212.0.0',
|
||||
'118.224.0.0',
|
||||
'118.228.0.0',
|
||||
'118.230.0.0',
|
||||
'118.239.0.0',
|
||||
'118.242.0.0',
|
||||
'118.244.0.0',
|
||||
'118.248.0.0',
|
||||
'119.0.0.0',
|
||||
'119.2.0.0',
|
||||
'119.2.128.0',
|
||||
'119.3.0.0',
|
||||
'119.4.0.0',
|
||||
'119.8.0.0',
|
||||
'119.10.0.0',
|
||||
'119.15.136.0',
|
||||
'119.16.0.0',
|
||||
'119.18.192.0',
|
||||
'119.18.208.0',
|
||||
'119.18.224.0',
|
||||
'119.19.0.0',
|
||||
'119.20.0.0',
|
||||
'119.27.64.0',
|
||||
'119.27.160.0',
|
||||
'119.27.192.0',
|
||||
'119.28.0.0',
|
||||
'119.30.48.0',
|
||||
'119.31.192.0',
|
||||
'119.32.0.0',
|
||||
'119.40.0.0',
|
||||
'119.40.64.0',
|
||||
'119.40.128.0',
|
||||
'119.41.0.0',
|
||||
'119.42.0.0',
|
||||
'119.42.136.0',
|
||||
'119.42.224.0',
|
||||
'119.44.0.0',
|
||||
'119.48.0.0',
|
||||
'119.57.0.0',
|
||||
'119.58.0.0',
|
||||
'119.59.128.0',
|
||||
'119.60.0.0',
|
||||
'119.62.0.0',
|
||||
'119.63.32.0',
|
||||
'119.75.208.0',
|
||||
'119.78.0.0',
|
||||
'119.80.0.0',
|
||||
'119.84.0.0',
|
||||
'119.88.0.0',
|
||||
'119.96.0.0',
|
||||
'119.108.0.0',
|
||||
'119.112.0.0',
|
||||
'119.128.0.0',
|
||||
'119.144.0.0',
|
||||
'119.148.160.0',
|
||||
'119.161.128.0',
|
||||
'119.162.0.0',
|
||||
'119.164.0.0',
|
||||
'119.176.0.0',
|
||||
'119.232.0.0',
|
||||
'119.235.128.0',
|
||||
'119.248.0.0',
|
||||
'119.253.0.0',
|
||||
'119.254.0.0',
|
||||
'120.0.0.0',
|
||||
'120.24.0.0',
|
||||
'120.30.0.0',
|
||||
'120.32.0.0',
|
||||
'120.48.0.0',
|
||||
'120.52.0.0',
|
||||
'120.64.0.0',
|
||||
'120.72.32.0',
|
||||
'120.72.128.0',
|
||||
'120.76.0.0',
|
||||
'120.80.0.0',
|
||||
'120.90.0.0',
|
||||
'120.92.0.0',
|
||||
'120.94.0.0',
|
||||
'120.128.0.0',
|
||||
'120.136.128.0',
|
||||
'120.137.0.0',
|
||||
'120.192.0.0',
|
||||
'121.0.16.0',
|
||||
'121.4.0.0',
|
||||
'121.8.0.0',
|
||||
'121.16.0.0',
|
||||
'121.32.0.0',
|
||||
'121.40.0.0',
|
||||
'121.46.0.0',
|
||||
'121.48.0.0',
|
||||
'121.51.0.0',
|
||||
'121.52.160.0',
|
||||
'121.52.208.0',
|
||||
'121.52.224.0',
|
||||
'121.55.0.0',
|
||||
'121.56.0.0',
|
||||
'121.58.0.0',
|
||||
'121.58.144.0',
|
||||
'121.59.0.0',
|
||||
'121.60.0.0',
|
||||
'121.68.0.0',
|
||||
'121.76.0.0',
|
||||
'121.79.128.0',
|
||||
'121.89.0.0',
|
||||
'121.100.128.0',
|
||||
'121.101.208.0',
|
||||
'121.192.0.0',
|
||||
'121.201.0.0',
|
||||
'121.204.0.0',
|
||||
'121.224.0.0',
|
||||
'121.248.0.0',
|
||||
'121.255.0.0',
|
||||
'122.0.64.0',
|
||||
'122.0.128.0',
|
||||
'122.4.0.0',
|
||||
'122.8.0.0',
|
||||
'122.48.0.0',
|
||||
'122.49.0.0',
|
||||
'122.51.0.0',
|
||||
'122.64.0.0',
|
||||
'122.96.0.0',
|
||||
'122.102.0.0',
|
||||
'122.102.64.0',
|
||||
'122.112.0.0',
|
||||
'122.119.0.0',
|
||||
'122.136.0.0',
|
||||
'122.144.128.0',
|
||||
'122.152.192.0',
|
||||
'122.156.0.0',
|
||||
'122.192.0.0',
|
||||
'122.198.0.0',
|
||||
'122.200.64.0',
|
||||
'122.204.0.0',
|
||||
'122.224.0.0',
|
||||
'122.240.0.0',
|
||||
'122.248.48.0',
|
||||
'123.0.128.0',
|
||||
'123.4.0.0',
|
||||
'123.8.0.0',
|
||||
'123.49.128.0',
|
||||
'123.52.0.0',
|
||||
'123.56.0.0',
|
||||
'123.64.0.0',
|
||||
'123.96.0.0',
|
||||
'123.98.0.0',
|
||||
'123.99.128.0',
|
||||
'123.100.0.0',
|
||||
'123.101.0.0',
|
||||
'123.103.0.0',
|
||||
'123.108.128.0',
|
||||
'123.108.208.0',
|
||||
'123.112.0.0',
|
||||
'123.128.0.0',
|
||||
'123.136.80.0',
|
||||
'123.137.0.0',
|
||||
'123.138.0.0',
|
||||
'123.144.0.0',
|
||||
'123.160.0.0',
|
||||
'123.176.80.0',
|
||||
'123.177.0.0',
|
||||
'123.178.0.0',
|
||||
'123.180.0.0',
|
||||
'123.184.0.0',
|
||||
'123.196.0.0',
|
||||
'123.199.128.0',
|
||||
'123.206.0.0',
|
||||
'123.232.0.0',
|
||||
'123.242.0.0',
|
||||
'123.244.0.0',
|
||||
'123.249.0.0',
|
||||
'123.253.0.0',
|
||||
'124.6.64.0',
|
||||
'124.14.0.0',
|
||||
'124.16.0.0',
|
||||
'124.20.0.0',
|
||||
'124.28.192.0',
|
||||
'124.29.0.0',
|
||||
'124.31.0.0',
|
||||
'124.40.112.0',
|
||||
'124.40.128.0',
|
||||
'124.42.0.0',
|
||||
'124.47.0.0',
|
||||
'124.64.0.0',
|
||||
'124.66.0.0',
|
||||
'124.67.0.0',
|
||||
'124.68.0.0',
|
||||
'124.72.0.0',
|
||||
'124.88.0.0',
|
||||
'124.108.8.0',
|
||||
'124.108.40.0',
|
||||
'124.112.0.0',
|
||||
'124.126.0.0',
|
||||
'124.128.0.0',
|
||||
'124.147.128.0',
|
||||
'124.156.0.0',
|
||||
'124.160.0.0',
|
||||
'124.172.0.0',
|
||||
'124.192.0.0',
|
||||
'124.196.0.0',
|
||||
'124.200.0.0',
|
||||
'124.220.0.0',
|
||||
'124.224.0.0',
|
||||
'124.240.0.0',
|
||||
'124.240.128.0',
|
||||
'124.242.0.0',
|
||||
'124.243.192.0',
|
||||
'124.248.0.0',
|
||||
'124.249.0.0',
|
||||
'124.250.0.0',
|
||||
'124.254.0.0',
|
||||
'125.31.192.0',
|
||||
'125.32.0.0',
|
||||
'125.58.128.0',
|
||||
'125.61.128.0',
|
||||
'125.62.0.0',
|
||||
'125.64.0.0',
|
||||
'125.96.0.0',
|
||||
'125.98.0.0',
|
||||
'125.104.0.0',
|
||||
'125.112.0.0',
|
||||
'125.169.0.0',
|
||||
'125.171.0.0',
|
||||
'125.208.0.0',
|
||||
'125.210.0.0',
|
||||
'125.213.0.0',
|
||||
'125.214.96.0',
|
||||
'125.215.0.0',
|
||||
'125.216.0.0',
|
||||
'125.254.128.0',
|
||||
'134.196.0.0',
|
||||
'159.226.0.0',
|
||||
'161.207.0.0',
|
||||
'162.105.0.0',
|
||||
'166.111.0.0',
|
||||
'167.139.0.0',
|
||||
'168.160.0.0',
|
||||
'169.211.1.0',
|
||||
'192.83.122.0',
|
||||
'192.83.169.0',
|
||||
'192.124.154.0',
|
||||
'192.188.170.0',
|
||||
'198.17.7.0',
|
||||
'202.0.110.0',
|
||||
'202.0.176.0',
|
||||
'202.4.128.0',
|
||||
'202.4.252.0',
|
||||
'202.8.128.0',
|
||||
'202.10.64.0',
|
||||
'202.14.88.0',
|
||||
'202.14.235.0',
|
||||
'202.14.236.0',
|
||||
'202.14.238.0',
|
||||
'202.20.120.0',
|
||||
'202.22.248.0',
|
||||
'202.38.0.0',
|
||||
'202.38.64.0',
|
||||
'202.38.128.0',
|
||||
'202.38.136.0',
|
||||
'202.38.138.0',
|
||||
'202.38.140.0',
|
||||
'202.38.146.0',
|
||||
'202.38.149.0',
|
||||
'202.38.150.0',
|
||||
'202.38.152.0',
|
||||
'202.38.156.0',
|
||||
'202.38.158.0',
|
||||
'202.38.160.0',
|
||||
'202.38.164.0',
|
||||
'202.38.168.0',
|
||||
'202.38.176.0',
|
||||
'202.38.184.0',
|
||||
'202.38.192.0',
|
||||
'202.41.152.0',
|
||||
'202.41.240.0',
|
||||
'202.43.144.0',
|
||||
'202.46.32.0',
|
||||
'202.46.224.0',
|
||||
'202.60.112.0',
|
||||
'202.63.248.0',
|
||||
'202.69.4.0',
|
||||
'202.69.16.0',
|
||||
'202.70.0.0',
|
||||
'202.74.8.0',
|
||||
'202.75.208.0',
|
||||
'202.85.208.0',
|
||||
'202.90.0.0',
|
||||
'202.90.224.0',
|
||||
'202.90.252.0',
|
||||
'202.91.0.0',
|
||||
'202.91.128.0',
|
||||
'202.91.176.0',
|
||||
'202.91.224.0',
|
||||
'202.92.0.0',
|
||||
'202.92.252.0',
|
||||
'202.93.0.0',
|
||||
'202.93.252.0',
|
||||
'202.95.0.0',
|
||||
'202.95.252.0',
|
||||
'202.96.0.0',
|
||||
'202.112.0.0',
|
||||
'202.120.0.0',
|
||||
'202.122.0.0',
|
||||
'202.122.32.0',
|
||||
'202.122.64.0',
|
||||
'202.122.112.0',
|
||||
'202.122.128.0',
|
||||
'202.123.96.0',
|
||||
'202.124.24.0',
|
||||
'202.125.176.0',
|
||||
'202.127.0.0',
|
||||
'202.127.12.0',
|
||||
'202.127.16.0',
|
||||
'202.127.40.0',
|
||||
'202.127.48.0',
|
||||
'202.127.112.0',
|
||||
'202.127.128.0',
|
||||
'202.127.160.0',
|
||||
'202.127.192.0',
|
||||
'202.127.208.0',
|
||||
'202.127.212.0',
|
||||
'202.127.216.0',
|
||||
'202.127.224.0',
|
||||
'202.130.0.0',
|
||||
'202.130.224.0',
|
||||
'202.131.16.0',
|
||||
'202.131.48.0',
|
||||
'202.131.208.0',
|
||||
'202.136.48.0',
|
||||
'202.136.208.0',
|
||||
'202.136.224.0',
|
||||
'202.141.160.0',
|
||||
'202.142.16.0',
|
||||
'202.143.16.0',
|
||||
'202.148.96.0',
|
||||
'202.149.160.0',
|
||||
'202.149.224.0',
|
||||
'202.150.16.0',
|
||||
'202.152.176.0',
|
||||
'202.153.48.0',
|
||||
'202.158.160.0',
|
||||
'202.160.176.0',
|
||||
'202.164.0.0',
|
||||
'202.164.25.0',
|
||||
'202.165.96.0',
|
||||
'202.165.176.0',
|
||||
'202.165.208.0',
|
||||
'202.168.160.0',
|
||||
'202.170.128.0',
|
||||
'202.170.216.0',
|
||||
'202.173.8.0',
|
||||
'202.173.224.0',
|
||||
'202.179.240.0',
|
||||
'202.180.128.0',
|
||||
'202.181.112.0',
|
||||
'202.189.80.0',
|
||||
'202.192.0.0',
|
||||
'203.18.50.0',
|
||||
'203.79.0.0',
|
||||
'203.80.144.0',
|
||||
'203.81.16.0',
|
||||
'203.83.56.0',
|
||||
'203.86.0.0',
|
||||
'203.86.64.0',
|
||||
'203.88.32.0',
|
||||
'203.88.192.0',
|
||||
'203.89.0.0',
|
||||
'203.90.0.0',
|
||||
'203.90.128.0',
|
||||
'203.90.192.0',
|
||||
'203.91.32.0',
|
||||
'203.91.96.0',
|
||||
'203.91.120.0',
|
||||
'203.92.0.0',
|
||||
'203.92.160.0',
|
||||
'203.93.0.0',
|
||||
'203.94.0.0',
|
||||
'203.95.0.0',
|
||||
'203.95.96.0',
|
||||
'203.99.16.0',
|
||||
'203.99.80.0',
|
||||
'203.100.32.0',
|
||||
'203.100.80.0',
|
||||
'203.100.96.0',
|
||||
'203.100.192.0',
|
||||
'203.110.160.0',
|
||||
'203.118.192.0',
|
||||
'203.119.24.0',
|
||||
'203.119.32.0',
|
||||
'203.128.32.0',
|
||||
'203.128.96.0',
|
||||
'203.130.32.0',
|
||||
'203.132.32.0',
|
||||
'203.134.240.0',
|
||||
'203.135.96.0',
|
||||
'203.135.160.0',
|
||||
'203.142.219.0',
|
||||
'203.148.0.0',
|
||||
'203.152.64.0',
|
||||
'203.156.192.0',
|
||||
'203.158.16.0',
|
||||
'203.161.192.0',
|
||||
'203.166.160.0',
|
||||
'203.171.224.0',
|
||||
'203.174.7.0',
|
||||
'203.174.96.0',
|
||||
'203.175.128.0',
|
||||
'203.175.192.0',
|
||||
'203.176.168.0',
|
||||
'203.184.80.0',
|
||||
'203.187.160.0',
|
||||
'203.190.96.0',
|
||||
'203.191.16.0',
|
||||
'203.191.64.0',
|
||||
'203.191.144.0',
|
||||
'203.192.0.0',
|
||||
'203.196.0.0',
|
||||
'203.207.64.0',
|
||||
'203.207.128.0',
|
||||
'203.208.0.0',
|
||||
'203.208.16.0',
|
||||
'203.208.32.0',
|
||||
'203.209.224.0',
|
||||
'203.212.0.0',
|
||||
'203.212.80.0',
|
||||
'203.222.192.0',
|
||||
'203.223.0.0',
|
||||
'210.2.0.0',
|
||||
'210.5.0.0',
|
||||
'210.5.144.0',
|
||||
'210.12.0.0',
|
||||
'210.14.64.0',
|
||||
'210.14.112.0',
|
||||
'210.14.128.0',
|
||||
'210.15.0.0',
|
||||
'210.15.128.0',
|
||||
'210.16.128.0',
|
||||
'210.21.0.0',
|
||||
'210.22.0.0',
|
||||
'210.23.32.0',
|
||||
'210.25.0.0',
|
||||
'210.26.0.0',
|
||||
'210.28.0.0',
|
||||
'210.32.0.0',
|
||||
'210.51.0.0',
|
||||
'210.52.0.0',
|
||||
'210.56.192.0',
|
||||
'210.72.0.0',
|
||||
'210.76.0.0',
|
||||
'210.78.0.0',
|
||||
'210.79.64.0',
|
||||
'210.79.224.0',
|
||||
'210.82.0.0',
|
||||
'210.87.128.0',
|
||||
'210.185.192.0',
|
||||
'210.192.96.0',
|
||||
'211.64.0.0',
|
||||
'211.80.0.0',
|
||||
'211.96.0.0',
|
||||
'211.136.0.0',
|
||||
'211.144.0.0',
|
||||
'211.160.0.0',
|
||||
'218.0.0.0',
|
||||
'218.56.0.0',
|
||||
'218.64.0.0',
|
||||
'218.96.0.0',
|
||||
'218.104.0.0',
|
||||
'218.108.0.0',
|
||||
'218.185.192.0',
|
||||
'218.192.0.0',
|
||||
'218.240.0.0',
|
||||
'218.249.0.0',
|
||||
'219.72.0.0',
|
||||
'219.82.0.0',
|
||||
'219.128.0.0',
|
||||
'219.216.0.0',
|
||||
'219.224.0.0',
|
||||
'219.242.0.0',
|
||||
'219.244.0.0',
|
||||
'220.101.192.0',
|
||||
'220.112.0.0',
|
||||
'220.152.128.0',
|
||||
'220.154.0.0',
|
||||
'220.160.0.0',
|
||||
'220.192.0.0',
|
||||
'220.231.0.0',
|
||||
'220.231.128.0',
|
||||
'220.232.64.0',
|
||||
'220.234.0.0',
|
||||
'220.242.0.0',
|
||||
'220.248.0.0',
|
||||
'220.252.0.0',
|
||||
'221.0.0.0',
|
||||
'221.8.0.0',
|
||||
'221.12.0.0',
|
||||
'221.12.128.0',
|
||||
'221.13.0.0',
|
||||
'221.14.0.0',
|
||||
'221.122.0.0',
|
||||
'221.129.0.0',
|
||||
'221.130.0.0',
|
||||
'221.133.224.0',
|
||||
'221.136.0.0',
|
||||
'221.172.0.0',
|
||||
'221.176.0.0',
|
||||
'221.192.0.0',
|
||||
'221.196.0.0',
|
||||
'221.198.0.0',
|
||||
'221.199.0.0',
|
||||
'221.199.128.0',
|
||||
'221.199.192.0',
|
||||
'221.199.224.0',
|
||||
'221.200.0.0',
|
||||
'221.208.0.0',
|
||||
'221.224.0.0',
|
||||
'222.16.0.0',
|
||||
'222.32.0.0',
|
||||
'222.64.0.0',
|
||||
'222.125.0.0',
|
||||
'222.126.128.0',
|
||||
'222.128.0.0',
|
||||
'222.160.0.0',
|
||||
'222.168.0.0',
|
||||
'222.176.0.0',
|
||||
'222.192.0.0',
|
||||
'222.240.0.0',
|
||||
'222.248.0.0',
|
||||
];
|
||||
|
||||
// The User Agents which are used for each request. You can add or delete this for matching your needs.
|
||||
const userAgents = {
|
||||
mobile: [
|
||||
'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1',
|
||||
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.',
|
||||
'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML like Gecko) Mobile/14A456 QQ/6.5.7.408 V1_IPH_SQ_6.5.7_1_APP_A Pixel/750 Core/UIWebView NetType/4G Mem/103',
|
||||
'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.15(0x17000f27) NetType/WIFI Language/zh',
|
||||
'Mozilla/5.0 (Linux; Android 9; PCT-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.311 Mobile Safari/537.36',
|
||||
'Mozilla/5.0 (Linux; U; Android 9; zh-cn; Redmi Note 8 Build/PKQ1.190616.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.5.22',
|
||||
'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2581 MMWEBSDK/200801 Mobile Safari/537.36 MMWEBID/3027 MicroMessenger/7.0.18.1740(0x27001235) Process/toolsmp WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64',
|
||||
'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BKK-AL10 Build/HONORBKK-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.6 Mobile Safari/537.36',
|
||||
],
|
||||
pc: [
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0',
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36',
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15',
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0',
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36',
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/13.10586',
|
||||
],
|
||||
};
|
||||
|
||||
export type CryptoMethod = 'weapi' | 'linuxapi' | 'eapi';
|
||||
export type UserAgentType = 'mobile' | 'pc';
|
||||
export type HttpMethod = 'POST' | 'GET' | 'HEAD' | 'OPTIONS' | 'DELETE' | 'TRACE' | 'PATCH' | 'PUT' | 'CONNECT';
|
||||
|
||||
export { chineseIPs, neteaseAnonymousToken, userAgents };
|
@ -1,3 +1,4 @@
|
||||
import type { HttpMethod } from '@/components/player/netease/config';
|
||||
import { Buffer } from 'node:buffer';
|
||||
import crypto from 'node:crypto';
|
||||
|
||||
@ -9,21 +10,27 @@ const publicKey =
|
||||
'-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgtQn2JZ34ZC28NWYpAUd98iZ37BUrX/aKzmFbt7clFSs6sXqHauqKWqdtLkF2KexO40H1YTX8z2lSgBBOAxLsvaklV8k4cBFK9snQXE9/DDaFt6Rr7iVZMldczhC0JNgTz+SHXT6CBHuX3e9SdB1Ua44oncaTWz7OBGLbCiK45wIDAQAB\n-----END PUBLIC KEY-----';
|
||||
const eapiKey = 'e82ckenh8dichen8';
|
||||
|
||||
const aesEncrypt = (buffer, mode, key, iv) => {
|
||||
const aesEncrypt = (
|
||||
buffer: Buffer | Uint8Array,
|
||||
mode: string,
|
||||
key: Buffer | Uint8Array | string,
|
||||
iv: Buffer | string,
|
||||
) => {
|
||||
const cipher = crypto.createCipheriv(`aes-128-${mode}`, key, iv);
|
||||
return Buffer.concat([cipher.update(buffer), cipher.final()]);
|
||||
};
|
||||
|
||||
const rsaEncrypt = (buffer, key) => {
|
||||
const rsaEncrypt = (buffer: Buffer | Uint8Array, key: string) => {
|
||||
return crypto.publicEncrypt(
|
||||
{ key: key, padding: crypto.constants.RSA_NO_PADDING },
|
||||
Buffer.concat([Buffer.alloc(128 - buffer.length), buffer]),
|
||||
);
|
||||
};
|
||||
|
||||
const weapi = (object) => {
|
||||
const text = JSON.stringify(object);
|
||||
const secretKey = crypto.randomBytes(16).map((n) => base62.charAt(n % 62).charCodeAt());
|
||||
export const weapi = (form: Record<string, string>): Record<string, string> => {
|
||||
const text = JSON.stringify(form);
|
||||
const secretKey = crypto.randomBytes(16).map((n) => base62.charAt(n % 62).charCodeAt(0));
|
||||
|
||||
return {
|
||||
params: aesEncrypt(
|
||||
Buffer.from(aesEncrypt(Buffer.from(text), 'cbc', presetKey, iv).toString('base64')),
|
||||
@ -35,15 +42,30 @@ const weapi = (object) => {
|
||||
};
|
||||
};
|
||||
|
||||
const linuxapi = (object) => {
|
||||
const text = JSON.stringify(object);
|
||||
export const linuxapi = (method: HttpMethod, url: string, form: Record<string, string>): Record<string, string> => {
|
||||
const request = {
|
||||
method: method,
|
||||
url: url.replace(/\w*api/, 'api'),
|
||||
params: form,
|
||||
};
|
||||
|
||||
const text = JSON.stringify(request);
|
||||
return {
|
||||
eparams: aesEncrypt(Buffer.from(text), 'ecb', linuxapiKey, '').toString('hex').toUpperCase(),
|
||||
};
|
||||
};
|
||||
|
||||
const eapi = (url, object) => {
|
||||
const text = typeof object === 'object' ? JSON.stringify(object) : object;
|
||||
export const eapi = (
|
||||
url: string,
|
||||
form: Record<string, string>,
|
||||
header: Record<string, string | boolean | number>,
|
||||
): Record<string, string> => {
|
||||
const request = {
|
||||
...form,
|
||||
header: header,
|
||||
};
|
||||
|
||||
const text = JSON.stringify(request);
|
||||
const message = `nobody${url}use${text}md5forencrypt`;
|
||||
const digest = crypto.createHash('md5').update(message).digest('hex');
|
||||
const data = `${url}-36cd479b6b5-${text}-36cd479b6b5-${digest}`;
|
||||
@ -51,10 +73,3 @@ const eapi = (url, object) => {
|
||||
params: aesEncrypt(Buffer.from(data), 'ecb', eapiKey, '').toString('hex').toUpperCase(),
|
||||
};
|
||||
};
|
||||
|
||||
const decrypt = (cipherBuffer) => {
|
||||
const decipher = crypto.createDecipheriv('aes-128-ecb', eapiKey, '');
|
||||
return Buffer.concat([decipher.update(cipherBuffer), decipher.final()]);
|
||||
};
|
||||
|
||||
export default { weapi, linuxapi, eapi, decrypt };
|
150
src/components/player/netease/request.ts
Normal file
150
src/components/player/netease/request.ts
Normal file
@ -0,0 +1,150 @@
|
||||
// The request is a rewritten file which is type safe to dispatch the netease music requests.
|
||||
// We will try to use three types of requests here. The weapi, linuxapi and eapi.
|
||||
|
||||
import {
|
||||
chineseIPs,
|
||||
neteaseAnonymousToken,
|
||||
userAgents,
|
||||
type CryptoMethod,
|
||||
type HttpMethod,
|
||||
type UserAgentType,
|
||||
} from '@/components/player/netease/config';
|
||||
import { eapi, linuxapi, weapi } from '@/components/player/netease/encrypt';
|
||||
import { customAlphabet } from 'nanoid/non-secure';
|
||||
|
||||
const nanoid = customAlphabet('1234567890abcdef', 32);
|
||||
|
||||
const chooseUserAgent = (ua?: UserAgentType) => {
|
||||
const agents = ua === undefined ? [...userAgents.mobile, ...userAgents.pc] : userAgents[ua];
|
||||
return agents[Math.floor(Math.random() * agents.length)];
|
||||
};
|
||||
|
||||
const randomChineseIP = () => chineseIPs[Math.floor(Math.random() * chineseIPs.length)];
|
||||
|
||||
export type RequestOptions = {
|
||||
cookie?: Record<string, string | boolean | number>;
|
||||
ua?: UserAgentType;
|
||||
crypto: CryptoMethod;
|
||||
url?: string;
|
||||
};
|
||||
|
||||
export const request = async (
|
||||
method: HttpMethod,
|
||||
url: string,
|
||||
form: Record<string, string>,
|
||||
options: RequestOptions,
|
||||
) => {
|
||||
// Generate the fundamental request headers.
|
||||
const headers: Record<string, string> = { 'User-Agent': chooseUserAgent(options.ua) };
|
||||
const ip = randomChineseIP();
|
||||
headers['X-Real-IP'] = ip;
|
||||
headers['X-Forwarded-For'] = ip;
|
||||
if (method === 'POST' || method === 'PUT') {
|
||||
headers['Content-Type'] = 'application/x-www-form-urlencoded';
|
||||
}
|
||||
if (url.includes('music.163.com')) {
|
||||
headers.Referer = 'https://music.163.com';
|
||||
}
|
||||
|
||||
// Append cookies to header.
|
||||
let cookies = options.cookie ? options.cookie : {};
|
||||
cookies = {
|
||||
...cookies,
|
||||
_remember_me: true,
|
||||
_ntes_nuid: nanoid(),
|
||||
};
|
||||
if (!cookies.MUSIC_U) {
|
||||
// This is a guest request.
|
||||
if (!cookies.MUSIC_A) {
|
||||
cookies.MUSIC_A = neteaseAnonymousToken;
|
||||
}
|
||||
}
|
||||
headers.Cookie = Object.keys(cookies)
|
||||
.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(cookies[key])}`)
|
||||
.join('; ');
|
||||
|
||||
// Try to choose encrypt method for generating the fetch request.
|
||||
let decryptedForm: Record<string, string>;
|
||||
let decryptedURL: string;
|
||||
|
||||
if (options.crypto === 'weapi') {
|
||||
const csrfToken = (headers.Cookie || '').match(/_csrf=([^(;|$)]+)/);
|
||||
form.csrf_token = csrfToken ? csrfToken[1] : '';
|
||||
|
||||
decryptedForm = weapi(form);
|
||||
decryptedURL = url.replace(/\w*api/, 'weapi');
|
||||
} else if (options.crypto === 'linuxapi') {
|
||||
headers['User-Agent'] =
|
||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36';
|
||||
|
||||
decryptedForm = linuxapi(method, url, form);
|
||||
decryptedURL = 'https://music.163.com/api/linux/forward';
|
||||
} else if (options.crypto === 'eapi') {
|
||||
// Generate new cookies.
|
||||
const header: Record<string, string | boolean | number> = {
|
||||
osver: cookies.osver,
|
||||
deviceId: cookies.deviceId,
|
||||
appver: cookies.appver || '8.7.01',
|
||||
versioncode: cookies.versioncode || '140',
|
||||
mobilename: cookies.mobilename,
|
||||
buildver: cookies.buildver || Date.now().toString().substring(0, 10),
|
||||
resolution: cookies.resolution || '1920x1080',
|
||||
__csrf: cookies.__csrf || '',
|
||||
os: cookies.os || 'android',
|
||||
channel: cookies.channel,
|
||||
requestId: `${Date.now()}_${Math.floor(Math.random() * 1000)
|
||||
.toString()
|
||||
.padStart(4, '0')} `,
|
||||
MUSIC_U: cookies.MUSIC_U,
|
||||
MUSIC_A: cookies.MUSIC_A,
|
||||
};
|
||||
headers.Cookie = Object.keys(header)
|
||||
.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(header[key])}`)
|
||||
.join('; ');
|
||||
if (options.url === undefined) {
|
||||
throw new Error('eapi is required to have a url options.');
|
||||
}
|
||||
|
||||
decryptedForm = eapi(options.url, form, header);
|
||||
decryptedURL = url.replace(/\w*api/, 'eapi');
|
||||
} else {
|
||||
throw new Error(`Unsupported crypto method ${options.crypto}`);
|
||||
}
|
||||
|
||||
let settings: Record<string, string | Record<string, string>> = {
|
||||
method,
|
||||
headers,
|
||||
body: new URLSearchParams(decryptedForm).toString(),
|
||||
};
|
||||
|
||||
if (options.crypto === 'eapi') {
|
||||
settings = {
|
||||
...settings,
|
||||
responseType: 'arraybuffer',
|
||||
};
|
||||
}
|
||||
|
||||
let res: Response;
|
||||
let count = 0;
|
||||
let result = {};
|
||||
do {
|
||||
res = await fetch(decryptedURL, settings);
|
||||
if (options.crypto === 'eapi') {
|
||||
const enc = new TextDecoder();
|
||||
result = JSON.parse(enc.decode(await res.arrayBuffer()));
|
||||
} else {
|
||||
result = await res.json();
|
||||
}
|
||||
count++;
|
||||
if (count > 1) {
|
||||
console.log(`Request ${count} times.`);
|
||||
}
|
||||
if (count > 5) {
|
||||
console.error('Max retries exceeded.');
|
||||
break;
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||
} while (res.status === -460);
|
||||
|
||||
return result;
|
||||
};
|
@ -1,35 +0,0 @@
|
||||
import { map_song_list, request } from './util.js';
|
||||
|
||||
export const get_song_url = async (id) => {
|
||||
const data = {
|
||||
ids: `[${id}]`,
|
||||
level: 'standard',
|
||||
encodeType: 'flac',
|
||||
};
|
||||
|
||||
const res = await request('POST', 'https://interface.music.163.com/eapi/song/enhance/player/url/v1', data, {
|
||||
crypto: 'eapi',
|
||||
url: '/api/song/enhance/player/url/v1',
|
||||
cookie: {},
|
||||
});
|
||||
const url = res.data[0]?.url?.replace('http://', 'https://');
|
||||
|
||||
return url || `https://music.163.com/song/media/outer/url?id=${id}.mp3`;
|
||||
};
|
||||
|
||||
export const get_song_info = async (id) => {
|
||||
const ids = [id];
|
||||
const data = {
|
||||
c: `[${ids.map((id) => `{"id":${id}}`).join(',')}]`,
|
||||
};
|
||||
let res = await request('POST', 'https://music.163.com/api/v3/song/detail', data, {
|
||||
crypto: 'weapi',
|
||||
});
|
||||
|
||||
if (!res.songs) {
|
||||
throw res;
|
||||
}
|
||||
|
||||
res = map_song_list(res);
|
||||
return res;
|
||||
};
|
87
src/components/player/netease/song.ts
Normal file
87
src/components/player/netease/song.ts
Normal file
@ -0,0 +1,87 @@
|
||||
import { request } from '@/components/player/netease/request';
|
||||
|
||||
type SongUrl = {
|
||||
url?: string;
|
||||
};
|
||||
|
||||
type SongUrlResponse = {
|
||||
data: SongUrl[];
|
||||
};
|
||||
|
||||
export interface SongArtist {
|
||||
albumSize: number;
|
||||
id: number;
|
||||
img1v1Id: number;
|
||||
img1v1Url: string;
|
||||
musicSize: number;
|
||||
name: string;
|
||||
picId: number;
|
||||
picUrl: string;
|
||||
topicPerson: number;
|
||||
alias?: string[];
|
||||
}
|
||||
|
||||
type SongInfo = {
|
||||
al: {
|
||||
id: number;
|
||||
name: string;
|
||||
picUrl: string;
|
||||
};
|
||||
ar: SongArtist[];
|
||||
dt: number;
|
||||
id: number;
|
||||
name: string;
|
||||
publishTime: number;
|
||||
fee?: number;
|
||||
status?: number;
|
||||
};
|
||||
|
||||
type SongInfoResponse = {
|
||||
songs?: SongInfo[];
|
||||
};
|
||||
|
||||
export const getSongUrl = async (id: number) => {
|
||||
const data = {
|
||||
ids: `[${id}]`,
|
||||
level: 'standard',
|
||||
encodeType: 'flac',
|
||||
};
|
||||
|
||||
const res = await request('POST', 'https://interface.music.163.com/eapi/song/enhance/player/url/v1', data, {
|
||||
crypto: 'eapi',
|
||||
url: '/api/song/enhance/player/url/v1',
|
||||
cookie: {},
|
||||
});
|
||||
const url = (res as SongUrlResponse).data[0]?.url?.replace('http://', 'https://');
|
||||
|
||||
return url || `https://music.163.com/song/media/outer/url?id=${id}.mp3`;
|
||||
};
|
||||
|
||||
const mapSongList = (songs: SongInfo[]) => {
|
||||
return songs.map((song) => {
|
||||
const artists = song.ar || [];
|
||||
return {
|
||||
title: song.name,
|
||||
author: artists.reduce((i, v) => (i ? `${i} / ` : i) + v.name, ''),
|
||||
pic: song?.al?.picUrl,
|
||||
url: song.id,
|
||||
lrc: song.id,
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
export const getSongInfo = async (id: number) => {
|
||||
const ids = [id];
|
||||
const data = {
|
||||
c: `[${ids.map((id) => `{"id":${id}}`).join(',')}]`,
|
||||
};
|
||||
const res = (await request('POST', 'https://music.163.com/api/v3/song/detail', data, {
|
||||
crypto: 'weapi',
|
||||
})) as SongInfoResponse;
|
||||
|
||||
if (!res.songs) {
|
||||
throw res;
|
||||
}
|
||||
|
||||
return mapSongList(res.songs);
|
||||
};
|
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
||||
import { get_song_info, get_song_url } from '@/components/player/netease/song';
|
||||
import { getSongInfo, getSongUrl } from '@/components/player/netease/song';
|
||||
|
||||
export type Song = {
|
||||
name: string;
|
||||
@ -9,7 +9,7 @@ export type Song = {
|
||||
|
||||
// The props for music player. We support both netease music and direct linked music.
|
||||
export interface MusicPlayerProps {
|
||||
netease?: string;
|
||||
netease?: number;
|
||||
song?: Song;
|
||||
}
|
||||
|
||||
@ -19,8 +19,8 @@ const song = async (props: MusicPlayerProps): Promise<Song> => {
|
||||
const { netease, song } = props;
|
||||
|
||||
if (netease) {
|
||||
const info = await get_song_info(netease);
|
||||
const url = await get_song_url(netease);
|
||||
const info = await getSongInfo(netease);
|
||||
const url = await getSongUrl(netease);
|
||||
|
||||
// Check the return result.
|
||||
return { name: info[0].title, artist: info[0].author, url: url, pic: info[0].pic };
|
||||
|
@ -2,7 +2,7 @@
|
||||
import options from '@/options';
|
||||
---
|
||||
|
||||
<div id="search" class="widget widget_search" hidden={!options.settings.sidebar.search}>
|
||||
<div id="search" class="widget widget-search" hidden={!options.settings.sidebar.search}>
|
||||
<div class="search-form">
|
||||
<label>
|
||||
<span class="screen-reader-text">搜索:</span>
|
||||
|
30
src/components/sidebar/OwspaceCalendar.astro
Normal file
30
src/components/sidebar/OwspaceCalendar.astro
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
import options from '@/options';
|
||||
import { DateTime } from 'luxon';
|
||||
|
||||
const loadCalendarImage = async (): Promise<string> => {
|
||||
const now = DateTime.now().setZone(options.settings.timeZone);
|
||||
const link = `https://img.owspace.com/Public/uploads/Download/${now.year}/${now.toFormat('LLdd')}.jpg`;
|
||||
const response = await fetch(link, {
|
||||
referrer: '',
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
console.error(`Failed to fetch image ${link}`);
|
||||
return '';
|
||||
}
|
||||
|
||||
const encodedImage = Buffer.from(await response.arrayBuffer()).toString('base64');
|
||||
return `data:image/jpeg;base64,${encodedImage}`;
|
||||
};
|
||||
|
||||
const calendarImage = !options.settings.sidebar.calendar ? '' : await loadCalendarImage();
|
||||
---
|
||||
|
||||
{
|
||||
calendarImage !== '' && (
|
||||
<div class="widget widget-owspace-calendar">
|
||||
<img src={calendarImage} />
|
||||
</div>
|
||||
)
|
||||
}
|
@ -14,7 +14,7 @@ const randomSize = options.settings.sidebar.post;
|
||||
|
||||
{
|
||||
randomSize > 0 && (
|
||||
<div id="recent_posts" class="widget widget_recent_entries">
|
||||
<div id="recent_posts" class="widget widget-recent-entries">
|
||||
<div class="widget-title">随机文章</div>
|
||||
<ul class="line">
|
||||
{_.sampleSize(posts, randomSize).map((post) => (
|
||||
|
@ -12,15 +12,17 @@ const { tags } = Astro.props;
|
||||
const randomSize = options.settings.sidebar.tag;
|
||||
---
|
||||
|
||||
<div id="tag_cloud" class="widget widget_tag_cloud">
|
||||
<div class="widget-title">文章标签</div>
|
||||
<div class="tagcloud">
|
||||
{
|
||||
_.sampleSize(tags, randomSize).map((tag) => (
|
||||
<a href={tag.permalink} class="tag-cloud-link" title={`${tag.name} (${tag.counts} 篇文章)`}>
|
||||
{tag.name}
|
||||
</a>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
{
|
||||
randomSize > 0 && (
|
||||
<div id="tag_cloud" class="widget widget-tag-cloud">
|
||||
<div class="widget-title">文章标签</div>
|
||||
<div class="tagcloud">
|
||||
{_.sampleSize(tags, randomSize).map((tag) => (
|
||||
<a href={tag.permalink} class="tag-cloud-link" title={`${tag.name} (${tag.counts} 篇文章)`}>
|
||||
{tag.name}
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
@ -1,17 +1,15 @@
|
||||
---
|
||||
import { latestComments } from '@/helpers/db/query';
|
||||
import options from '@/options';
|
||||
|
||||
const comments = await latestComments();
|
||||
---
|
||||
|
||||
{
|
||||
options.settings.sidebar.comment > 0 && (
|
||||
<div id="recent-comments" class="widget widget_recent_comments">
|
||||
<div id="recent-comments" class="widget widget-recent-comments">
|
||||
<div class="widget-title">近期评论</div>
|
||||
<ul id="recentcomments">
|
||||
{comments.map((comment) => (
|
||||
<li class="recentcomments">
|
||||
<ul id="recent-comments">
|
||||
{(await latestComments()).map((comment) => (
|
||||
<li class="recent-comments">
|
||||
<span class="comment-author-link">
|
||||
{comment.authorLink === '' ? (
|
||||
comment.author
|
||||
|
@ -1,5 +1,6 @@
|
||||
---
|
||||
import SearchBar from '@/components/search/SearchBar.astro';
|
||||
import OwspaceCalendar from '@/components/sidebar/OwspaceCalendar.astro';
|
||||
import RandomPosts from '@/components/sidebar/RandomPosts.astro';
|
||||
import RandomTags from '@/components/sidebar/RandomTags.astro';
|
||||
import RecentComments from '@/components/sidebar/RecentComments.astro';
|
||||
@ -19,5 +20,6 @@ const { posts, tags } = Astro.props;
|
||||
<RandomPosts {posts} />
|
||||
<RecentComments />
|
||||
<RandomTags {tags} />
|
||||
<OwspaceCalendar />
|
||||
</div>
|
||||
</aside>
|
||||
|
@ -68,3 +68,7 @@
|
||||
description: 在这里可以看到一个真实的我,我会在这里书写我的一切
|
||||
homepage: https://bxaw.name
|
||||
poster: /images/links/blog.bxaw.name.jpg
|
||||
- website: 蒙需
|
||||
description: 我的朋友圈
|
||||
homepage: https://jiangcl.com
|
||||
poster: /images/links/jiangcl.com.jpg
|
||||
|
Loading…
Reference in New Issue
Block a user