Socket
Socket
Sign inDemoInstall

reselect

Package Overview
Dependencies
Maintainers
7
Versions
53
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

reselect - npm Package Compare versions

Comparing version 4.1.1 to 4.1.2

3

dist/reselect.js

@@ -138,3 +138,3 @@ (function (global, factory) {

if (matchingEntry) {
return matchingEntry.value;
value = matchingEntry.value;
}

@@ -176,3 +176,2 @@ }

// (memoize: MemoizeFunction, ...memoizeOptions: MemoizerOptions) {
var createSelector = function createSelector() {

@@ -179,0 +178,0 @@ for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {

@@ -1,1 +0,1 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Reselect={})}(this,(function(e){"use strict";var t="NOT_FOUND";var n=function(e,t){return e===t};function r(e,r){var u,o,i="object"==typeof r?r:{equalityCheck:r},c=i.equalityCheck,f=i.maxSize,a=void 0===f?1:f,l=i.resultEqualityCheck,p=function(e){return function(t,n){if(null===t||null===n||t.length!==n.length)return!1;for(var r=t.length,u=0;r>u;u++)if(!e(t[u],n[u]))return!1;return!0}}(void 0===c?n:c),s=1===a?(u=p,{get:function(e){return o&&u(o.key,e)?o.value:t},put:function(e,t){o={key:e,value:t}},getEntries:function(){return o?[o]:[]},clear:function(){o=void 0}}):function(e,n){var r=[];function u(e){var u=r.findIndex((function(t){return n(e,t.key)}));if(u>-1){var o=r[u];return u>0&&(r.splice(u,1),r.unshift(o)),o.value}return t}return{get:u,put:function(n,o){u(n)===t&&(r.unshift({key:n,value:o}),r.length>e&&r.pop())},getEntries:function(){return r},clear:function(){r=[]}}}(a,p);function v(){var n=s.get(arguments);if(n===t){if(n=e.apply(null,arguments),l){var r=s.getEntries(),u=r.find((function(e){return l(e.value,n)}));if(u)return u.value}s.put(arguments,n)}return n}return v.clearCache=function(){return s.clear()},v}function u(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every((function(e){return"function"==typeof e}))){var n=t.map((function(e){return"function"==typeof e?"function "+(e.name||"unnamed")+"()":typeof e})).join(", ");throw Error("createSelector expects all input-selectors to be functions, but received the following types: ["+n+"]")}return t}function o(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];var o=function(){for(var t=arguments.length,r=Array(t),o=0;t>o;o++)r[o]=arguments[o];var i,c=0,f={memoizeOptions:void 0},a=r.pop();if("object"==typeof a&&(f=a,a=r.pop()),"function"!=typeof a)throw Error("createSelector expects an output function after the inputs, but received: ["+typeof a+"]");var l=f,p=l.memoizeOptions,s=void 0===p?n:p,v=Array.isArray(s)?s:[s],y=u(r),d=e.apply(void 0,[function(){return c++,a.apply(null,arguments)}].concat(v)),h=e((function(){for(var e=[],t=y.length,n=0;t>n;n++)e.push(y[n].apply(null,arguments));return i=d.apply(null,e)}));return Object.assign(h,{resultFunc:a,memoizedResultFunc:d,dependencies:y,lastResult:function(){return i},recomputations:function(){return c},resetRecomputations:function(){return c=0}}),h};return o}var i=o(r);e.createSelector=i,e.createSelectorCreator=o,e.createStructuredSelector=function(e,t){if(void 0===t&&(t=i),"object"!=typeof e)throw Error("createStructuredSelector expects first argument to be an object where each property is a selector, instead received a "+typeof e);var n=Object.keys(e);return t(n.map((function(t){return e[t]})),(function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return t.reduce((function(e,t,r){return e[n[r]]=t,e}),{})}))},e.defaultEqualityCheck=n,e.defaultMemoize=r,Object.defineProperty(e,"__esModule",{value:!0})}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Reselect={})}(this,(function(e){"use strict";var t="NOT_FOUND";var n=function(e,t){return e===t};function r(e,r){var u,o,i="object"==typeof r?r:{equalityCheck:r},c=i.equalityCheck,f=i.maxSize,a=void 0===f?1:f,l=i.resultEqualityCheck,p=function(e){return function(t,n){if(null===t||null===n||t.length!==n.length)return!1;for(var r=t.length,u=0;r>u;u++)if(!e(t[u],n[u]))return!1;return!0}}(void 0===c?n:c),s=1===a?(u=p,{get:function(e){return o&&u(o.key,e)?o.value:t},put:function(e,t){o={key:e,value:t}},getEntries:function(){return o?[o]:[]},clear:function(){o=void 0}}):function(e,n){var r=[];function u(e){var u=r.findIndex((function(t){return n(e,t.key)}));if(u>-1){var o=r[u];return u>0&&(r.splice(u,1),r.unshift(o)),o.value}return t}return{get:u,put:function(n,o){u(n)===t&&(r.unshift({key:n,value:o}),r.length>e&&r.pop())},getEntries:function(){return r},clear:function(){r=[]}}}(a,p);function v(){var n=s.get(arguments);if(n===t){if(n=e.apply(null,arguments),l){var r=s.getEntries(),u=r.find((function(e){return l(e.value,n)}));u&&(n=u.value)}s.put(arguments,n)}return n}return v.clearCache=function(){return s.clear()},v}function u(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every((function(e){return"function"==typeof e}))){var n=t.map((function(e){return"function"==typeof e?"function "+(e.name||"unnamed")+"()":typeof e})).join(", ");throw Error("createSelector expects all input-selectors to be functions, but received the following types: ["+n+"]")}return t}function o(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];var o=function(){for(var t=arguments.length,r=Array(t),o=0;t>o;o++)r[o]=arguments[o];var i,c=0,f={memoizeOptions:void 0},a=r.pop();if("object"==typeof a&&(f=a,a=r.pop()),"function"!=typeof a)throw Error("createSelector expects an output function after the inputs, but received: ["+typeof a+"]");var l=f,p=l.memoizeOptions,s=void 0===p?n:p,v=Array.isArray(s)?s:[s],y=u(r),d=e.apply(void 0,[function(){return c++,a.apply(null,arguments)}].concat(v)),h=e((function(){for(var e=[],t=y.length,n=0;t>n;n++)e.push(y[n].apply(null,arguments));return i=d.apply(null,e)}));return Object.assign(h,{resultFunc:a,memoizedResultFunc:d,dependencies:y,lastResult:function(){return i},recomputations:function(){return c},resetRecomputations:function(){return c=0}}),h};return o}var i=o(r);e.createSelector=i,e.createSelectorCreator=o,e.createStructuredSelector=function(e,t){if(void 0===t&&(t=i),"object"!=typeof e)throw Error("createStructuredSelector expects first argument to be an object where each property is a selector, instead received a "+typeof e);var n=Object.keys(e);return t(n.map((function(t){return e[t]})),(function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return t.reduce((function(e,t,r){return e[n[r]]=t,e}),{})}))},e.defaultEqualityCheck=n,e.defaultMemoize=r,Object.defineProperty(e,"__esModule",{value:!0})}));

