| "use strict"; |
|
|
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = void 0; |
| var _helperPluginUtils = require("@babel/helper-plugin-utils"); |
| var _core = require("@babel/core"); |
| const TRACE_ID = "__source"; |
| const FILE_NAME_VAR = "_jsxFileName"; |
| const createNodeFromNullish = (val, fn) => val == null ? _core.types.nullLiteral() : fn(val); |
| var _default = exports.default = (0, _helperPluginUtils.declare)(api => { |
| api.assertVersion(7); |
| function makeTrace(fileNameIdentifier, { |
| line, |
| column |
| }) { |
| const fileLineLiteral = createNodeFromNullish(line, _core.types.numericLiteral); |
| const fileColumnLiteral = createNodeFromNullish(column, c => _core.types.numericLiteral(c + 1)); |
| return _core.template.expression.ast`{ |
| fileName: ${fileNameIdentifier}, |
| lineNumber: ${fileLineLiteral}, |
| columnNumber: ${fileColumnLiteral}, |
| }`; |
| } |
| const isSourceAttr = attr => _core.types.isJSXAttribute(attr) && attr.name.name === TRACE_ID; |
| return { |
| name: "transform-react-jsx-source", |
| visitor: { |
| JSXOpeningElement(path, state) { |
| const { |
| node |
| } = path; |
| if (!node.loc || path.node.attributes.some(isSourceAttr)) { |
| return; |
| } |
| if (!state.fileNameIdentifier) { |
| const fileNameId = path.scope.generateUidIdentifier(FILE_NAME_VAR); |
| state.fileNameIdentifier = fileNameId; |
| path.scope.getProgramParent().push({ |
| id: fileNameId, |
| init: _core.types.stringLiteral(state.filename || "") |
| }); |
| } |
| node.attributes.push(_core.types.jsxAttribute(_core.types.jsxIdentifier(TRACE_ID), _core.types.jsxExpressionContainer(makeTrace(_core.types.cloneNode(state.fileNameIdentifier), node.loc.start)))); |
| } |
| } |
| }; |
| }); |
|
|
| |
|
|