@sagi.io/workers-pubsub
Version:
Google Pub/Sub API for Cloudflare Workers
59 lines (45 loc) • 1.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setGlobals = exports.keepTruthyProperties = exports.injectBaseInputs = exports.createPubSubMessage = void 0;
require("@sagi.io/globalthis");
var _jsBase = require("js-base64");
const ERR_PREFIX = `@sagi.io/workers-pubsub`;
const keepTruthyProperties = obj => Object.entries(obj).reduce((acc, [k, v]) => ({ ...acc,
...(v ? {
[k]: v
} : {})
}), {}); // https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage
exports.keepTruthyProperties = keepTruthyProperties;
const createPubSubMessage = ({
message = null,
attributes = null,
ordering_key = null
} = {}) => {
if (!message && !attributes) {
throw new Error(`${ERR_PREFIX}: must either have a non-empty message field or at least one attribute.`);
}
const data = message ? _jsBase.Base64.encode(message, true) : null;
const psMessage = {
data,
attributes,
ordering_key
};
return keepTruthyProperties(psMessage);
};
exports.createPubSubMessage = createPubSubMessage;
const setGlobals = (fetchImpl = null) => {
if (!globalThis.fetch) {
if (!fetchImpl) {
throw new Error(`${ERR_PREFIX}: No fetch nor fetchImpl were found.`);
} else {
globalThis.fetch = fetchImpl;
}
}
};
exports.setGlobals = setGlobals;
const injectBaseInputs = (baseInputs, fnObj) => Object.entries(fnObj).reduce((acc, [name, fn]) => ({ ...acc,
[name]: fn(baseInputs)
}), {});
exports.injectBaseInputs = injectBaseInputs;