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

es-host-wrapper

v1.2.0

Published

Invoke ECMAScript scripts in any command line JS engine.

Downloads

5

Readme

es-host-wrapper

Es-host-wrapper is a library for executing ECMAScript code uniformly across any ECMAScript host environment. Es-host-wrapper consists of a wrapper around the various ways of executing a host and processing its output (called a Runner) and a runtime library for host-agnostic scripts to use.

For a CLI tool that uses this library to make comparing ECMAScript hosts super easy, see eshost.

Installation

npm install es-host-wrapper

Supported Hosts

| Host | Supported Platforms | Download | Notes | |------|---------------------|----------|-------| | browser | Any | | Errors reported from Microsoft Edge are all of type Error. | | node | Any | https://nodejs.org | | | ch | Windows | Built from source| Chakra console host. | | d8 | Any | Built from source | v8 console host. Errors are reported on stdout. Use $.getGlobal and $.setGlobal to get and set properties of global objects in other realms. | | jsshell | Any | Download | SpiderMonkey console host. | | jsc | Mac | Built from source¹ | | | nashorn | Any | Built from source | |

1: Also available on your Mac system at /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc.

Examples

const runner = js.getRunner('path/to/d8.exe', 'd8');
runner.exec(`
  print(1+1);
`).then(result => console.log(result.stdout));

Documentation

es-host-wrapper API

getRunner(path, type, arguments)

Gets an instance of a runner for a particular host type. Supported host types:

  • browser
  • node
  • d8
  • jsshell
  • ch

Creating a runner may start the host (eg. for the browser, creating the host executes the browser process).

You can pass command line arguments to the host process using the arguments option. It is an array of strings as you might pass to Node's spawn API.

Runner API

exec(code)

Executes code in the host. Returns a result object.

Result Object

An object with the following keys:

  • stdout: anything printed to stdout (mostly what you print using print).
  • stderr: anything printed to stderr
  • error: if the script threw an error, it will be an error object. Else, it will be null.

The error object is similar to the error object you get in the host itself. Namely, it has the following keys:

  • name: Error name (eg. SyntaxError, TypeError, etc.)
  • message: Error message
  • stack: An array of stack frames.

Runtime Library

print(str)

Prints str to stdout.

$.global

A reference to the global object.

$.createRealm(globals)

Creates a new realm, returning that realm's runtime library ($).

For example, creating two nested realms:

$sub = $.createRealm();
$subsub = $sub.createRealm();

$.evalInNewRealm(code, onError)

Creates a new realm and evals code in that realm. If an error is thrown, it will be passed to the onError callback.

$.evalInNewScript(code, onError)

Creates a new script and evals code in that realm. If an error is thrown, it will be passed to the onError callback.

Scripts are different from eval in that lexical bindings go into the global lexical contour rather than being scoped to the eval.

$.getGlobal(name)

Gets a global property name.

$.setGlobal(name, value)

Sets a global property name to value.