UNPKG

vasille-jsx

Version:

The first Developer eXperience Orientated front-end framework (JSX components)

46 lines (45 loc) 1.26 kB
import { IValue } from "vasille"; import { storeReactiveObject } from "./objects.js"; export function awaited(node, target, errName, dataName) { const value = node.ref(undefined, dataName); const err = node.ref(undefined, errName); let running = false; function run() { if (running) { return; } let current = target; running = true; err.$ = undefined; value.$ = undefined; if (typeof current === "function") { try { current = current(); } catch (e) { current = undefined; err.$ = e; } } if (current instanceof Promise) { current .then(result => (value.$ = result)) .catch(e => (err.$ = e)) .finally(() => (running = false)); } else { value.$ = current; running = false; } } run(); return [err, value, run]; } export function store(fn) { return (input) => { return input ? fn(storeReactiveObject(input)) : fn(); }; } export function ensureIValue(node, value) { return value instanceof IValue ? value : node.ref(value); }