npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@milliejs/store-google-pubsub

v0.3.1-alpha.0

Published

A Google PubSub adapter for the MillieJS incremental store utility

Downloads

8

Readme

MillieJS: Google PubSub Store

Getting Started

Installation

npm add milliejs @milliejs/store-google-pubsub

Usage

import MillieJS from "milliejs"
import MillieCRUDStore from "@milliejs/store-*"
import GooglePubSubStore from "@milliejs/store-google-pubsub"
import MillieMemoryStore from "@milliejs/store-*"

const millie = new MillieJS()

const replicaStore = new MillieMemoryStore({})

const muUpstreamCRUDInterface = new MillieCRUDStore({})
const myUpstreadGooglePubSubInterface = new GooglePubSubStore(
  {
    // ... Google PubSub options ...
  },
  ["person-subscription"],
  (message) => {
    const { attributes, data } = message
    const entiry = JSON.parse(data.toString())
    return {
      eventName: "millie:save", // or "millie:delete"
      entity,
    }
  },
)

const personResource = { id: "person" }
millie.registerResource(personResource, replicaStore, {
  sourcePublisher: muUpstreamCRUDInterface,
  sourceSubscriber: myUpstreadSubscriberInterface,
})

Configuration

PubSub Client

The first argument of the GooglePubSub Store follows the shape of the Google PubSub SDK's PubSub configuration. More information can be found in the Google documentation.

Subscriptions

The second argument is an array of subscription names the Google PubSub Store should attach to. These subscriptions should exist prior to the invocation of the class so that the Google PubSub Store can find it.

Message Parser

The third argument is a callback for processing incoming PubSub messages, providing you the opportunity to integrate with any Google PubSub system. The message processor is invoked with incoming messages matching the Google PubSub Message shape. More information can be found in the Google documentation.

The parser should return an object with two properties: eventName and entity. The event name should be one of "millie:save" or "millie:delete" depending on the lifecycle of the underlying entity. The entity itself should follow the MillieJS Entity shape.

MillieJS takes care to acknowledge the message after parsing and processing has completed.

Subscription interface

MillieJS provides a simple interface between your stores with all of the complex logic working behind the scenes to provide the most up-to-date data.

millie.on(personResource, "millie:delta", (entity) => {
  console.log("Person updated: " + entity.data.name)
})

Contributing

The MillieJS library is currently in its early development stages and is welcoming contributions, feature requests, and feedback.

Disclaimer

The MillieJS library is currently in its early development stages and is not ready for use in production applications. There may be bugs and performance issues that have not yet been addressed. Use the library at your own risk and be sure to thoroughly test any implementation before deploying it to a live environment.

Please note that the API and functionality may change as the library evolves and stabilizes. If you choose to use MillieJS in your project, we recommend regularly checking for updates and making any necessary modifications to your code to ensure compatibility.

In summary, do not use the MillieJS library in a production environment until further notice.

MillieJS is not affiliated with or endorsed by Google Cloud Platform or its Google PubSub product. "Google", "Google Cloud", and "Google Cloud Platform" are registered trademarks of Google LLC. MillieJS provides an adapter to facilitate integration with Google Cloud Platform's PubSub product using their SDK, but it is an independent open-source project. The use of these trademarks is solely for the purpose of identifying the compatibility of MillieJS with the mentioned services.