fluidstate
Version:
Library for fine-grained reactivity state management
67 lines (62 loc) • 2.45 kB
JavaScript
;
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