참조
const consumeStream = async (stream: ReadableStream): Promise<void> => {
const reader = stream.getReader();
while (!(await reader.read()).done) {
// DO NOTHING
}
};
const parseResponse = (response: Response): Promise<string[]> => {
return new Promise((resolve, reject) => {
const result: string[] = [];
const rewriter = new HTMLRewriter()
.on('img[src]', {
element(element) {
result.push(`https://httpstatusdogs.com/${element.getAttribute('src')!}`);
}
});
consumeStream(rewriter.transform(response).body!)
.catch(reject)
.then(()=> resolve(result));
});
};
export default {
async fetch(
request: Request,
workerSecret: {},
workerContext: ExecutionContext
): Promise<Response> {
const response = await fetch("https://httpstatusdogs.com/");
const parsedUrls = await parseResponse(response);
return new Response(JSON.stringify(parsedUrls, null, '\t'));
}
};