Cache Tags using Workers
Send Additional Cache Tags using Workers
export default {  async fetch(request) {    const requestUrl = new URL(request.url);    const params = requestUrl.searchParams;    const tags =      params && params.has("tags") ? params.get("tags").split(",") : [];    const url =      params && params.has("uri") ? JSON.parse(params.get("uri")) : "";    if (!url) {      const errorObject = {        error: "URL cannot be empty",      };      return new Response(JSON.stringify(errorObject), { status: 400 });    }    const init = {      cf: {        cacheTags: tags,      },    };    return fetch(url, init)      .then((result) => {        const cacheStatus = result.headers.get("cf-cache-status");        const lastModified = result.headers.get("last-modified");        const response = {          cache: cacheStatus,          lastModified: lastModified,        };        return new Response(JSON.stringify(response), {          status: result.status,        });      })      .catch((err) => {        const errorObject = {          error: err.message,        };        return new Response(JSON.stringify(errorObject), { status: 500 });      });  },};export default {  async fetch(request): Promise<Response> {    const requestUrl = new URL(request.url);    const params = requestUrl.searchParams;    const tags =      params && params.has("tags") ? params.get("tags").split(",") : [];    const url =      params && params.has("uri") ? JSON.parse(params.get("uri")) : "";    if (!url) {      const errorObject = {        error: "URL cannot be empty",      };      return new Response(JSON.stringify(errorObject), { status: 400 });    }    const init = {      cf: {        cacheTags: tags,      },    };    return fetch(url, init)      .then((result) => {        const cacheStatus = result.headers.get("cf-cache-status");        const lastModified = result.headers.get("last-modified");        const response = {          cache: cacheStatus,          lastModified: lastModified,        };        return new Response(JSON.stringify(response), {          status: result.status,        });      })      .catch((err) => {        const errorObject = {          error: err.message,        };        return new Response(JSON.stringify(errorObject), { status: 500 });      });  },} satisfies ExportedHandler;from pyodide.ffi import to_js as _to_jsfrom js import Response, URL, Object, fetch
def to_js(x):    return _to_js(x, dict_converter=Object.fromEntries)
async def on_fetch(request):    request_url = URL.new(request.url)    params = request_url.searchParams    tags = params["tags"].split(",") if "tags" in params else []    url = params["uri"] or None
    if url is None:        error = {"error": "URL cannot be empty"}        return Response.json(to_js(error), status=400)
    options = {"cf": {"cacheTags": tags}}    result = await fetch(url, to_js(options))
    cache_status = result.headers["cf-cache-status"]    last_modified = result.headers["last-modified"]    response = {"cache": cache_status, "lastModified": last_modified}
    return Response.json(to_js(response), status=result.status)