solid-services
Version:
Solid.js library adding a services layer for global shared state.
27 lines • 2.93 kB
JavaScript
import { createRoot, runWithOwner, onCleanup, getOwner } from "solid-js";
function createSubRoot(fn, owner = getOwner()) {
return createRoot((dispose) => {
owner && runWithOwner(owner, onCleanup.bind(void 0, dispose));
return fn(dispose);
}, owner);
}
export function runInSubRoot(fn, owner) {
let error;
let hasError = false;
const result = createSubRoot((dispose) => {
try {
return fn(dispose);
}
catch (e) {
hasError = true;
error = e;
dispose();
throw e;
}
}, owner);
if (hasError) {
throw error;
}
return result;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUyxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVoRixTQUFTLGFBQWEsQ0FDcEIsRUFBdUMsRUFDdkMsUUFBc0IsUUFBUSxFQUFFO0lBRWhDLE9BQU8sVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDNUIsS0FBSyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzlELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLENBQUMsRUFBRSxLQUFNLENBQUMsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixFQUF1QyxFQUN2QyxLQUFvQjtJQUVwQixJQUFJLEtBQWMsQ0FBQztJQUNuQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFckIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDdkMsSUFBSTtZQUNGLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFVixJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sS0FBSyxDQUFDO0tBQ2I7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUm9vdCwgT3duZXIsIHJ1bldpdGhPd25lciwgb25DbGVhbnVwLCBnZXRPd25lciB9IGZyb20gXCJzb2xpZC1qc1wiO1xuXG5mdW5jdGlvbiBjcmVhdGVTdWJSb290PFQ+KFxuICBmbjogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlUm9vdDxUPj5bMF0sXG4gIG93bmVyOiB0eXBlb2YgT3duZXIgPSBnZXRPd25lcigpXG4pOiBUIHtcbiAgcmV0dXJuIGNyZWF0ZVJvb3QoKGRpc3Bvc2UpID0+IHtcbiAgICBvd25lciAmJiBydW5XaXRoT3duZXIob3duZXIsIG9uQ2xlYW51cC5iaW5kKHZvaWQgMCwgZGlzcG9zZSkpO1xuICAgIHJldHVybiBmbihkaXNwb3NlKTtcbiAgfSwgb3duZXIhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkluU3ViUm9vdDxUPihcbiAgZm46IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVJvb3Q8VD4+WzBdLFxuICBvd25lcj86IHR5cGVvZiBPd25lclxuKTogVCB7XG4gIGxldCBlcnJvcjogdW5rbm93bjtcbiAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgY29uc3QgcmVzdWx0ID0gY3JlYXRlU3ViUm9vdCgoZGlzcG9zZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oZGlzcG9zZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgZXJyb3IgPSBlO1xuICAgICAgZGlzcG9zZSgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH0sIG93bmVyKTtcblxuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=