@@ -132,3 +132,3 @@ // Cache implementation based on Erik Rasmussen's `lru-memoize`:

if (matchingEntry) {
return matchingEntry.value;
value = matchingEntry.value;
}

@@ -135,0 +135,0 @@ }

@@ -1,2 +0,2 @@

import type { Selector, GetParamsFromSelectors, OutputSelector, EqualityFn, SelectorArray, SelectorResultArray } from './types';
import type { Selector, GetParamsFromSelectors, OutputSelector, EqualityFn, SelectorArray, SelectorResultArray, DropFirst } from './types';
export type { Selector, GetParamsFromSelectors, OutputSelector, EqualityFn, SelectorArray, SelectorResultArray, ParametricSelector, OutputParametricSelector } from './types';

@@ -6,4 +6,9 @@ import { defaultMemoize, defaultEqualityCheck, DefaultMemoizeOptions } from './defaultMemoize';

export type { DefaultMemoizeOptions };
declare type DropFirst<T extends unknown[]> = T extends [unknown, ...infer U] ? U : never;
export declare function createSelectorCreator<F extends (...args: unknown[]) => unknown, MemoizeFunction extends (func: F, ...options: any[]) => F, MemoizeOptions extends unknown[] = DropFirst<Parameters<MemoizeFunction>>>(memoize: MemoizeFunction, ...memoizeOptionsFromArgs: DropFirst<Parameters<MemoizeFunction>>): CreateSelectorFunction<F, MemoizeFunction, MemoizeOptions>;
export declare function createSelectorCreator<
/** Selectors will eventually accept some function to be memoized */
F extends (...args: unknown[]) => unknown,
/** A memoizer such as defaultMemoize that accepts a function + some possible options */
MemoizeFunction extends (func: F, ...options: any[]) => F,
/** The additional options arguments to the memoizer */
MemoizeOptions extends unknown[] = DropFirst<Parameters<MemoizeFunction>>>(memoize: MemoizeFunction, ...memoizeOptionsFromArgs: DropFirst<Parameters<MemoizeFunction>>): CreateSelectorFunction<F, MemoizeFunction, MemoizeOptions>;
interface CreateSelectorOptions<MemoizeOptions extends unknown[]> {

@@ -20,3 +25,3 @@ memoizeOptions: MemoizeOptions[0] | MemoizeOptions;

(...args: SelectorResultArray<Selectors>) => Result
]): OutputSelector<Selectors, Result, GetParamsFromSelectors<Selectors>, ((...args: SelectorResultArray<Selectors>) => Result) & ReturnType<MemoizeFunction>>;
]): OutputSelector<Selectors, Result, ((...args: SelectorResultArray<Selectors>) => Result) & Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>, GetParamsFromSelectors<Selectors>> & Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>;
/** Input selectors as separate inline arguments with memoizeOptions passed */

