fix: decode html entities

This commit is contained in:
Acid Chicken (硫酸鶏) 2024-05-28 16:39:22 +09:00
parent 8fa8ab8bc7
commit 79d0dafaa2
No known key found for this signature in database
GPG Key ID: 3E87B98A3F6BAB99
16 changed files with 187 additions and 58 deletions

View File

@ -2,13 +2,13 @@
"packageManager": "pnpm@8.3.1",
"devDependencies": {
"@cloudflare/vitest-pool-workers": "0.1.17",
"@cloudflare/workers-types": "^4.20240405.0",
"@cloudflare/workers-types": "^4.20240524.0",
"@types/whatwg-mimetype": "^3.0.2",
"vitest": "1.3.0",
"wrangler": "^3.48.0"
"wrangler": "^3.57.1"
},
"dependencies": {
"hono": "^4.2.3",
"hono": "^4.4.0",
"html-entities": "^2.5.2",
"jschardet": "^3.1.2",
"summaly": "^2.7.0",

151
pnpm-lock.yaml generated
View File

@ -2,8 +2,8 @@ lockfileVersion: '6.0'
dependencies:
hono:
specifier: ^4.2.3
version: 4.2.3
specifier: ^4.4.0
version: 4.4.0
html-entities:
specifier: ^2.5.2
version: 2.5.2
@ -23,10 +23,10 @@ dependencies:
devDependencies:
'@cloudflare/vitest-pool-workers':
specifier: 0.1.17
version: 0.1.17(@cloudflare/workers-types@4.20240405.0)(@vitest/runner@1.3.0)(@vitest/snapshot@1.3.0)(vitest@1.3.0)
version: 0.1.17(@cloudflare/workers-types@4.20240524.0)(@vitest/runner@1.3.0)(@vitest/snapshot@1.3.0)(vitest@1.3.0)
'@cloudflare/workers-types':
specifier: ^4.20240405.0
version: 4.20240405.0
specifier: ^4.20240524.0
version: 4.20240524.0
'@types/whatwg-mimetype':
specifier: ^3.0.2
version: 3.0.2
@ -34,8 +34,8 @@ devDependencies:
specifier: 1.3.0
version: 1.3.0
wrangler:
specifier: ^3.48.0
version: 3.48.0(@cloudflare/workers-types@4.20240405.0)
specifier: ^3.57.1
version: 3.57.1(@cloudflare/workers-types@4.20240524.0)
packages:
@ -45,7 +45,14 @@ packages:
mime: 3.0.0
dev: true
/@cloudflare/vitest-pool-workers@0.1.17(@cloudflare/workers-types@4.20240405.0)(@vitest/runner@1.3.0)(@vitest/snapshot@1.3.0)(vitest@1.3.0):
/@cloudflare/kv-asset-handler@0.3.2:
resolution: {integrity: sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==}
engines: {node: '>=16.13'}
dependencies:
mime: 3.0.0
dev: true
/@cloudflare/vitest-pool-workers@0.1.17(@cloudflare/workers-types@4.20240524.0)(@vitest/runner@1.3.0)(@vitest/snapshot@1.3.0)(vitest@1.3.0):
resolution: {integrity: sha512-T0F6y3NMqURG1xoJIRajHTnRoysm77NROCNAtjrU9Jz2ObF6ZOJ0nFUfBtP1BoYRHbFbzLC1EHhykJA/n/c+iw==}
peerDependencies:
'@vitest/runner': 1.3.0
@ -60,7 +67,7 @@ packages:
esbuild: 0.17.19
miniflare: 3.20240404.0
vitest: 1.3.0
wrangler: 3.48.0(@cloudflare/workers-types@4.20240405.0)
wrangler: 3.48.0(@cloudflare/workers-types@4.20240524.0)
zod: 3.23.8
transitivePeerDependencies:
- '@cloudflare/workers-types'
@ -78,6 +85,15 @@ packages:
dev: true
optional: true
/@cloudflare/workerd-darwin-64@1.20240512.0:
resolution: {integrity: sha512-VMp+CsSHFALQiBzPdQ5dDI4T1qwLu0mQ0aeKVNDosXjueN0f3zj/lf+mFil5/9jBbG3t4mG0y+6MMnalP9Lobw==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@cloudflare/workerd-darwin-arm64@1.20240404.0:
resolution: {integrity: sha512-V9oPjeC2PYBCoAYnjbO2bsjT7PtzxfUHnh780FUi1r59Hwxd7FNlojwsIidA0nS/1WV5UKeJusIdrYlQbsketA==}
engines: {node: '>=16'}
@ -87,6 +103,15 @@ packages:
dev: true
optional: true
/@cloudflare/workerd-darwin-arm64@1.20240512.0:
resolution: {integrity: sha512-lZktXGmzMrB5rJqY9+PmnNfv1HKlj/YLZwMjPfF0WVKHUFdvQbAHsi7NlKv6mW9uIvlZnS+K4sIkWc0MDXcRnA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@cloudflare/workerd-linux-64@1.20240404.0:
resolution: {integrity: sha512-ndO7q6G2X8uYd5byGFzow4SWPqINQcmJ7pKKATNa+9vh/YMO0of2ihPntnm9uv577l8nRiAwRkHbnsWoEI33qQ==}
engines: {node: '>=16'}
@ -96,6 +121,15 @@ packages:
dev: true
optional: true
/@cloudflare/workerd-linux-64@1.20240512.0:
resolution: {integrity: sha512-wrHvqCZZqXz6Y3MUTn/9pQNsvaoNjbJpuA6vcXsXu8iCzJi911iVW2WUEBX+MpUWD+mBIP0oXni5tTlhkokOPw==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@cloudflare/workerd-linux-arm64@1.20240404.0:
resolution: {integrity: sha512-hto5pjKYFqFu2Rvxnh84TzgDwalBRXQSwOVHltcgqo48en9TJDCN48ZtLj2G7QTGUOMW88h+nqdbj8+P7S/GXQ==}
engines: {node: '>=16'}
@ -105,6 +139,15 @@ packages:
dev: true
optional: true
/@cloudflare/workerd-linux-arm64@1.20240512.0:
resolution: {integrity: sha512-YPezHMySL9J9tFdzxz390eBswQ//QJNYcZolz9Dgvb3FEfdpK345cE/bsWbMOqw5ws2f82l388epoenghtYvAg==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@cloudflare/workerd-windows-64@1.20240404.0:
resolution: {integrity: sha512-DpCLvNkOeFinKGJwv9qbyT7RLZ1168dhPx85IHSqAYVWZIszNSmNOkEDqklvoJoab01AqETrrEhwBdmjCA7qfA==}
engines: {node: '>=16'}
@ -114,8 +157,17 @@ packages:
dev: true
optional: true
/@cloudflare/workers-types@4.20240405.0:
resolution: {integrity: sha512-sEVOhyOgXUwfLkgHqbLZa/sfkSYrh7/zLmI6EZNibPaVPvAnAcItbNNl3SAlLyLKuwf8m4wAIAgu9meKWCvXjg==}
/@cloudflare/workerd-windows-64@1.20240512.0:
resolution: {integrity: sha512-SxKapDrIYSscMR7lGIp/av0l6vokjH4xQ9ACxHgXh+OdOus9azppSmjaPyw4/ePvg7yqpkaNjf9o258IxWtvKQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@cloudflare/workers-types@4.20240524.0:
resolution: {integrity: sha512-GpSr4uE7y39DU9f0+wmrL76xd03wn0jy1ClITaa3ZZltKjirAV8TW1GzHrvvKyVGx6u3lekrFnB1HzVHsCYHDQ==}
dev: true
/@cspotcode/source-map-support@0.8.1:
@ -1345,8 +1397,8 @@ packages:
function-bind: 1.1.2
dev: true
/hono@4.2.3:
resolution: {integrity: sha512-yZDnPOp/XzjIB7KUWaOxwLSywnhxMvAKth8hfKhWQiWXeZhBfC6GlFnEst/FOOgn7rSWjShhQPS89PLEuHxq3Q==}
/hono@4.4.0:
resolution: {integrity: sha512-Bb2GHk8jmlLIuxc3U+7UBGOoA5lByJTAFnRdH2N2fqEVy9TEQzJ9saIJUQ/ZqBvEvgEFe7UjPFNSFi8cyeU+3Q==}
engines: {node: '>=16.0.0'}
dev: false
@ -1702,6 +1754,29 @@ packages:
- utf-8-validate
dev: true
/miniflare@3.20240512.0:
resolution: {integrity: sha512-X0PlKR0AROKpxFoJNmRtCMIuJxj+ngEcyTOlEokj2rAQ0TBwUhB4/1uiPvdI6ofW5NugPOD1uomAv+gLjwsLDQ==}
engines: {node: '>=16.13'}
hasBin: true
dependencies:
'@cspotcode/source-map-support': 0.8.1
acorn: 8.11.3
acorn-walk: 8.3.2
capnp-ts: 0.7.0
exit-hook: 2.2.1
glob-to-regexp: 0.4.1
stoppable: 1.1.0
undici: 5.28.2
workerd: 1.20240512.0
ws: 8.16.0
youch: 3.3.3
zod: 3.23.8
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
dev: true
/mlly@1.6.1:
resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==}
dependencies:
@ -2327,7 +2402,20 @@ packages:
'@cloudflare/workerd-windows-64': 1.20240404.0
dev: true
/wrangler@3.48.0(@cloudflare/workers-types@4.20240405.0):
/workerd@1.20240512.0:
resolution: {integrity: sha512-VUBmR1PscAPHEE0OF/G2K7/H1gnr9aDWWZzdkIgWfNKkv8dKFCT75H+GJtUHjfwqz3rYCzaNZmatSXOpLGpF8A==}
engines: {node: '>=16'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20240512.0
'@cloudflare/workerd-darwin-arm64': 1.20240512.0
'@cloudflare/workerd-linux-64': 1.20240512.0
'@cloudflare/workerd-linux-arm64': 1.20240512.0
'@cloudflare/workerd-windows-64': 1.20240512.0
dev: true
/wrangler@3.48.0(@cloudflare/workers-types@4.20240524.0):
resolution: {integrity: sha512-Wv7JS6FyX1j9HkaM6WL3fmTzBMAYc4hPSyZCuxuH55hkJDX/7ts+YAgsaN1U8rKoDrV3FVSgBfI9TyqP9iuM8Q==}
engines: {node: '>=16.17.0'}
hasBin: true
@ -2338,7 +2426,7 @@ packages:
optional: true
dependencies:
'@cloudflare/kv-asset-handler': 0.3.1
'@cloudflare/workers-types': 4.20240405.0
'@cloudflare/workers-types': 4.20240524.0
'@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
'@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
blake3-wasm: 2.1.5
@ -2360,6 +2448,39 @@ packages:
- utf-8-validate
dev: true
/wrangler@3.57.1(@cloudflare/workers-types@4.20240524.0):
resolution: {integrity: sha512-M8YnWUwdrb8AFiRePtVnzlDn02OX4osWvdl8oVh6eyZqqkqXYg7lwlYBr14Qj92pMN4JvMBmDZoukkYHvwpJRg==}
engines: {node: '>=16.17.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20240512.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
dependencies:
'@cloudflare/kv-asset-handler': 0.3.2
'@cloudflare/workers-types': 4.20240524.0
'@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
'@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
blake3-wasm: 2.1.5
chokidar: 3.6.0
esbuild: 0.17.19
miniflare: 3.20240512.0
nanoid: 3.3.7
path-to-regexp: 6.2.2
resolve: 1.22.8
resolve.exports: 2.0.2
selfsigned: 2.4.1
source-map: 0.6.1
xxhash-wasm: 1.0.2
optionalDependencies:
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
dev: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false

View File

@ -19,7 +19,7 @@ export default function getDescription(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -27,7 +27,7 @@ export default function getDescription(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})
@ -35,7 +35,7 @@ export default function getDescription(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 1, content)
assign(result, 1, decode(content))
}
},
})

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign, toAbsoluteURL } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("src")
if (content) {
assign(result, 15, content)
assign(result, 15, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 7, content)
assign(result, 7, decode(content))
}
},
})
@ -27,7 +28,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 6, content)
assign(result, 6, decode(content))
}
},
})
@ -35,7 +36,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("href")
if (content) {
assign(result, 5, content)
assign(result, 5, decode(content))
}
},
})
@ -43,7 +44,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("href")
if (content) {
assign(result, 4, content)
assign(result, 4, decode(content))
}
},
})
@ -51,7 +52,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("href")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})

