UNPKG

@cf-wasm/og

Version:

Generate Open Graph Images dynamically from HTML/CSS without a browser.

60 lines (59 loc) 2.18 kB
const require_render = require("./render.cjs"); const require_constants = require("./constants.cjs"); //#region src/core/response.ts function renderAsResponse(input, options) { const isSvg = options?.format === "svg"; const headers = new Headers(options?.headers); if (!headers.has("Cache-Control")) if (typeof process === "object" && process !== null && typeof process.env === "object" && process.env !== null && process.env.NODE_ENV === "development") headers.set("Cache-Control", "no-cache, no-store"); else headers.set("Cache-Control", "public, immutable, no-transform, max-age=31536000"); headers.set("Content-Type", isSvg ? "image/svg+xml" : "image/png"); const init = { headers, status: options?.status, statusText: options?.statusText }; if (options && typeof options === "object" && "cf" in options) Object.assign(init, { cf: options.cf }); const body = async () => { const [element, renderOptions] = await input(); const renderer = require_render.render(element, renderOptions); const { image } = isSvg ? await renderer.asSvg() : await renderer.asPng(); return image; }; const stream = () => { return new ReadableStream({ start(controller) { body().then((body) => { const bytes = typeof body === "string" ? require_constants.CONTAINER.encoder.encode(body) : body; controller.enqueue(bytes); controller.close(); }).catch((e) => { controller.error(e); }); } }); }; return { body, stream, init }; } /** A class for rendering {@link ReactNode} to image as {@link Response} */ var ImageResponse = class extends Response { /** * Creates an instance of {@link ImageResponse} * * @param element The {@link ReactNode} * @param options The {@link ImageResponseOptions} */ constructor(element, options) { const { stream, init } = renderAsResponse(() => [element, options], options); super(stream(), init); } static async async(element, options) { const { body, init } = renderAsResponse(() => [element, options], options); return new Response(await body(), init); } }; //#endregion exports.ImageResponse = ImageResponse; exports.renderAsResponse = renderAsResponse; //# sourceMappingURL=response.cjs.map