Files
Fluxup_PAP/node_modules/babel-preset-expo/build/babel-plugin-transform-export-namespace-from.js
2026-03-10 16:18:05 +00:00

51 lines
2.3 KiB
JavaScript

"use strict";
/**
* Copyright (c) 650 Industries (Expo). All rights reserved.
* Copyright (c) 2014-present Sebastian McKenzie and other contributors
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
Object.defineProperty(exports, "__esModule", { value: true });
// Original: https://github.com/babel/babel/blob/e5c8dc7330cb2f66c37637677609df90b31ff0de/packages/babel-plugin-transform-export-namespace-from/src/index.ts
// NOTE: Original plugin asserts that Babel version 7 or newer is used. This was removed for simplicity.
exports.default = ({ types: t }) => ({
name: 'transform-export-namespace-from',
manipulateOptions: process.env.BABEL_8_BREAKING
? undefined
: (_, parser) => parser.plugins.push('exportNamespaceFrom'),
visitor: {
ExportNamedDeclaration(path) {
const { node, scope } = path;
const { specifiers } = node;
const index = t.isExportDefaultSpecifier(specifiers[0]) ? 1 : 0;
if (!t.isExportNamespaceSpecifier(specifiers[index]))
return;
const nodes = [];
if (index === 1) {
nodes.push(t.exportNamedDeclaration(null, [specifiers.shift()], node.source));
}
const specifier = specifiers.shift();
const { exported } = specifier;
const uid = scope.generateUidIdentifier(
// @ts-expect-error Identifier ?? StringLiteral
exported.name ?? exported.value);
nodes.push(withLocation(t.importDeclaration([t.importNamespaceSpecifier(uid)],
// @ts-expect-error
t.cloneNode(node.source)), node.loc), withLocation(t.exportNamedDeclaration(null, [t.exportSpecifier(t.cloneNode(uid), exported)]), node.loc));
if (node.specifiers.length >= 1) {
nodes.push(node);
}
const [importDeclaration] = path.replaceWithMultiple(nodes);
path.scope.registerDeclaration(importDeclaration);
},
},
});
// Inspired by https://github.com/facebook/metro/blob/8e48aa823378962beccbe37d85f1aff2c34b28b1/packages/metro-transform-plugins/src/import-export-plugin.js#L143
function withLocation(node, loc) {
if (!node.loc) {
return { ...node, loc };
}
return node;
}