View File

@ -19,7 +19,7 @@ export default function getTitle(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -27,7 +27,7 @@ export default function getTitle(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getCard(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getCard(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 1, content)
assign(result, 1, decode(content))
}
},
})

View File

@ -1,6 +1,7 @@
import clip from "summaly/built/utils/clip"
import { assign } from "../common"
import type { PrioritizedReference } from "../common"
import { decode } from "html-entities"
export default function getDescription(url: URL, html: HTMLRewriter) {
const result: PrioritizedReference<string | null> = {
@ -12,7 +13,7 @@ export default function getDescription(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -20,7 +21,7 @@ export default function getDescription(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})
@ -28,7 +29,7 @@ export default function getDescription(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 1, content)
assign(result, 1, decode(content))
}
},
})

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign, toAbsoluteURL } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getFavicon(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("href")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getFavicon(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("href")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign, toAbsoluteURL } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 7, content)
assign(result, 7, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 6, content)
assign(result, 6, decode(content))
}
},
})
@ -27,7 +28,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("href")
if (content) {
assign(result, 5, content)
assign(result, 5, decode(content))
}
},
})
@ -35,7 +36,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("href")
if (content) {
assign(result, 4, content)
assign(result, 4, decode(content))
}
},
})
@ -43,7 +44,7 @@ export default function getImage(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("href")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})

