htmlrewriter
Version:
Use Cloudflare HTMLRewriter in Node.js, Browser, Next.js and more
101 lines (93 loc) • 2.71 kB
text/typescript
import { describe, expect, it, test } from 'vitest'
import { HTMLRewriter } from 'htmlrewriter'
test(
'errors',
async () => {
const abortController = new AbortController()
const res = await fetch('https://framer.com/marketplace', {
signal: abortController.signal,
})
const transform = new HTMLRewriter()
.on('a', {
element(element) {
throw new Error('aborted')
},
})
.transform(res)
const err = await transform.text().catch((e) => e)
expect(err).toBeInstanceOf(Error)
expect(err.message).toContain('aborted')
},
1000 * 10,
)
test(
'abort',
async () => {
const abortController = new AbortController()
const res = await fetch('https://framer.com/marketplace', {
signal: abortController.signal,
})
const err = await new HTMLRewriter()
.on('a', {
element(e) {
const href = e.getAttribute('href')
// console.log('href', href)
if (href && href.includes('/template/')) {
abortController.abort()
}
},
})
.transform(res)
.text()
.catch((e) => e)
// expect(err).toBeInstanceOf(Error)
// expect(err.message).toContain('aborted')
// console.log(err)
// console.log(err)
},
1000 * 10,
)
test(
'works',
async () => {
const res = await fetch('https://framer.com', {
headers: {
accept: 'text/html',
},
})
const transform = new HTMLRewriter()
.on('a', {
element(element) {
element.remove()
},
})
.transform(res)
const text = await transform.text()
expect(text).toContain('<meta')
expect(text).not.toContain('<a ')
},
1000 * 10,
)
test(
'works on non-html',
async () => {
const res = await fetch('https://json.schemastore.org/fly.json', {
headers: {
// accept: 'text/html',
},
})
let resClone = res.clone()
const transform = new HTMLRewriter()
.on('a', {
element(element) {},
})
.transform(res)
const text = await transform.text()
// console.log(text)
expect(text).toEqual(await resClone.text())
},
1000 * 10,
)
function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms))
}