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

@infrascan/cytosnap

v0.1.1

Published

Render images of Cytoscape.js graphs on the server

Downloads

4

Readme

@infrascan/cytosnap

This is a fork of the original cytosnap package. This fork is designed to make it easier to run cytosnap in a lambda by decoupling it from puppeteer, allowing an instance of chrome-aws-lambda or @sparticuz/chromium to be passed in.

If you do not require a custom puppeteer instance, you should use cytosnap.

Render graphs on the server side with Cytoscape.js, getting image files as output. This package uses Puppeteer to generate the output. Refer to the Puppeteer documentation to ensure that your machine is configured properly to run Chrome headlessly.

This project was initiated at MozSprint 2016

How to contribute

Please refer to CONTRIBUTING.md.

Usage

Quick start example:

var cytosnap = require('cytosnap');
var chromium = require('chrome-aws-lambda');

// list of layout extensions to use
// NB you must `npm install` these yourself for your project
cytosnap.use([ 'cytoscape-dagre', 'cytoscape-cose-bilkent' ]);

var snap = cytosnap(() => chromium.puppeteer.launch());

snap.start().then(function(){
  return snap.shot({
    elements: [ // http://js.cytoscape.org/#notation/elements-json
      { data: { id: 'foo' } },
      { data: { id: 'bar' } },
      { data: { source: 'foo', target: 'bar' } }
    ],
    layout: { // http://js.cytoscape.org/#init-opts/layout
      name: 'grid' // you may reference a `cytoscape.use()`d extension name here
    },
    style: [ // http://js.cytoscape.org/#style
      {
        selector: 'node',
        style: {
          'background-color': 'red'
        }
      },
      {
        selector: 'edge',
        style: {
          'line-color': 'red'
        }
      }
    ],
    resolvesTo: 'base64uri',
    format: 'png',
    width: 640,
    height: 480,
    background: 'transparent'
  });
}).then(function( img ){
  // do whatever you want with img
  console.log( img );
});

cytosnap.use()

Pull in layout extensions that you may used in the exported images:

cytosnap.use([ 'cytoscape-dagre', 'cytoscape-cose-bilkent' ]);

Each string is an npm package name that can be pulled in by require(). The list of extension package names that you specify is static: You may specify the list only once, so make sure the list includes all layouts you want to run. Every snap object shares the same extension list.

cytosnap()

Initialise an instance of Cytosnap:

var options = {};

var snap = cytosnap(options);

// or

var snap = new cytosnap(options);

The options you can pass include:

snap.start( [next] )

Start up the Cytosnap instance, snap, so we can request that it generate images:

Promise style:

snap.start().then(function(){ // promise resolved on start
  console.log('chained start promise');
});

Node callback style using next:

snap.start(function( err ){
  console.log('called on start');
});

snap.shot( options, [next] )

Generate a snapshot of a graph:

var defaultOptions = {
  // cytoscape.js options
  elements: undefined, // cytoscape.js elements json
  style: undefined, // a cytoscape.js stylesheet in json format (or a function that returns it)
  layout: undefined // a cytoscape.js layout options object (or a function that returns it)
  // (specifying style or layout via a function is useful in cases where you can't send properly serialisable json)

  // image export options
  resolvesTo: 'base64uri', // output, one of 'base64uri' (default), 'base64', 'stream', or 'json' (export resultant node positions from layout)
  format: 'png', // 'png' or 'jpg'/'jpeg' (n/a if resolvesTo: 'json')
  quality: 85, // quality of image if exporting jpg format, 0 (low) to 100 (high)
  background: 'transparent', // a css colour for the background (transparent by default)
  width: 200, // the width of the image in pixels
  height: 200 // the height of the image in pixels
};

// promise style
snap.shot( defaultOptions ).then(function( img ){
  console.log('on resolve');
}).catch(function( err ){
  console.log('on error');
});

// node callback style
snap.shot( defaultOptions, function( err, img ){
  console.log('on error or resolve');
} );

snap.stop( [next] )

Stop the Cytosnap instance:

Promise style:

snap.stop().then(function(){ // promise resolved on stop
  console.log('chained stop promise');
});

Node callback style using next:

snap.stop(function( err ){
  console.log('called on stop');
});

Targets

  • npm test : Run Mocha tests in ./test