mirror of
https://github.com/arthur-pbty/portfolio2023.git
synced 2026-06-03 23:36:21 +02:00
62 lines
1.8 KiB
Markdown
62 lines
1.8 KiB
Markdown
# 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](https://nodejs.org/dist/latest-v11.x/docs/api/repl.html#repl_await_keyword)
|
|
for more details, and contribute to the
|
|
[original source](https://github.com/nodejs/node/blob/master/lib/internal/repl/await.js).
|
|
|
|
## Example
|
|
|
|
```javascript
|
|
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
|
|
|
|
```typescript
|
|
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
|
|
|
|
```js
|
|
(async () => { /* source code */ })()
|
|
```
|
|
|
|
If no `await` presents or processing failed, the function returns `null`. |