View File

@ -59,12 +59,10 @@ export default function getPlayerOEmbed(url: URL, html: HTMLRewriter) {
if (!oEmbedHref) {
return
}
console.log(oEmbedHref)
const oEmbedData: unknown = await fetch(oEmbedHref, fetchOptions)
.then((response) => response.json())
.catch(() => undefined)
const { success, data } = oEmbed.safeParse(oEmbedData)
console.log(oEmbedData, success, data)
if (!success) {
return
}

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign, toAbsoluteURL } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getPlayerUrlCommon(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getPlayerUrlCommon(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})
@ -27,7 +28,7 @@ export default function getPlayerUrlCommon(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 1, content)
assign(result, 1, decode(content))
}
},
})

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign, toAbsoluteURL } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getPlayerUrlGeneral(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getPlayerUrlGeneral(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getPlayerUrlHeight(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getPlayerUrlHeight(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})
@ -27,7 +28,7 @@ export default function getPlayerUrlHeight(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 1, content)
assign(result, 1, decode(content))
}
},
})

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getPlayerUrlWidth(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getPlayerUrlWidth(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})
@ -27,7 +28,7 @@ export default function getPlayerUrlWidth(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 1, content)
assign(result, 1, decode(content))
}
},
})

View File

@ -1,3 +1,4 @@
import { decode } from "html-entities"
import { assign } from "../common"
import type { PrioritizedReference } from "../common"
@ -11,7 +12,7 @@ export default function getSiteName(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -19,7 +20,7 @@ export default function getSiteName(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})

View File

@ -13,7 +13,7 @@ export default function getTitle(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 3, content)
assign(result, 3, decode(content))
}
},
})
@ -21,7 +21,7 @@ export default function getTitle(url: URL, html: HTMLRewriter) {
element(element) {
const content = element.getAttribute("content")
if (content) {
assign(result, 2, content)
assign(result, 2, decode(content))
}
},
})