UNPKG

@builder.io/mitosis

Version:

Write components once, run everywhere. Compiles to Vue, React, Solid, and Liquid. Import code from Figma and Builder.io

64 lines (63 loc) 2.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTypescriptProject = exports.getContextSymbols = exports.getPropsSymbol = exports.removeMitosisImport = void 0; const ts_morph_1 = require("ts-morph"); const babel_transform_1 = require("./babel-transform"); const removeMitosisImport = (code) => (0, babel_transform_1.babelTransformExpression)(code, { ImportDeclaration(path) { if (path.node.source.value === '@builder.io/mitosis') { path.remove(); } }, }); exports.removeMitosisImport = removeMitosisImport; const getPropsSymbol = (ast) => { let propsSymbol = undefined; return ast.forEachChild((node) => { var _a; if (propsSymbol !== undefined) return undefined; if (ts_morph_1.Node.isArrowFunction(node) || ts_morph_1.Node.isFunctionDeclaration(node)) { if (node.hasModifier(ts_morph_1.SyntaxKind.ExportKeyword) && node.hasModifier(ts_morph_1.SyntaxKind.DefaultKeyword)) { propsSymbol = (_a = node.getParameters()[0]) === null || _a === void 0 ? void 0 : _a.getSymbol(); return propsSymbol; } } return undefined; }); }; exports.getPropsSymbol = getPropsSymbol; const getContextSymbols = (ast) => { const contextSymbols = new Set(); ast.forEachDescendant((node) => { if (!ts_morph_1.Node.isVariableDeclaration(node)) return; const initializer = node.getInitializer(); if (!ts_morph_1.Node.isCallExpression(initializer)) return; if (initializer.getExpression().getText() !== 'useContext') return; const contextSymbol = node.getNameNode().getSymbol(); if (contextSymbol === undefined) return; contextSymbols.add(contextSymbol); }); return contextSymbols; }; exports.getContextSymbols = getContextSymbols; const getProject = (tsConfigFilePath) => { try { return new ts_morph_1.Project({ tsConfigFilePath }); } catch (err) { throw new Error(`Error creating Typescript Project. Make sure \`tsConfigFilePath\` points to a valid tsconfig.json file. Path received: "${tsConfigFilePath}" `); } }; const createTypescriptProject = (tsConfigFilePath) => { const project = getProject(tsConfigFilePath); return { project }; }; exports.createTypescriptProject = createTypescriptProject;