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

fbp-manifest

v0.3.1

Published

Flow-Based Programming Manifest tools

Downloads

532

Readme

Flow-Based Programming Manifest Tools

This repository provides a schema for Flow-Based Programming manifest (fbp.json) files, as well as tools for populating and validating them. The purpose of FBP manifest files is to provide a platform-agnostic registry of flow-based components available in a project.

Manifest files can be used by the FBP runtimes themselves for component loading, and is also useful for development tools like Flowhub or DrawFBP.

Status

Used in production with NoFlo, both for Node.js and for producing browser builds.

Tools

  • fbp-manifest-list: Discover available components and list them
  • fbp-manifest-deps: Produce a manifest consisting only of dependencies of a given component
  • fbp-manifest-stats: Show component reuse statistics for a project
  • fbp-manifest-validate: Validate a FBP manifest file against the schema

Runtime support

FBP Manifest has been designed to have a plugin architecture where the developers of different flow-based runtimes can add support for their system. See src/runtimes for how to do this. Runtimes can of course also just implement fbp.json generation and consumption on their own, and merely utilize the JSON schemas from this project to validate their structure.

Currently supported FBP runtimes are:

Manifest structure

FBP manifests consist of the following information:

  • version: version of the manifest specification, currently 1
  • modules: array of module definitions
  • main: (optional) main component definition for running the project

The modules are objects with the following:

  • name: name of the module
  • runtime: runtime the module is for, for example noflo-nodejs
  • base: base directory path of the module, relative to project root
  • components: array of components contained in the module
  • description: (optional) human-readable description for the module
  • icon: (optional) default icon for components of the module, following Font Awesome naming conventions

Modules supporting multiple runtimes can appear multiple times in a manifest, once per each supported runtime. For example a NoFlo module that has some common components, and specific components for Node.js and browsers may have three entries with specific runtimes: noflo, noflo-nodejs, and noflo-browser. A manifest can contain modules for an arbitrary number of different runtimes.

Components are objects with the following:

  • name: name of the component
  • path: path used for executing the component. For example a Node.js require path or Java class path
  • exec: command used for starting an instance of the component for components that are standalone processes
  • elementary: boolean on whether the component is elementary (code) or not (graph)
  • source: (optional) path to the source code of the component, in case it differs from the component path
  • tests: (optional) path to the test suite of the component, typically pointing to a fbp-spec file
  • inports: (optional) array of inport definitions for the component
  • outports: (optional) array of outport definitions for the component

Each component needs to provide at minimum the information the runtime needs to run it. Additionally it can provide metadata usable for flow-based programming tools like a ports listing. Either path or exec needs to be provided.

The full manifest structure can be found in the schema. Manifest files can be validated against the JSON schema or with the fbp-manifest-validate tool.

Extending

It is possible to extend the manifest files with custom runtime-specific information. To do this, place the custom values under a key named after the runtime they're for. So, for example NoFlo's custom information about a component would go under a noflo key:

{
  "name": "Merge",
  "path": "components/Merge.js",
  "source": "components/Merge.coffee",
  "elementary": true,
  "noflo": {
    "async": false
  }
}

Background

Changes

  • 0.3.1 (2020-12-16)
    • The package now ships with TypeScript declarations
  • 0.3.0 (2020-12-16)
    • Ported from callbacks to Promises
  • 0.2.7 (2020-12-01)
    • TypeScript definition files (.d.ts) are not considered as components
  • 0.2.6 (2020-09-23)
    • If there are multiple spec files for a module, the fbp-spec file will be used by fbp-manifest
  • 0.2.5 (2020-09-23)
    • Added support for populating tests for each module
  • 0.2.4 (2020-09-17)
    • Fixed a minor bug with collecting NoFlo graphs
  • 0.2.2 (2020-09-17)
    • Added support for finding NoFlo TypeScript components