UNPKG

@mini-rx/signal-store

Version:
38 lines 4.72 kB
import { computed } from '@angular/core'; import { isSignalSelector } from './signal-selector'; import { isKey } from '@mini-rx/common'; function createSelectFn(state) { function select(mapFnOrKey) { if (!mapFnOrKey) { return state; } if (isSignalSelector(mapFnOrKey)) { return mapFnOrKey(state); } return computed(() => { const rawState = state(); return isKey(rawState, mapFnOrKey) ? rawState[mapFnOrKey] : mapFnOrKey(state()); }); } return select; } export function createSelectableSignal(state) { return { select: createSelectFn(state), get: () => { return state(); }, }; } export function createSelectableWritableSignal(state) { return { select: createSelectFn(state), get: () => { return state(); }, set: (v) => { state.set(v); }, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNlbGVjdGFibGUtc2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zaWduYWwtc3RvcmUvc3JjL2xpYi9jcmVhdGUtc2VsZWN0YWJsZS1zaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFrQixNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4QyxTQUFTLGNBQWMsQ0FBMkIsS0FBd0I7SUFLdEUsU0FBUyxNQUFNLENBQUMsVUFBZ0I7UUFDNUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pCLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUEyQixLQUF3QjtJQUNyRixPQUFPO1FBQ0gsTUFBTSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDN0IsR0FBRyxFQUFFLEdBQUcsRUFBRTtZQUNOLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDbkIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLDhCQUE4QixDQUMxQyxLQUFnQztJQUVoQyxPQUFPO1FBQ0gsTUFBTSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDN0IsR0FBRyxFQUFFLEdBQWMsRUFBRTtZQUNqQixPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ25CLENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFZLEVBQVEsRUFBRTtZQUN4QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBTaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1NpZ25hbFNlbGVjdG9yLCBTaWduYWxTZWxlY3RvciB9IGZyb20gJy4vc2lnbmFsLXNlbGVjdG9yJztcbmltcG9ydCB7IGlzS2V5IH0gZnJvbSAnQG1pbmktcngvY29tbW9uJztcblxudHlwZSBTdGF0ZVNlbGVjdG9yPFQsIFI+ID0gKHN0YXRlOiBUKSA9PiBSO1xuXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RGbjxTdGF0ZVR5cGUgZXh0ZW5kcyBvYmplY3Q+KHN0YXRlOiBTaWduYWw8U3RhdGVUeXBlPikge1xuICAgIGZ1bmN0aW9uIHNlbGVjdCgpOiBTaWduYWw8U3RhdGVUeXBlPjtcbiAgICBmdW5jdGlvbiBzZWxlY3Q8Uj4obWFwRm46IFNpZ25hbFNlbGVjdG9yPFN0YXRlVHlwZSwgUj4pOiBTaWduYWw8Uj47XG4gICAgZnVuY3Rpb24gc2VsZWN0PFI+KG1hcEZuOiBTdGF0ZVNlbGVjdG9yPFN0YXRlVHlwZSwgUj4pOiBTaWduYWw8Uj47XG4gICAgZnVuY3Rpb24gc2VsZWN0PEtleVR5cGUgZXh0ZW5kcyBrZXlvZiBTdGF0ZVR5cGU+KGtleTogS2V5VHlwZSk6IFNpZ25hbDxTdGF0ZVR5cGVbS2V5VHlwZV0+O1xuICAgIGZ1bmN0aW9uIHNlbGVjdChtYXBGbk9yS2V5PzogYW55KTogU2lnbmFsPGFueT4ge1xuICAgICAgICBpZiAoIW1hcEZuT3JLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NpZ25hbFNlbGVjdG9yKG1hcEZuT3JLZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFwRm5PcktleShzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmF3U3RhdGUgPSBzdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGlzS2V5KHJhd1N0YXRlLCBtYXBGbk9yS2V5KSA/IHJhd1N0YXRlW21hcEZuT3JLZXldIDogbWFwRm5PcktleShzdGF0ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdGFibGVTaWduYWw8U3RhdGVUeXBlIGV4dGVuZHMgb2JqZWN0PihzdGF0ZTogU2lnbmFsPFN0YXRlVHlwZT4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3Q6IGNyZWF0ZVNlbGVjdEZuKHN0YXRlKSxcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUoKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0YWJsZVdyaXRhYmxlU2lnbmFsPFN0YXRlVHlwZSBleHRlbmRzIG9iamVjdD4oXG4gICAgc3RhdGU6IFdyaXRhYmxlU2lnbmFsPFN0YXRlVHlwZT5cbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdDogY3JlYXRlU2VsZWN0Rm4oc3RhdGUpLFxuICAgICAgICBnZXQ6ICgpOiBTdGF0ZVR5cGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKHY6IFN0YXRlVHlwZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgc3RhdGUuc2V0KHYpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4iXX0=