feat: pixelated image rendering

This commit is contained in:
dsrkafuu 2022-05-19 21:34:31 +08:00
parent 71ee4f384d
commit bcc01d5bac
5 changed files with 114 additions and 88 deletions

View File

@ -19,9 +19,9 @@ Fork of Moe Counter for fast global access powered by Cloudflare Workers.
[![Moebooru](https://count.dsrkafuu.net/dsrkafuu:demo?theme=moebooru&length=auto&add=0)](https://count.dsrkafuu.net/dsrkafuu:demo?theme=moebooru&length=auto)
**Rule 34 (with `theme=rule34`)**
**Rule 34 (with `theme=rule34&render=pixelated`)**
[![Rule 34](https://count.dsrkafuu.net/dsrkafuu:demo?theme=rule34&add=0)](https://count.dsrkafuu.net/dsrkafuu:demo?theme=rule34)
[![Rule 34](https://count.dsrkafuu.net/dsrkafuu:demo?theme=rule34&render=pixelated&add=0)](https://count.dsrkafuu.net/dsrkafuu:demo?theme=rule34)
</details>
@ -31,13 +31,16 @@ Fork of Moe Counter for fast global access powered by Cloudflare Workers.
```
https://count.dsrkafuu.net/{id}
https://count.dsrkafuu.net/{id}?theme={asoul,gelbooru,moebooru,rule34}&length={1-10,auto}&add={0,1}
https://count.dsrkafuu.net/{id}?theme={asoul,gelbooru,moebooru,rule34}&render={auto,pixelated}&length={1-10,auto}&add={0,1}
```
1. `{id}`: Any custom string between 1-256 chars (`a-zA-Z0-9:.@_-` allowed)
2. `{&theme}`: `asoul`, `gelbooru`, `moebooru`, `rule34` and two other themes (default: `gelbooru`)
3. `{&length}`: Number between `1-10` (default: `7`) or string `auto`
4. `{&add}`: Controls whether make the counter count or not (default: `1`)
4. `{&render}`: `auto` or `pixelated` (default: `auto`)
5. `{&add}`: Controls whether make the counter count or not (default: `1`)
You can custmize the default bahaviors by [self-hosting the counter](#self-hosting).
Make a pull request to add your id in `settings.json` to use the free public counter. Recommend to use `user:usage` like string as ID for better management and potential issue tracking.

View File

@ -1,7 +1,7 @@
{
"private": true,
"name": "moe-counter-cf",
"version": "2.3.0",
"version": "2.4.0",
"description": "Fork of Moe Counter for fast global access powered by Cloudflare Workers.",
"author": "DSRKafuU <dsrkafuu@outlook.com> (https://dsrkafuu.net)",
"license": "MIT",
@ -14,14 +14,14 @@
},
"dependencies": {
"base64-arraybuffer": "~1.0.2",
"itty-router": "~2.5.2"
"itty-router": "~2.6.1"
},
"devDependencies": {
"@cloudflare/wrangler": "~1.19.8",
"@cloudflare/wrangler": "~1.19.12",
"clean-webpack-plugin": "~4.0.0",
"eslint": "~8.10.0",
"prettier": "~2.5.1",
"webpack": "~5.70.0",
"eslint": "~8.15.0",
"prettier": "~2.6.2",
"webpack": "~5.72.1",
"webpack-cli": "~4.9.2"
}
}

View File

@ -1,31 +1,31 @@
lockfileVersion: 5.3
lockfileVersion: 5.4
specifiers:
'@cloudflare/wrangler': ~1.19.8
'@cloudflare/wrangler': ~1.19.12
base64-arraybuffer: ~1.0.2
clean-webpack-plugin: ~4.0.0
eslint: ~8.10.0
itty-router: ~2.5.2
prettier: ~2.5.1
webpack: ~5.70.0
eslint: ~8.15.0
itty-router: ~2.6.1
prettier: ~2.6.2
webpack: ~5.72.1
webpack-cli: ~4.9.2
dependencies:
base64-arraybuffer: 1.0.2
itty-router: 2.5.2
itty-router: 2.6.1
devDependencies:
'@cloudflare/wrangler': 1.19.8
clean-webpack-plugin: 4.0.0_webpack@5.70.0
eslint: 8.10.0
prettier: 2.5.1
webpack: 5.70.0_webpack-cli@4.9.2
webpack-cli: 4.9.2_webpack@5.70.0
'@cloudflare/wrangler': 1.19.12
clean-webpack-plugin: 4.0.0_webpack@5.72.1
eslint: 8.15.0
prettier: 2.6.2
webpack: 5.72.1_webpack-cli@4.9.2
webpack-cli: 4.9.2_webpack@5.72.1
packages:
/@cloudflare/wrangler/1.19.8:
resolution: {integrity: sha512-bckvdgBT3ZkvJQtGhdWEwa7GKi3zWYlxBPQoaOa+Utqw4bzg3BkbzUouI8+7WmcvkOoLxQ2emgTTNfudHBcCqA==}
/@cloudflare/wrangler/1.19.12:
resolution: {integrity: sha512-ALuQDzJetYGqzNuIa3KY8S8X9rvZjIh5uEY3nK31jV/EmBamiiSJn4XIdPuSn65FaEmmZem78OJIWFyu80OIuA==}
hasBin: true
requiresBuild: true
dependencies:
@ -41,13 +41,13 @@ packages:
engines: {node: '>=10.0.0'}
dev: true
/@eslint/eslintrc/1.2.1:
resolution: {integrity: sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==}
/@eslint/eslintrc/1.2.3:
resolution: {integrity: sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
debug: 4.3.3
espree: 9.3.1
espree: 9.3.2
globals: 13.12.1
ignore: 5.2.0
import-fresh: 3.3.0
@ -216,14 +216,14 @@ packages:
'@xtuc/long': 4.2.2
dev: true
/@webpack-cli/configtest/1.1.1_webpack-cli@4.9.2+webpack@5.70.0:
/@webpack-cli/configtest/1.1.1_smhu6mcfcg7aivfsuosc335k3u:
resolution: {integrity: sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==}
peerDependencies:
webpack: 4.x.x || 5.x.x
webpack-cli: 4.x.x
dependencies:
webpack: 5.70.0_webpack-cli@4.9.2
webpack-cli: 4.9.2_webpack@5.70.0
webpack: 5.72.1_webpack-cli@4.9.2
webpack-cli: 4.9.2_webpack@5.72.1
dev: true
/@webpack-cli/info/1.4.1_webpack-cli@4.9.2:
@ -232,7 +232,7 @@ packages:
webpack-cli: 4.x.x
dependencies:
envinfo: 7.8.1
webpack-cli: 4.9.2_webpack@5.70.0
webpack-cli: 4.9.2_webpack@5.72.1
dev: true
/@webpack-cli/serve/1.6.1_webpack-cli@4.9.2:
@ -244,7 +244,7 @@ packages:
webpack-dev-server:
optional: true
dependencies:
webpack-cli: 4.9.2_webpack@5.70.0
webpack-cli: 4.9.2_webpack@5.72.1
dev: true
/@xtuc/ieee754/1.2.0:
@ -263,12 +263,12 @@ packages:
acorn: 8.7.0
dev: true
/acorn-jsx/5.3.2_acorn@8.7.0:
/acorn-jsx/5.3.2_acorn@8.7.1:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
acorn: 8.7.0
acorn: 8.7.1
dev: true
/acorn/8.7.0:
@ -277,6 +277,12 @@ packages:
hasBin: true
dev: true
/acorn/8.7.1:
resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/ajv-keywords/3.5.2_ajv@6.12.6:
resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
peerDependencies:
@ -389,14 +395,14 @@ packages:
engines: {node: '>=6.0'}
dev: true
/clean-webpack-plugin/4.0.0_webpack@5.70.0:
/clean-webpack-plugin/4.0.0_webpack@5.72.1:
resolution: {integrity: sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==}
engines: {node: '>=10.0.0'}
peerDependencies:
webpack: '>=4.0.0 <6.0.0'
dependencies:
del: 4.1.1
webpack: 5.70.0_webpack-cli@4.9.2
webpack: 5.72.1_webpack-cli@4.9.2
dev: true
/clone-deep/4.0.1:
@ -433,7 +439,7 @@ packages:
dev: true
/concat-map/0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
/cross-spawn/7.0.3:
@ -485,8 +491,8 @@ packages:
resolution: {integrity: sha512-Ks+ANzLoIrFDUOJdjxYMH6CMKB8UQo5modAwvSZTxgF+vEs/U7G5IbWFUp6dS4klPkTDVdxbORuk8xAXXhMsWw==}
dev: true
/enhanced-resolve/5.9.2:
resolution: {integrity: sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==}
/enhanced-resolve/5.9.3:
resolution: {integrity: sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==}
engines: {node: '>=10.13.0'}
dependencies:
graceful-fs: 4.2.9
@ -529,13 +535,13 @@ packages:
estraverse: 5.3.0
dev: true
/eslint-utils/3.0.0_eslint@8.10.0:
/eslint-utils/3.0.0_eslint@8.15.0:
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
peerDependencies:
eslint: '>=5'
dependencies:
eslint: 8.10.0
eslint: 8.15.0
eslint-visitor-keys: 2.1.0
dev: true
@ -549,12 +555,12 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/eslint/8.10.0:
resolution: {integrity: sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==}
/eslint/8.15.0:
resolution: {integrity: sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
'@eslint/eslintrc': 1.2.1
'@eslint/eslintrc': 1.2.3
'@humanwhocodes/config-array': 0.9.5
ajv: 6.12.6
chalk: 4.1.2
@ -563,9 +569,9 @@ packages:
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.1.1
eslint-utils: 3.0.0_eslint@8.10.0
eslint-utils: 3.0.0_eslint@8.15.0
eslint-visitor-keys: 3.3.0
espree: 9.3.1
espree: 9.3.2
esquery: 1.4.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@ -593,12 +599,12 @@ packages:
- supports-color
dev: true
/espree/9.3.1:
resolution: {integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==}
/espree/9.3.2:
resolution: {integrity: sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
acorn: 8.7.0
acorn-jsx: 5.3.2_acorn@8.7.0
acorn: 8.7.1
acorn-jsx: 5.3.2_acorn@8.7.1
eslint-visitor-keys: 3.3.0
dev: true
@ -660,7 +666,7 @@ packages:
dev: true
/fast-levenshtein/2.0.6:
resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=}
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
dev: true
/fastest-levenshtein/1.0.12:
@ -712,7 +718,7 @@ packages:
dev: true
/fs.realpath/1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true
/function-bind/1.1.1:
@ -720,7 +726,7 @@ packages:
dev: true
/functional-red-black-tree/1.0.1:
resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=}
resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
dev: true
/get-stream/6.0.1:
@ -812,12 +818,12 @@ packages:
dev: true
/imurmurhash/0.1.4:
resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
dev: true
/inflight/1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
@ -839,7 +845,7 @@ packages:
dev: true
/is-extglob/2.1.1:
resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
dev: true
@ -882,7 +888,7 @@ packages:
dev: true
/isexe/2.0.0:
resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: true
/isobject/3.0.1:
@ -890,8 +896,8 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/itty-router/2.5.2:
resolution: {integrity: sha512-igVdp/qoMe7aMnwB1eI9OCgV9HGyQlQ9LBDWPMSDkoYv7SpcxZp0t86noQcXKCSVK2B7y7z8d5SiaNbRMLUIyg==}
/itty-router/2.6.1:
resolution: {integrity: sha512-l9gxWe5TOLUESYnBn85Jxd6tIZLWdRX5YKkHIBfSgbNQ7UFPNUGuWihRV+LlEbfJJIzgLmhwAbaWRi5yWJm8kg==}
dev: false
/jest-worker/27.5.1:
@ -910,8 +916,8 @@ packages:
argparse: 2.0.1
dev: true
/json-parse-better-errors/1.0.2:
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
/json-parse-even-better-errors/2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
dev: true
/json-schema-traverse/0.4.1:
@ -919,7 +925,7 @@ packages:
dev: true
/json-stable-stringify-without-jsonify/1.0.1:
resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=}
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
dev: true
/kind-of/6.0.3:
@ -1004,7 +1010,7 @@ packages:
dev: true
/natural-compare/1.4.0:
resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=}
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true
/neo-async/2.6.2:
@ -1028,7 +1034,7 @@ packages:
dev: true
/once/1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: true
@ -1089,7 +1095,7 @@ packages:
dev: true
/path-is-absolute/1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: true
@ -1144,8 +1150,8 @@ packages:
engines: {node: '>= 0.8.0'}
dev: true
/prettier/2.5.1:
resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==}
/prettier/2.6.2:
resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==}
engines: {node: '>=10.13.0'}
hasBin: true
dev: true
@ -1325,7 +1331,7 @@ packages:
yallist: 4.0.0
dev: true
/terser-webpack-plugin/5.3.1_webpack@5.70.0:
/terser-webpack-plugin/5.3.1_webpack@5.72.1:
resolution: {integrity: sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@ -1346,7 +1352,7 @@ packages:
serialize-javascript: 6.0.0
source-map: 0.6.1
terser: 5.12.0
webpack: 5.70.0_webpack-cli@4.9.2
webpack: 5.72.1_webpack-cli@4.9.2
dev: true
/terser/5.12.0:
@ -1354,14 +1360,14 @@ packages:
engines: {node: '>=10'}
hasBin: true
dependencies:
acorn: 8.7.0
acorn: 8.7.1
commander: 2.20.3
source-map: 0.7.3
source-map-support: 0.5.21
dev: true
/text-table/0.2.0:
resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=}
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
/type-check/0.4.0:
@ -1394,7 +1400,7 @@ packages:
graceful-fs: 4.2.9
dev: true
/webpack-cli/4.9.2_webpack@5.70.0:
/webpack-cli/4.9.2_webpack@5.72.1:
resolution: {integrity: sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==}
engines: {node: '>=10.13.0'}
hasBin: true
@ -1415,7 +1421,7 @@ packages:
optional: true
dependencies:
'@discoveryjs/json-ext': 0.5.7
'@webpack-cli/configtest': 1.1.1_webpack-cli@4.9.2+webpack@5.70.0
'@webpack-cli/configtest': 1.1.1_smhu6mcfcg7aivfsuosc335k3u
'@webpack-cli/info': 1.4.1_webpack-cli@4.9.2
'@webpack-cli/serve': 1.6.1_webpack-cli@4.9.2
colorette: 2.0.16
@ -1425,7 +1431,7 @@ packages:
import-local: 3.1.0
interpret: 2.2.0
rechoir: 0.7.1
webpack: 5.70.0_webpack-cli@4.9.2
webpack: 5.72.1_webpack-cli@4.9.2
webpack-merge: 5.8.0
dev: true
@ -1442,8 +1448,8 @@ packages:
engines: {node: '>=10.13.0'}
dev: true
/webpack/5.70.0_webpack-cli@4.9.2:
resolution: {integrity: sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==}
/webpack/5.72.1_webpack-cli@4.9.2:
resolution: {integrity: sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@ -1461,21 +1467,21 @@ packages:
acorn-import-assertions: 1.8.0_acorn@8.7.0
browserslist: 4.20.0
chrome-trace-event: 1.0.3
enhanced-resolve: 5.9.2
enhanced-resolve: 5.9.3
es-module-lexer: 0.9.3
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
graceful-fs: 4.2.9
json-parse-better-errors: 1.0.2
json-parse-even-better-errors: 2.3.1
loader-runner: 4.2.0
mime-types: 2.1.34
neo-async: 2.6.2
schema-utils: 3.1.1
tapable: 2.2.1
terser-webpack-plugin: 5.3.1_webpack@5.70.0
terser-webpack-plugin: 5.3.1_webpack@5.72.1
watchpack: 2.3.1
webpack-cli: 4.9.2_webpack@5.70.0
webpack-cli: 4.9.2_webpack@5.72.1
webpack-sources: 3.2.3
transitivePeerDependencies:
- '@swc/core'
@ -1501,7 +1507,7 @@ packages:
dev: true
/wrappy/1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
/yallist/4.0.0:

View File

@ -1,7 +1,8 @@
{
"defaults": {
"theme": "gelbooru",
"length": 7
"length": 7,
"render": "auto"
},
"api": {
"get": true,

View File

@ -8,9 +8,9 @@ import { validateID, minify } from '../utils';
* @param {number} count
* @param {string} theme
* @param {number|string} length
* @returns
* @param {boolean} pixelated
*/
function genImage(count, theme, length) {
function genImage(count, theme, length, pixelated) {
let nums;
if (length === 'auto') {
nums = count.toString().split('');
@ -29,7 +29,14 @@ function genImage(count, theme, length) {
const svg = `
<?xml version="1.0" encoding="UTF-8"?>
<svg width="${x}" height="${height}" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg
width="${x}"
height="${height}"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
${pixelated ? 'style="image-rendering: pixelated"' : ''}
>
<title>Moe Counter</title>
<g>${parts}</g>
</svg>
@ -42,26 +49,35 @@ function genImage(count, theme, length) {
* @param {FetchEvent} event
*/
export async function get(req, event) {
// id
const id = validateID(req.params.id);
// theme
let { theme, length, add } = req.query;
if (!theme || !themes[theme]) {
theme = settings.defaults.theme;
}
// length
let _length = length || settings.defaults.length;
if (length === 'auto') {
_length = 'auto';
} else if (!length || length <= 0 || length > 10) {
_length = 7;
}
// render
let pixelated = false;
if (req.query.render === 'pixelated') {
pixelated = true;
}
// get times from KV and set time asynchronously (no await)
const count = Number.parseInt(await KV.get(id)) || 0;
let image;
if (add !== '0') {
image = genImage(count + 1, theme, _length);
image = genImage(count + 1, theme, _length, pixelated);
// do not quit worker before setting time
event.waitUntil(KV.put(id, (count + 1).toString()));
} else {
image = genImage(count, theme, _length);
image = genImage(count, theme, _length, pixelated);
}
return await genResponse(req, image, {