solid-services
Version:
Solid.js library adding a services layer for global shared state.
31 lines • 3.62 kB
JavaScript
import { createRegistry } from "./registry";
import { createContext, createComponent, useContext, } from "solid-js";
export const ServiceRegistryContext = createContext();
export const ServiceRegistry = (props) => {
let registry;
return createComponent(ServiceRegistryContext.Provider, {
get value() {
return (registry ??= createRegistry({
get expose() {
return props.expose;
},
}));
},
get children() {
return props.children;
},
});
};
/**
* Returns the current registry.
*
* If no registry is found, it will throw an error.
*/
export function useRegistry() {
const registry = useContext(ServiceRegistryContext);
if (!registry) {
throw new Error("Your app needs to be wrapped with <ServiceRegistry> context in order to use services.");
}
return registry;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sWUFBWSxDQUFDO0FBR2hFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZUFBZSxFQUNmLFVBQVUsR0FFWCxNQUFNLFVBQVUsQ0FBQztBQU1sQixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxhQUFhLEVBQVksQ0FBQztBQUVoRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQXlDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDN0UsSUFBSSxRQUE4QixDQUFDO0lBRW5DLE9BQU8sZUFBZSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtRQUN0RCxJQUFJLEtBQUs7WUFDUCxPQUFPLENBQUMsUUFBUSxLQUFLLGNBQWMsQ0FBQztnQkFDbEMsSUFBSSxNQUFNO29CQUNSLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsQ0FBQzthQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELElBQUksUUFBUTtZQUNWLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUN4QixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRXBELElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUNiLHVGQUF1RixDQUN4RixDQUFDO0tBQ0g7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVnaXN0cnksIFNlcnZpY2VJbml0aWFsaXplciB9IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgdHlwZSB7IFJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnlcIjtcblxuaW1wb3J0IHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgY3JlYXRlQ29tcG9uZW50LFxuICB1c2VDb250ZXh0LFxuICBGbG93Q29tcG9uZW50LFxufSBmcm9tIFwic29saWQtanNcIjtcblxuZXhwb3J0IHR5cGUgUmVnaXN0cnlQcm92aWRlclByb3BzID0ge1xuICBleHBvc2U/OiBTZXJ2aWNlSW5pdGlhbGl6ZXI8YW55PltdIHwgYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlUmVnaXN0cnlDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxSZWdpc3RyeT4oKTtcblxuZXhwb3J0IGNvbnN0IFNlcnZpY2VSZWdpc3RyeTogRmxvd0NvbXBvbmVudDxSZWdpc3RyeVByb3ZpZGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGxldCByZWdpc3RyeTogUmVnaXN0cnkgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbXBvbmVudChTZXJ2aWNlUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgcmV0dXJuIChyZWdpc3RyeSA/Pz0gY3JlYXRlUmVnaXN0cnkoe1xuICAgICAgICBnZXQgZXhwb3NlKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wcy5leHBvc2U7XG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gICAgfSxcblxuICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbiAgICB9LFxuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCByZWdpc3RyeS5cbiAqIFxuICogSWYgbm8gcmVnaXN0cnkgaXMgZm91bmQsIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWdpc3RyeSgpOiBSZWdpc3RyeSB7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gdXNlQ29udGV4dChTZXJ2aWNlUmVnaXN0cnlDb250ZXh0KTtcblxuICBpZiAoIXJlZ2lzdHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJZb3VyIGFwcCBuZWVkcyB0byBiZSB3cmFwcGVkIHdpdGggPFNlcnZpY2VSZWdpc3RyeT4gY29udGV4dCBpbiBvcmRlciB0byB1c2Ugc2VydmljZXMuXCJcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2lzdHJ5O1xufVxuIl19