MCPcopy Create free account
hub / github.com/ngrx/platform / createSelectorFactory

Function createSelectorFactory

modules/store/src/selector.ts:648–699  ·  view source on GitHub ↗
(
  memoize: MemoizeFn,
  options: SelectorFactoryConfig<any, any> = {
    stateFn: defaultStateFn,
  }
)

Source from the content-addressed store, hash-verified

646 * ```
647 */
648export function createSelectorFactory(
649 memoize: MemoizeFn,
650 options: SelectorFactoryConfig<any, any> = {
651 stateFn: defaultStateFn,
652 }
653) {
654 return function (
655 ...input: any[]
656 ): MemoizedSelector<any, any> | MemoizedSelectorWithProps<any, any, any> {
657 let args = input;
658 if (Array.isArray(args[0])) {
659 const [head, ...tail] = args;
660 args = [...head, ...tail];
661 } else if (args.length === 1 && isSelectorsDictionary(args[0])) {
662 args = extractArgsFromSelectorsDictionary(args[0]);
663 }
664
665 const selectors = args.slice(0, args.length - 1);
666 const projector = args[args.length - 1];
667 const memoizedSelectors = selectors.filter(
668 (selector: any) =>
669 selector.release && typeof selector.release === 'function'
670 );
671
672 const memoizedProjector = memoize(function (...selectors: any[]) {
673 return projector.apply(null, selectors);
674 });
675
676 const memoizedState = defaultMemoize(function (state: any, props: any) {
677 return options.stateFn.apply(null, [
678 state,
679 selectors,
680 props,
681 memoizedProjector,
682 ]);
683 });
684
685 function release() {
686 memoizedState.reset();
687 memoizedProjector.reset();
688
689 memoizedSelectors.forEach((selector) => selector.release());
690 }
691
692 return Object.assign(memoizedState.memoized, {
693 release,
694 projector: memoizedProjector.memoized,
695 setResult: memoizedState.setResult,
696 clearResult: memoizedState.clearResult,
697 });
698 };
699}
700
701export function createFeatureSelector<T>(
702 featureName: string

Callers 2

createSelectorFunction · 0.85
selector.spec.tsFile · 0.85

Calls 4

isSelectorsDictionaryFunction · 0.85
defaultMemoizeFunction · 0.85
applyMethod · 0.65

Tested by

no test coverage detected