import { createTransform } from 'json-to-object';
const context = { model: { text: 'aaa' } };
const transform = createTransform()
.useContext(context)
.useProvider({
getter: (prop, owner) => {
return typeof owner[prop] === 'object' && owner[prop].$type === 'bind';
},
deal: (prop, owner, options) => {
const value = owner[prop];
const { context } = options;
Object.defineProperty(owner, prop, {
get() {
return context[value.$source];
},
});
},
})
.useProvider({
getter: (prop, owner) => {
return typeof owner[prop] === 'object' && owner[prop].$type === 'on';
},
deal: (prop, owner, options) => {
const value = owner[prop];
Object.defineProperty(owner, prop, {
get() {
return new Function(value.$result);
},
});
},
});
const result = transform.transform({
fields: [
{ component: 'p', text: { $type: 'bind', $source: 'model.text' } },
{
component: 'button',
events: [
{
name: 'click',
handler: { $type: 'on', $result: "alert('aaa')" },
},
],
},
],
});