vasille-jsx
Version:
The first Developer eXperience Orientated front-end framework (JSX components)
46 lines (45 loc) • 1.26 kB
JavaScript
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);
}