@@ -27,5 +32,5 @@ <Selectors extends SelectorArray, Result>(...items: [

CreateSelectorOptions<MemoizeOptions>
]): OutputSelector<Selectors, Result, GetParamsFromSelectors<Selectors>, ((...args: SelectorResultArray<Selectors>) => Result) & ReturnType<MemoizeFunction>>;
]): OutputSelector<Selectors, Result, ((...args: SelectorResultArray<Selectors>) => Result) & Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>, GetParamsFromSelectors<Selectors>> & Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>;
/** Input selectors as a separate array */
<Selectors extends SelectorArray, Result>(selectors: [...Selectors], combiner: (...args: SelectorResultArray<Selectors>) => Result, options?: CreateSelectorOptions<MemoizeOptions>): OutputSelector<Selectors, Result, GetParamsFromSelectors<Selectors>, ((...args: SelectorResultArray<Selectors>) => Result) & ReturnType<MemoizeFunction>>;
<Selectors extends SelectorArray, Result>(selectors: [...Selectors], combiner: (...args: SelectorResultArray<Selectors>) => Result, options?: CreateSelectorOptions<MemoizeOptions>): OutputSelector<Selectors, Result, ((...args: SelectorResultArray<Selectors>) => Result) & Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>, GetParamsFromSelectors<Selectors>> & Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>;
}

@@ -32,0 +37,0 @@ export declare const createSelector: CreateSelectorFunction<(...args: unknown[]) => unknown, typeof defaultMemoize, [equalityCheckOrOptions?: EqualityFn | DefaultMemoizeOptions | undefined]>;

@@ -24,3 +24,2 @@ import { defaultMemoize, defaultEqualityCheck } from './defaultMemoize';

