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

patchcore

v2.2.0

Published

minimal core for ssb clients

Downloads

772

Readme

patchcore

a shared library to build ssb apps

or the shared assumptions of all (or most) ssb related applications

required sbot plugins

apps

here's a list of apps in the wild using patchcore:

plugins

here's a list of plugins that build on top of patchcore:

depject

to use this you must understand depject but also the historical context - depject is short for ~dependency injection" it was intended to make software that was very easy to add features to, but this didn't really work out. And most of the applications built on it embrace "strong opinions" but still happen to use depject, which is now inconvienient to change, because it's used throughout the entire app.

directory structure

the patchcore files are organized in the following hierarchy:

${topic} / ${type} / ${module}.js

or when module name is different from file name (this only happens within message/html):

${topic} / ${type} / ${module} / ${file}.js

some cases, the module is skipped (in topics: about, contact, backlinks, feed)

${topic} / ${type}.js

and, (only in backlinks/obs topic/type) the type and module are part of the same name.

{$topic=backlinks} / ${type=obs}-$name}

finally, the config, emoji, keys, and sbot topics types. it's just a single javascript.

${topic}.js

topics

  • lib (junk that isn't part of any topic and should really be published as a reusable module, but too lazy)
  • about - functions relating to about messages, for setting avatars and names.
  • blob - related to images and files
  • config - config.sync.load method that loads config.
  • contact - related to contact messages, for following and blocking.
  • emoji - :dancer: :tada: :joy_cat: :haircut_woman:
  • [feed](./docs/index.md#feed - stuff related to feeds - aka streams of messages by one or more user
  • invite - using invite codes
  • keys - load the main identity
  • message - relating to messages generically, i.e. publishing messages or rendering things that are the same for multiple different message types.
  • router
  • sbot

types

  • sync a function that returns an ordinary javascript value, such as a string or number. Usually a simple utility function.
  • async a function that takes a callback, and does IO. It may query the database or publish a message.
  • pull returns pull-stream source, sink, or through. Sometimes pull type returns a function that then creates a pull stream.
  • obs sometimes, return a mutant observable this is generally for things that change in real time or may load slowly, and you usually want to display them as a single thing (i.e. number of likes, or an avatar name). sometimes obs really just wrap async methods, but obs play more nicely with mutant than async functions do, other times obs functions directly expose a obs, or expose a function that you pass the listener to.
  • html returns an HtmlElement this may have dynamic behaviour.

license

AGPL-3.0