UNPKG

next

Version:

The React Framework

10 lines 2.3 kB
"use strict";exports.__esModule=true;exports.default=_default;var _pluginSyntaxJsx=_interopRequireDefault(require("next/dist/compiled/babel/plugin-syntax-jsx"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _default({types:t}){return{inherits:_pluginSyntaxJsx.default,visitor:{JSXElement(_path,state){state.set('jsx',true);},// Fragment syntax is still JSX since it compiles to createElement(), // but JSXFragment is not a JSXElement JSXFragment(_path,state){state.set('jsx',true);},Program:{exit(path,state){if(state.get('jsx')){const pragma=t.identifier(state.opts.pragma);let importAs=pragma;// if there's already a React in scope, use that instead of adding an import const existingBinding=state.opts.reuseImport!==false&&state.opts.importAs&&path.scope.getBinding(state.opts.importAs);// var _jsx = _pragma.createElement; if(state.opts.property){if(state.opts.importAs){importAs=t.identifier(state.opts.importAs);}else{importAs=path.scope.generateUidIdentifier('pragma');}const mapping=t.variableDeclaration('var',[t.variableDeclarator(pragma,t.memberExpression(importAs,t.identifier(state.opts.property)))]);// if the React binding came from a require('react'), // make sure that our usage comes after it. let newPath;if(existingBinding&&t.isVariableDeclarator(existingBinding.path.node)&&t.isCallExpression(existingBinding.path.node.init)&&t.isIdentifier(existingBinding.path.node.init.callee)&&existingBinding.path.node.init.callee.name==='require'){;[newPath]=existingBinding.path.parentPath.insertAfter(mapping);}else{;[newPath]=path.unshiftContainer('body',mapping);}for(const declar of newPath.get('declarations')){path.scope.registerBinding(newPath.node.kind,declar);}}if(!existingBinding){const importSpecifier=t.importDeclaration([state.opts.import?// import { $import as _pragma } from '$module' t.importSpecifier(importAs,t.identifier(state.opts.import)):state.opts.importNamespace?t.importNamespaceSpecifier(importAs):// import _pragma from '$module' t.importDefaultSpecifier(importAs)],t.stringLiteral(state.opts.module||'react'));const[newPath]=path.unshiftContainer('body',importSpecifier);for(const specifier of newPath.get('specifiers')){path.scope.registerBinding('module',specifier);}}}}}}};} //# sourceMappingURL=jsx-pragma.js.map