UNPKG

@builder.io/mitosis

Version:

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

52 lines (51 loc) 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processClassComponentBinding = void 0; const strip_state_and_props_refs_1 = require("../helpers/strip-state-and-props-refs"); const event_handlers_1 = require("./event-handlers"); /** * We need to "emit" events those can be on multiple places, so we do it as post step */ const appendEmits = (str, { name }, { events, props, target, skipAppendEmit }) => { let code = str; if (events.length) { for (const event of events) { const eventWithoutOn = (0, event_handlers_1.getEventNameWithoutOn)(event); if (props.includes(eventWithoutOn)) { console.error(` Component ${name} has an event ${event} that conflicts with prop ${eventWithoutOn} for target ${target}. Please rename the prop or the event. `); } if (!skipAppendEmit) { code = code.replaceAll(`props.${event}(`, `props.${eventWithoutOn}.emit(`); } code = code.replaceAll(`props.${event}`, `props.${eventWithoutOn}`); } } return code; }; /** * We use this for generators like stencil and angular */ const processClassComponentBinding = (json, code, processBindingOptions) => { const { replaceWith = 'this.' } = processBindingOptions; let resolvedCode = (0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(appendEmits(code, json, processBindingOptions), { replaceWith, }); if (json.exports) { // We need to use local exports with `this.` in stencil and angular Object.entries(json.exports) .filter(([, value]) => value.usedInLocal) .forEach(([key]) => { resolvedCode = resolvedCode.replaceAll(key, `${replaceWith}${key}`); }); } if (json.context.get) { for (const key of Object.keys(json.context.get)) { resolvedCode = resolvedCode.replaceAll(key, `${replaceWith}${key}`); } } return resolvedCode; }; exports.processClassComponentBinding = processClassComponentBinding;