@cf-wasm/og
Version:
Generate Open Graph Images dynamically from HTML/CSS without a browser.
80 lines (78 loc) • 2.79 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/core/response.ts
var response_exports = {};
__export(response_exports, {
BaseResponse: () => BaseResponse,
ImageResponse: () => ImageResponse
});
module.exports = __toCommonJS(response_exports);
var import_constants = require("./constants.js");
var import_render = require("./render.js");
var BaseResponse = class extends Response {
constructor(input, options = {}) {
const isSvg = options?.format === "svg";
const result = new ReadableStream({
start(controller) {
Promise.resolve(input()).then(([element, renderOptions]) => {
const renderer = (0, import_render.render)(element, renderOptions);
return isSvg ? renderer.asSvg() : renderer.asPng();
}).then(({ image }) => {
const bytes = typeof image === "string" ? import_constants.CONTAINER.encoder.encode(image) : image;
controller.enqueue(bytes);
controller.close();
}).catch((e) => {
controller.error(e);
});
}
});
const headers = new Headers(options?.headers);
if (!headers.has("Cache-Control")) {
headers.set("Cache-Control", "public, immutable, no-transform, max-age=31536000");
}
headers.set("Content-Type", isSvg ? "image/svg+xml" : "image/png");
const responseInit = {
headers,
status: options?.status,
statusText: options?.statusText
};
if (options && typeof options === "object") {
if ("cf" in options) {
Object.assign(responseInit, { cf: options.cf });
}
}
super(result, responseInit);
}
};
var ImageResponse = class extends BaseResponse {
/**
* Creates an instance of {@link ImageResponse}
*
* @param element The {@link ReactNode}
* @param options The {@link ImageResponseOptions}
*/
constructor(element, options) {
super(() => [element, options], options);
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
BaseResponse,
ImageResponse
});