@builder.io/mitosis
Version:
Write components once, run everywhere. Compiles to Vue, React, Solid, and Liquid. Import code from Figma and Builder.io
37 lines (36 loc) • 1.5 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.gettersToFunctions = void 0;
const legacy_1 = __importDefault(require("neotraverse/legacy"));
/**
* Map getters like `useStore({ get foo() { ... }})` from `state.foo` to `foo()`
*/
const gettersToFunctions = (json) => {
const getterKeys = Object.keys(json.state).filter((item) => { var _a; return ((_a = json.state[item]) === null || _a === void 0 ? void 0 : _a.type) === 'getter'; });
(0, legacy_1.default)(json).forEach(function (item) {
// TODO: not all strings are expressions!
if (typeof item === 'string') {
let value = item;
for (const key of getterKeys) {
try {
value = value.replace(new RegExp(`state\\s*\\.\\s*${key}([^a-z0-9]|$)`, 'gi'), (match, group1) => {
if (match.endsWith('?')) {
return `${key}?.()${group1}`;
}
return `${key}()${group1}`;
});
}
catch (err) {
console.error('Could not update getter ref', err);
}
}
if (value !== item) {
this.update(value);
}
}
});
};
exports.gettersToFunctions = gettersToFunctions;
;