summaryrefslogtreecommitdiff
path: root/node_modules/sucrase/dist/util/getImportExportSpecifierInfo.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/getImportExportSpecifierInfo.js
Docs
Diffstat (limited to 'node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js')
-rw-r--r--node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js b/node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js
new file mode 100644
index 0000000..45edb74
--- /dev/null
+++ b/node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js
@@ -0,0 +1,92 @@
+"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _types = require('../parser/tokenizer/types');
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * Determine information about this named import or named export specifier.
+ *
+ * This syntax is the `a` from statements like these:
+ * import {A} from "./foo";
+ * export {A};
+ * export {A} from "./foo";
+ *
+ * As it turns out, we can exactly characterize the syntax meaning by simply
+ * counting the number of tokens, which can be from 1 to 4:
+ * {A}
+ * {type A}
+ * {A as B}
+ * {type A as B}
+ *
+ * In the type case, we never actually need the names in practice, so don't get
+ * them.
+ *
+ * TODO: There's some redundancy with the type detection here and the isType
+ * flag that's already present on tokens in TS mode. This function could
+ * potentially be simplified and/or pushed to the call sites to avoid the object
+ * allocation.
+ */
+ function getImportExportSpecifierInfo(
+ tokens,
+ index = tokens.currentIndex(),
+) {
+ let endIndex = index + 1;
+ if (isSpecifierEnd(tokens, endIndex)) {
+ // import {A}
+ const name = tokens.identifierNameAtIndex(index);
+ return {
+ isType: false,
+ leftName: name,
+ rightName: name,
+ endIndex,
+ };
+ }
+ endIndex++;
+ if (isSpecifierEnd(tokens, endIndex)) {
+ // import {type A}
+ return {
+ isType: true,
+ leftName: null,
+ rightName: null,
+ endIndex,
+ };
+ }
+ endIndex++;
+ if (isSpecifierEnd(tokens, endIndex)) {
+ // import {A as B}
+ return {
+ isType: false,
+ leftName: tokens.identifierNameAtIndex(index),
+ rightName: tokens.identifierNameAtIndex(index + 2),
+ endIndex,
+ };
+ }
+ endIndex++;
+ if (isSpecifierEnd(tokens, endIndex)) {
+ // import {type A as B}
+ return {
+ isType: true,
+ leftName: null,
+ rightName: null,
+ endIndex,
+ };
+ }
+ throw new Error(`Unexpected import/export specifier at ${index}`);
+} exports.default = getImportExportSpecifierInfo;
+
+function isSpecifierEnd(tokens, index) {
+ const token = tokens.tokens[index];
+ return token.type === _types.TokenType.braceR || token.type === _types.TokenType.comma;
+}