unplugin-jsx-source
Version:
[](https://www.npmjs.com/package/unplugin-jsx-source)
71 lines (65 loc) • 3.34 kB
JavaScript
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;
;