Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including node-repl-await with all npm packages installed. Try it out:

var nodeReplAwait = require("node-repl-await")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

node-repl-await v0.1.1

Standalone util function from Node.js core to process await statements in REPL.

Node's processTopLevelAwait

Standalone util function from Node.js core to process await statements in REPL.

Since v10.0.0, Node.js introduced a new experimental feature to support await keyword in the REPL by using the argument --experimental-repl-await, however, if a user wants to implement a custom REPL console, there would be no await-support at all, to achieve such a goal, this package clones the internal module of await-support to form a standalone version, allowing users share the benefits of await-support in their own REPL environments.

See Node.js docs for more details, and contribute to the original source.

Example

const repl = require("repl");
const vm = require("vm");
const { processTopLevelAwait } = require("node-repl-await");

function isRecoverableError(error) {
    if (error.name === 'SyntaxError') {
        return /^(Unexpected end of input|Unexpected token)/.test(error.message);
    }
    return false;
}

async function myEval(code, context, filename, callback) {
    code = processTopLevelAwait(code) || code;

    try {
        let result = await vm.runInNewContext(code, context);
        callback(null, result);
    } catch (e) {
        if (isRecoverableError(e)) {
            callback(new repl.Recoverable(e));
        } else {
            console.log(e);
        }
    }
}

repl.start({ prompt: '> ', eval: myEval });

API

function processTopLevelAwait(src: string): string | void

Tries to wrap the given source code to an immediately-invoked function if it contains any top level await statement in the form of

(async () => { /* source code */ })()

If no await presents or processing failed, the function returns null.

Metadata

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free