123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.cloudEventFromProtoToJson = void 0;
- const error_1 = require("../error");
- const BUILT_IN_ATTRS = ["time", "datacontenttype", "subject"];
- function cloudEventFromProtoToJson(ce) {
- if (ce["id"] === undefined) {
- throw new error_1.FirebaseError("CloudEvent 'id' is required.");
- }
- if (ce["type"] === undefined) {
- throw new error_1.FirebaseError("CloudEvent 'type' is required.");
- }
- if (ce["specVersion"] === undefined) {
- throw new error_1.FirebaseError("CloudEvent 'specVersion' is required.");
- }
- if (ce["source"] === undefined) {
- throw new error_1.FirebaseError("CloudEvent 'source' is required.");
- }
- const out = {
- id: ce["id"],
- type: ce["type"],
- specversion: ce["specVersion"],
- source: ce["source"],
- subject: getOptionalAttribute(ce, "subject", "ceString"),
- time: getRequiredAttribute(ce, "time", "ceTimestamp"),
- data: getData(ce),
- datacontenttype: getRequiredAttribute(ce, "datacontenttype", "ceString"),
- };
- for (const attr in ce["attributes"]) {
- if (BUILT_IN_ATTRS.includes(attr)) {
- continue;
- }
- out[attr] = getRequiredAttribute(ce, attr, "ceString");
- }
- return out;
- }
- exports.cloudEventFromProtoToJson = cloudEventFromProtoToJson;
- function getOptionalAttribute(ce, attr, type) {
- return ce["attributes"][attr][type];
- }
- function getRequiredAttribute(ce, attr, type) {
- const val = ce["attributes"][attr][type];
- if (val === undefined) {
- throw new error_1.FirebaseError("CloudEvent must contain " + attr + " attribute");
- }
- return val;
- }
- function getData(ce) {
- const contentType = getRequiredAttribute(ce, "datacontenttype", "ceString");
- switch (contentType) {
- case "application/json":
- return JSON.parse(ce["textData"]);
- case "text/plain":
- return ce["textData"];
- case undefined:
- return undefined;
- default:
- throw new error_1.FirebaseError("Unsupported content type: " + contentType);
- }
- }
|