UNPKG

unplugin-jsx-source

Version:

[![NPM version](https://img.shields.io/npm/v/unplugin-jsx-source?color=a1b858&label=)](https://www.npmjs.com/package/unplugin-jsx-source)

71 lines (65 loc) 3.34 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _chunkP4DSWCF6cjs = require('./chunk-P4DSWCF6.cjs'); // src/transform.ts var _parser = require('@babel/parser'); var _traverse2 = require('@babel/traverse'); var _traverse3 = _interopRequireDefault(_traverse2); var _generator = require('@babel/generator'); var _generator2 = _interopRequireDefault(_generator); var _types = require('@babel/types'); var t = _interopRequireWildcard(_types); var traverse = _traverse3.default.default || _traverse3.default; var generate = _generator2.default.default || _generator2.default; var transform = (code, id, opt) => { const ast = _parser.parse.call(void 0, code, _chunkP4DSWCF6cjs.__spreadValues.call(void 0, { sourceType: "module", plugins: ["jsx", "typescript"] }, opt.parserOptions)); traverse(ast, { JSXOpeningElement(path) { if (path.node.name.type === "JSXIdentifier" && path.node.loc && !path.isJSXFragment() && path.node.name.name !== "Fragment") { const isComponent = path.node.name.name[0].toUpperCase() === path.node.name.name[0]; const hasSpreadProps = path.node.attributes.some( (attr) => attr.type === "JSXSpreadAttribute" ); const newAttributes = []; if (opt.attributes.at && !path.node.attributes.some( (a) => a.type === "JSXAttribute" && a.name.name === opt.attributes.at ) && !hasSpreadProps) { const fileName = opt.transformFileName(id, path.node.loc); const dataAtAttr = t.jsxAttribute( t.jsxIdentifier(opt.attributes.at), t.stringLiteral(fileName) ); newAttributes.push(dataAtAttr); } if (opt.attributes.in && !path.node.attributes.some( (a) => a.type === "JSXAttribute" && a.name.name === opt.attributes.in ) && !hasSpreadProps) { const assertHasName = (p) => p.isVariableDeclarator() || p.isFunctionDeclaration(); const parent = path.findParent(assertHasName); if (parent && assertHasName(parent) && parent.node.id && "name" in parent.node.id) { const dataInAttr = t.jsxAttribute( t.jsxIdentifier(opt.attributes.in), t.stringLiteral(parent.node.id.name) ); newAttributes.push(dataInAttr); } } if (opt.attributes.kind && !path.node.attributes.some( (a) => a.type === "JSXAttribute" && a.name.name === opt.attributes.kind ) && isComponent) { const dataKindAttr = t.jsxAttribute( t.jsxIdentifier(opt.attributes.kind), t.stringLiteral(path.node.name.name) ); newAttributes.push(dataKindAttr); } path.node.attributes.push(...newAttributes); } } }); const { code: transformedCode } = generate(ast, { filename: id }, code); return { code: transformedCode, map: null }; }; exports.transform = transform;