Skip to content
This repository has been archived by the owner on Mar 8, 2023. It is now read-only.
/ node-repl-await Public archive

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

License

Notifications You must be signed in to change notification settings

ayonli/node-repl-await

Repository files navigation

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.

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published