Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

eshost

Package Overview
Dependencies
Maintainers
1
Versions
71
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eshost

Invoke ECMAScript scripts in any command line JS engine.

  • 3.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1.4K
increased by102.03%
Maintainers
1
Weekly downloads
 
Created
Source

eshost

Execute ECMAScript code uniformly across any ECMAScript host environment. See also eshost-cli for an easy way to use this library from the command line.

Using eshost, you can create an agent (eg. a web browser or a command-line ECMAScript host) and evaluate scripts within that agent. Code running within the agent has access to the eshost runtime API which enables code to evaluate scripts, create new realms, handle errors, and so forth all without worrying about the host-specific mechanisms for these capabilities are.

eshost 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.

Installation

npm install eshost

Supported Hosts

HostSupported PlatformsDownloadNotes
nodeAnyhttps://nodejs.org
chWindowsBuilt from sourceChakra console host.
d8AnyBuilt from sourcev8 console host. Errors are reported on stdout. Use $.getGlobal and $.setGlobal to get and set properties of global objects in other realms.
jsshellAnyDownloadSpiderMonkey console host.
jscMacBuilt from source¹
nashornAnyBuilt from source
edgeWindowsErrors reported from Microsoft Edge are all of type Error.
chromeAny
firefoxAnyFirefox Nightly on Windows doesn't appear to work at this time.
safariMac

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');
await runner.initialize();
const result = await runner.exec(`
  print(1+1);
`);
console.log(result.stdout);

Documentation

eshost API

supportedHosts

An array of supported host types.

createAgent(type: string, options = {}): Runner

Gets an instance of a runner for a particular host type. See the table above for supported host types.

Options
  • hostPath: Path to host to execute. For console hosts, this argument is required. For the specific browser runners, hostPath is optional and if omitted, the location for that browser will be detected automatically.
  • hostArguments: Command line arguments used when invoking your host. Not supported for browser hosts. hostArguments is an array of strings as you might pass to Node's spawn API.

Agent API

Runner

initialize(): Promise

Initializes the host and returns a promise that is resolved once the host is initialized. Command line hosts have no initialization as a new process is started for each execution.

This is called for you if you use the createAgent factory.

evalScript(code, options = {}): Promise

Executes code in the host using the Script goal symbol. Returns a promise for a result object.

By default, a script will run in Eshost until the realm is destroyed. For most command-line hosts, this is done automatically when the script execution queues are empty. However, browsers will remain open waiting for more code to become available. Therefore, eshost will automatically append $.destroy() to the end of your scripts. This behavior is not correct if you are attempting to execute asynchronous code. In such cases, add async: true to the options.

Options:

  • async: True if the test is expected to call $.destroy() on the root realm when it's finished. When false, $.destroy() is added for you.
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.
destroy(): Promise

Tears down the agent. For browsers, this will close the browser window.

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();
$.evalScript(code)

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.

FAQs

Package last updated on 11 Jul 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc