참조


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'));
    }
};