UNPKG

functional-google-cloud

Version:

Google Cloud Utilities functions in Functional Programming Style

22 lines 1.42 kB
import * as E from 'fp-ts/lib/Either'; import * as R from 'fp-ts/lib/Reader'; import { fromTask as getTaskEitherFromTask } from 'functional-types/lib/fp-ts/TaskEither'; import { is, pipe, prop } from 'ramda'; // isPayload :: a -> bool export const isPayload = (a) => is(Object)(a); // getBufferFromPayload :: Object -> Buffer export const getBufferFromPayload = pipe(JSON.stringify, Buffer.from); // publishBufferToTopicTask :: Buffer -> ReaderTask Topic String export const publishBufferToTopicTask = (buffer) => (topic) => () => topic.publish(buffer); // publishBufferToTopic :: Buffer -> ReaderTaskEither Topic String Error export const publishBufferToTopic = pipe(publishBufferToTopicTask, R.map(getTaskEitherFromTask)); // publishToTopic :: Payload -> ReaderTaskEither Topic String Error export const publishToTopic = pipe(getBufferFromPayload, publishBufferToTopic); // getTopicFromPubSub :: string -> Reader PubSub Topic export const getTopicFromPubSub = (topic) => (pubSub) => pubSub.topic(topic); // getPayloadFromMessage :: Message -> Either A Error export const getPayloadFromMessage = pipe(prop('data'), (buffer) => () => { const base64 = Buffer.from(buffer, 'base64'); return JSON.parse(base64.toString()); }, (a) => E.tryCatch(a, E.toError), E.chain(E.fromPredicate(isPayload, () => new Error('Message data is not a Payload instance.')))); //# sourceMappingURL=PubSub.js.map