UNPKG

fluidstate

Version:

Library for fine-grained reactivity state management

67 lines (62 loc) 2.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unsafeReplaceReactiveLayer = exports.provideReactiveLayer = exports.getReactiveLayer = exports.getCurrentReactiveLayer = void 0; let reactiveLayer = null; /** * Provides the fundamental reactive layer for fluidstate. * This function must be called once before any other fluidstate reactive * functionalities are used. * * @param layer - An object conforming to the ReactiveLayer interface, * which will be used for all underlying reactive operations. * @throws Error if the reactive layer has already been provided. */ const provideReactiveLayer = layer => { if (reactiveLayer != null && layer !== reactiveLayer) { throw new Error("Reactive layer has already been provided. `provideReactiveLayer` should only be called once."); } reactiveLayer = layer; }; /** * Unsafely replaces the existing reactive layer with a new one. There * are predictable and unpredictable consequences of doing this. One of the * issues will be that past reactions cannot observe new reactive objects * and vice versa. * * @param layer - An object conforming to the ReactiveLayer interface, * which will be used for all underlying reactive operations, or * `null` in order to unset the layer. */ exports.provideReactiveLayer = provideReactiveLayer; const unsafeReplaceReactiveLayer = layer => { reactiveLayer = layer; }; /** * Retrieves the fundamental reactive layer that was previously set * via `provideReactiveLayer`. * * This function is primarily for internal use within fluidstate or by * extensions that need direct access to the underlying reactive primitives. * * @returns The reactive layer instance. * @throws Error if `provideReactiveLayer` has not been called yet. */ exports.unsafeReplaceReactiveLayer = unsafeReplaceReactiveLayer; const getReactiveLayer = () => { if (reactiveLayer == null) { throw new Error("Reactive layer has not been provided. Call `provideReactiveLayer` first."); } return reactiveLayer; }; /** * @returns The fundamental reactive layer that was previously set via * `provideReactiveLayer` or `null` if it was not provided. */ exports.getReactiveLayer = getReactiveLayer; const getCurrentReactiveLayer = () => { return reactiveLayer; }; exports.getCurrentReactiveLayer = getCurrentReactiveLayer; //# sourceMappingURL=reactive-layer.js.map