summaryrefslogtreecommitdiff
path: root/node_modules/sucrase/dist/util/isAsyncOperation.js
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:54:57 +0100
committerPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:57:48 +0100
commitb1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c (patch)
tree49d360fd6cbc6a2754efe93524ac47ff0fbe0f7d /node_modules/sucrase/dist/util/isAsyncOperation.js
Docs
Diffstat (limited to 'node_modules/sucrase/dist/util/isAsyncOperation.js')
-rw-r--r--node_modules/sucrase/dist/util/isAsyncOperation.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/node_modules/sucrase/dist/util/isAsyncOperation.js b/node_modules/sucrase/dist/util/isAsyncOperation.js
new file mode 100644
index 0000000..c02023a
--- /dev/null
+++ b/node_modules/sucrase/dist/util/isAsyncOperation.js
@@ -0,0 +1,38 @@
+"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _keywords = require('../parser/tokenizer/keywords');
+
+
+/**
+ * Determine whether this optional chain or nullish coalescing operation has any await statements in
+ * it. If so, we'll need to transpile to an async operation.
+ *
+ * We compute this by walking the length of the operation and returning true if we see an await
+ * keyword used as a real await (rather than an object key or property access). Nested optional
+ * chain/nullish operations need to be tracked but don't silence await, but a nested async function
+ * (or any other nested scope) will make the await not count.
+ */
+ function isAsyncOperation(tokens) {
+ let index = tokens.currentIndex();
+ let depth = 0;
+ const startToken = tokens.currentToken();
+ do {
+ const token = tokens.tokens[index];
+ if (token.isOptionalChainStart) {
+ depth++;
+ }
+ if (token.isOptionalChainEnd) {
+ depth--;
+ }
+ depth += token.numNullishCoalesceStarts;
+ depth -= token.numNullishCoalesceEnds;
+
+ if (
+ token.contextualKeyword === _keywords.ContextualKeyword._await &&
+ token.identifierRole == null &&
+ token.scopeDepth === startToken.scopeDepth
+ ) {
+ return true;
+ }
+ index += 1;
+ } while (depth > 0 && index < tokens.tokens.length);
+ return false;
+} exports.default = isAsyncOperation;