UNPKG

@builder.io/mitosis

Version:

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

97 lines (96 loc) 4.17 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.collectModuleScopeHooks = exports.generateUseStyleCode = exports.parseDefaultPropsHook = void 0; const hooks_1 = require("../../../constants/hooks"); const use_metadata_1 = require("../../../parsers/jsx/hooks/use-metadata"); const babel = __importStar(require("@babel/core")); const generator_1 = __importDefault(require("@babel/generator")); const helpers_1 = require("../helpers"); const state_1 = require("../state"); const helpers_2 = require("./helpers"); const { types } = babel; function parseDefaultPropsHook(component, expression) { const firstArg = expression.arguments[0]; if (types.isObjectExpression(firstArg)) { component.defaultProps = (0, state_1.parseStateObjectToMitosisState)(firstArg, false); } } exports.parseDefaultPropsHook = parseDefaultPropsHook; function generateUseStyleCode(expression) { return (0, generator_1.default)(expression.arguments[0]).code.replace(/(^("|'|`)|("|'|`)$)/g, ''); } exports.generateUseStyleCode = generateUseStyleCode; /** * Transform useMetadata({...}) onto the component JSON as * meta: { metadataHook: { ... }} * * This function collects metadata and removes the statement from * the returned nodes array */ const collectModuleScopeHooks = (context, options) => (path) => { const programNodes = path.node.body; return programNodes.filter((node) => { const hook = (0, helpers_2.getHook)(node); if (!hook) { return true; } if (types.isIdentifier(hook.callee)) { const metadataHooks = new Set((options.jsonHookNames || []).concat(hooks_1.HOOKS.METADATA)); const name = hook.callee.name; if (metadataHooks.has(name)) { const metaDataObjectNode = hook.arguments[0]; let json; try { json = options.filePath ? (0, use_metadata_1.resolveMetadata)({ context, node: metaDataObjectNode, nodePath: path, options }) : (0, helpers_1.parseCodeJson)(metaDataObjectNode); } catch (e) { // Meta data isn't simple json convert it to ast console.error(`Error parsing metadata hook ${name}`); throw e; } context.builder.component.meta[name] = { ...(context.builder.component.meta[name] || {}), ...json, }; return false; } else if (name === hooks_1.HOOKS.STYLE) { context.builder.component.style = generateUseStyleCode(hook); return false; } else if (name === hooks_1.HOOKS.DEFAULT_PROPS) { parseDefaultPropsHook(context.builder.component, hook); } } return true; }); }; exports.collectModuleScopeHooks = collectModuleScopeHooks;