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

isolex-oot-example

v0.9.1

Published

isolex bot out-of-tree example service

Downloads

3

Readme

isolex Out-of-Tree Example

This is an example service (that doesn't do much) for the isolex bot.

What is an out-of-tree service?

Services are classes instantiated and managed by the bot, passed configuration and lifecycle events. Most services live in the same repository (git tree) as the app's main function.

With https://github.com/ssube/isolex/pull/305, the bot is able to require JS modules and load services from outside of the original source. This allows service developers to test services without recompiling the entire bot and publish service images based on the bot image (using docker's FROM).

How do out-of-tree schemas work?

Services are created by the bot, based on metadata in the config file. The BotService constructor takes a schema key against which to validate the config data before the service is started. Most services use schema objects in the isolex#/definitions path, but out-of-tree services need to provide their own schema and key.

To provide a schema, the module should fetch it from the DI container with container.create(INJECT_SCHEMA) and call addSchema with a partial schema (which can reference the existing isolex schema). Schemas are currently global and top-level names can conflict, but should be made module-specific.

How is this service installed?

During development, the best way to install an out-of-tree service is with yarn link. The service repo must have a valid package.json for this to work.

In the service repo, run yarn link. It will print a message with the package name, like:

yarn link v1.13.0
success Registered "isolex-oot-example".
info You can now run `yarn link "isolex-oot-example"` in the projects where you want to use this package and it will be used instead.

In the isolex repo, run yarn link "isolex-oot-example" to install your module and service.

For production, the service module should be published to a registry and installed with yarn add [email protected].

When creating a docker image, either method can be used, with the module COPY'd into the image before being linked.

How is this service configured?

This service does not implement any real functionality, but does implement the basic methods to be registered as a parser:

metadata:
  kind: bot
  name: isolex
data:
  parsers:
    - metadata:
        kind: example-service
        name: test-example-service
      data:
        foo: bar

Is the interface stable?

No.

Some necessary classes and symbols from the bot are currently exported via webpack's library feature as the global variable isolex. This requires re-exporting classes from https://github.com/ssube/noicejs and loses the namespace for anything exported. A better way is needed to pass these base classes to external modules.