// (memoize: MemoizeFunction, ...memoizeOptions: MemoizerOptions) {
var createSelector = function createSelector() {

@@ -27,0 +26,0 @@ for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {

@@ -1,11 +0,31 @@

export declare type Selector<S = any, R = unknown, P extends never | readonly any[] = any[]> = [P] extends [never] ? (state: S) => R : (state: S, ...params: P) => R;
/** A standard selector function, which takes three generic type arguments:
* @param State The first value, often a Redux root state object
* @param Result The final result returned by the selector
* @param Params All additional arguments passed into the selector
*/
export declare type Selector<State = any, Result = unknown, Params extends never | readonly any[] = any[]> = [Params] extends [never] ? (state: State) => Result : (state: State, ...params: Params) => Result;
/** Selectors generated by Reselect have several additional fields attached: */
interface OutputSelectorFields<Combiner, Result> {
/** The final function passed to `createSelector` */
resultFunc: Combiner;
/** The same function, memoized */
memoizedResultFunc: Combiner;
/** Returns the last result calculated by the selector */
lastResult: () => Result;
/** An array of the input selectors */
dependencies: SelectorArray;
/** Counts the number of times the output has been recalculated */
recomputations: () => number;
/** Resets the count of recomputations count to 0 */
resetRecomputations: () => number;
}
export declare type OutputSelector<S extends SelectorArray, Result, Params extends readonly any[], Combiner> = Selector<GetStateFromSelectors<S>, Result, Params> & OutputSelectorFields<Combiner, Result>;
/** Represents the actual selectors generated by `createSelector`.
* The selector is:
* - "a function that takes this state + params and returns a result"
* - plus the attached additional fields
*/
export declare type OutputSelector<S extends SelectorArray, Result, Combiner, Params extends readonly any[] = never> = Selector<GetStateFromSelectors<S>, Result, Params> & OutputSelectorFields<Combiner, Result>;
/** A selector that is assumed to have one additional argument, such as
* the props from a React component
*/
export declare type ParametricSelector<State, Props, Result> = Selector<State, Result, [

@@ -15,9 +35,25 @@ Props,

]>;
/** A generated selector that is assumed to have one additional argument */
export declare type OutputParametricSelector<State, Props, Result, Combiner> = ParametricSelector<State, Props, Result> & OutputSelectorFields<Combiner, Result>;
/** An array of input selectors */
export declare type SelectorArray = ReadonlyArray<Selector>;
/** Utility type to extract the State generic from a selector */
declare type GetStateFromSelector<S> = S extends Selector<infer State> ? State : never;
/** Utility type to extract the State generic from multiple selectors at once,
* to help ensure that all selectors correctly share the same State type and
* avoid mismatched input selectors being provided.
*/
export declare type GetStateFromSelectors<S extends SelectorArray> = S extends [infer C1, infer C2, ...infer Other] ? Other extends [any] ? GetStateFromSelector<C1> & GetStateFromSelector<C2> & GetStateFromSelectors<Other> : GetStateFromSelector<C1> & GetStateFromSelector<C2> : S extends [infer Current, ...infer Other] ? Other extends [any] ? GetStateFromSelector<Current> & GetStateFromSelectors<Other> : GetStateFromSelector<Current> : S extends (infer Elem)[] ? GetStateFromSelector<Elem> : never;
/** Utility type to extract the Params generic from a selector */
export declare type GetParamsFromSelector<S> = S extends Selector<any, any, infer P> ? P extends [] ? never : P : never;
/** Utility type to extract the Params generic from multiple selectors at once,
* to help ensure that all selectors correctly share the same params and
* avoid mismatched input selectors being provided.
*/
export declare type GetParamsFromSelectors<S, Found = never> = S extends SelectorArray ? S extends (infer s)[] ? GetParamsFromSelector<s> : S extends [infer Current, ...infer Rest] ? GetParamsFromSelector<Current> extends [] ? GetParamsFromSelectors<Rest, Found> : GetParamsFromSelector<Current> : S : Found;
/** Utility type to extract the return type from a selector */
declare type SelectorReturnType<S> = S extends Selector ? ReturnType<S> : never;
/** Utility type to extract the Result generic from multiple selectors at once,
* for use in calculating the arguments to the "result/combiner" function.
*/
export declare type SelectorResultArray<Selectors extends SelectorArray, Rest extends SelectorArray = Selectors> = Rest extends [infer S1, infer S2, ...infer Remaining] ? Remaining extends SelectorArray ? [

@@ -28,3 +64,6 @@ SelectorReturnType<S1>,

] : [SelectorReturnType<S1>, SelectorReturnType<S2>] : Rest extends [infer S, ...infer Remaining] ? Remaining extends SelectorArray ? [SelectorReturnType<S>, ...SelectorResultArray<Selectors, Remaining>] : [SelectorReturnType<S>] : Rest extends ((...args: any) => infer S)[] ? S[] : [];
/** A standard function returning true if two values are considered equal */
export declare type EqualityFn = (a: any, b: any) => boolean;
/** Utility type to infer the type of "all params of a function except the first", so we can determine what arguments a memoize function accepts */
export declare type DropFirst<T extends unknown[]> = T extends [unknown, ...infer U] ? U : never;
export {};

@@ -144,3 +144,3 @@ "use strict";

if (matchingEntry) {
return matchingEntry.value;
value = matchingEntry.value;
}

@@ -147,0 +147,0 @@ }

@@ -44,3 +44,2 @@ "use strict";

// (memoize: MemoizeFunction, ...memoizeOptions: MemoizerOptions) {
var createSelector = function createSelector() {

@@ -47,0 +46,0 @@ for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {

{
"name": "reselect",
"version": "4.1.1",
"version": "4.1.2",
"description": "Selectors for Redux.",

@@ -5,0 +5,0 @@ "main": "./lib/index.js",

@@ -37,3 +37,3 @@ # Reselect

Reselect exports a `createSelector` API, which generates memoized selector functions. `createSelector` accepts one or more "input" selectors, which extra values from arguments, and an "output" selector that receives the extracted values and should return a derived value. If the generated selector is called multiple times, the output will only be recalculated when the extracted values have changed.
Reselect exports a `createSelector` API, which generates memoized selector functions. `createSelector` accepts one or more "input" selectors, which extract values from arguments, and an "output" selector that receives the extracted values and should return a derived value. If the generated selector is called multiple times, the output will only be recalculated when the extracted values have changed.

@@ -606,2 +606,8 @@ You can play around with the following **example** in [this CodeSandbox](https://codesandbox.io/s/objective-waterfall-1z5y8?file=/src/index.js):

### Q: I am seeing a TypeScript error: `Type instantiation is excessively deep and possibly infinite`
A: This can often occur with deeply recursive types, which occur in this library. Please see [this
comment](https://github.com/reduxjs/reselect/issues/534#issuecomment-956708953) for a discussion of the problem, as
relating to nested selectors.
### Q: How can I make a [curried](https://github.com/hemanth/functional-programming-jargon#currying) selector?

@@ -608,0 +614,0 @@

@@ -159,3 +159,3 @@ import type { EqualityFn } from './types'

if (matchingEntry) {
return matchingEntry.value
value = matchingEntry.value
}

@@ -162,0 +162,0 @@ }

@@ -7,3 +7,4 @@ import type {

SelectorArray,
SelectorResultArray
SelectorResultArray,
DropFirst
} from './types'

@@ -52,9 +53,8 @@

type DropFirst<T extends unknown[]> = T extends [unknown, ...infer U]
? U
: never
export function createSelectorCreator<
/** Selectors will eventually accept some function to be memoized */
F extends (...args: unknown[]) => unknown,
/** A memoizer such as defaultMemoize that accepts a function + some possible options */
MemoizeFunction extends (func: F, ...options: any[]) => F,
/** The additional options arguments to the memoizer */
MemoizeOptions extends unknown[] = DropFirst<Parameters<MemoizeFunction>>

@@ -65,3 +65,2 @@ >(

) {
// (memoize: MemoizeFunction, ...memoizeOptions: MemoizerOptions) {
const createSelector = (...funcs: Function[]) => {

@@ -174,6 +173,7 @@ let recomputations = 0

Result,
GetParamsFromSelectors<Selectors>,
((...args: SelectorResultArray<Selectors>) => Result) &
ReturnType<MemoizeFunction>
>
Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>,
GetParamsFromSelectors<Selectors>
> &
Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>

@@ -190,6 +190,7 @@ /** Input selectors as separate inline arguments with memoizeOptions passed */

Result,
GetParamsFromSelectors<Selectors>,
((...args: SelectorResultArray<Selectors>) => Result) &
ReturnType<MemoizeFunction>
>
Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>,
GetParamsFromSelectors<Selectors>
> &
Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>

@@ -204,6 +205,7 @@ /** Input selectors as a separate array */

Result,
GetParamsFromSelectors<Selectors>,
((...args: SelectorResultArray<Selectors>) => Result) &
ReturnType<MemoizeFunction>
>
Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>,
GetParamsFromSelectors<Selectors>
> &
Pick<ReturnType<MemoizeFunction>, keyof ReturnType<MemoizeFunction>>
}

@@ -210,0 +212,0 @@

@@ -0,24 +1,51 @@

/** A standard selector function, which takes three generic type arguments:
* @param State The first value, often a Redux root state object
* @param Result The final result returned by the selector
* @param Params All additional arguments passed into the selector
*/
export type Selector<
S = any,
R = unknown,
P extends never | readonly any[] = any[]
> = [P] extends [never] ? (state: S) => R : (state: S, ...params: P) => R
// The state can be anything
State = any,
// The result will be inferred
Result = unknown,
// There are either 0 params, or N params
Params extends never | readonly any[] = any[]
// If there are 0 params, type the function as just State in, Result out.
// Otherwise, type it as State + Params in, Result out.
> = [Params] extends [never]
? (state: State) => Result
: (state: State, ...params: Params) => Result
/** Selectors generated by Reselect have several additional fields attached: */
interface OutputSelectorFields<Combiner, Result> {
/** The final function passed to `createSelector` */
resultFunc: Combiner
/** The same function, memoized */
memoizedResultFunc: Combiner
/** Returns the last result calculated by the selector */
lastResult: () => Result
/** An array of the input selectors */
dependencies: SelectorArray
/** Counts the number of times the output has been recalculated */
recomputations: () => number
/** Resets the count of recomputations count to 0 */
resetRecomputations: () => number
}
/** Represents the actual selectors generated by `createSelector`.
* The selector is:
* - "a function that takes this state + params and returns a result"
* - plus the attached additional fields
*/
export type OutputSelector<
S extends SelectorArray,
Result,
Params extends readonly any[],
Combiner
Combiner,
Params extends readonly any[] = never
> = Selector<GetStateFromSelectors<S>, Result, Params> &
OutputSelectorFields<Combiner, Result>
/** A selector that is assumed to have one additional argument, such as
* the props from a React component
*/
export type ParametricSelector<State, Props, Result> = Selector<

@@ -30,2 +57,3 @@ State,

/** A generated selector that is assumed to have one additional argument */
export type OutputParametricSelector<State, Props, Result, Combiner> =

@@ -35,5 +63,12 @@ ParametricSelector<State, Props, Result> &

/** An array of input selectors */
export type SelectorArray = ReadonlyArray<Selector>
/** Utility type to extract the State generic from a selector */
type GetStateFromSelector<S> = S extends Selector<infer State> ? State : never
/** Utility type to extract the State generic from multiple selectors at once,
* to help ensure that all selectors correctly share the same State type and
* avoid mismatched input selectors being provided.
*/
export type GetStateFromSelectors<S extends SelectorArray> =

@@ -55,2 +90,3 @@ // handle two elements at once so this type works for up to 30 selectors

/** Utility type to extract the Params generic from a selector */
export type GetParamsFromSelector<S> = S extends Selector<any, any, infer P>

@@ -61,2 +97,7 @@ ? P extends []

: never
/** Utility type to extract the Params generic from multiple selectors at once,
* to help ensure that all selectors correctly share the same params and
* avoid mismatched input selectors being provided.
*/
export type GetParamsFromSelectors<S, Found = never> = S extends SelectorArray

@@ -72,4 +113,8 @@ ? S extends (infer s)[]

/** Utility type to extract the return type from a selector */
type SelectorReturnType<S> = S extends Selector ? ReturnType<S> : never
/** Utility type to extract the Result generic from multiple selectors at once,
* for use in calculating the arguments to the "result/combiner" function.
*/
export type SelectorResultArray<

@@ -96,2 +141,8 @@ Selectors extends SelectorArray,

/** A standard function returning true if two values are considered equal */
export type EqualityFn = (a: any, b: any) => boolean
/** Utility type to infer the type of "all params of a function except the first", so we can determine what arguments a memoize function accepts */
export type DropFirst<T extends unknown[]> = T extends [unknown, ...infer U]
? U
: never
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc