Есть код, но он не учитывает вложенность.
const builder = (cb) => {
let res = [];
let cur;
let prox = new Proxy(() => {}, {
apply(target, _, ...args) {
if (!cur.attrs) {
cur.attrs = args;
} else {
cur.inner = args;
}
return prox;
},
get(target, name) {
if (name === "__build") {
return () => res;
}
cur = { name };
res.push(cur);
return prox;
},
});
return cb(prox);
};
В таком случае не учитывает:
const res = builder((b) =>
b.div(`id="div"`)("Hello").input.button(`id="btn"`)(
"before span",
b.span(`id="span"`)("inner span"),
"after span"
)
);
console.log(res.__build());
А вот так норм:
const res = builder((b) =>
b.div(`id="div"`)("Hello").input.button(`id="btn"`)(
"before span",
"after span"
)
);
console.log(res.__build());
Подскажите плиз как сделать поддержку вложенности.
Так же интересует можно ли как то красивее сделать, именно без колбеков с таким синтаксисом. Нужно создать кусок html максимально коротким синтаксисом.