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.7 to 4.1.8

6

es/index.d.ts

@@ -24,3 +24,3 @@ import type { Selector, GetParamsFromSelectors, OutputSelector, SelectorArray, SelectorResultArray, DropFirst, MergeParameters, Expand, ObjValueTuple, Head, Tail } from './types';

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

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

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

@@ -36,0 +36,0 @@ export declare const createSelector: CreateSelectorFunction<(...args: unknown[]) => unknown, typeof defaultMemoize, [equalityCheckOrOptions?: import("./types").EqualityFn | DefaultMemoizeOptions | undefined], {

@@ -10,7 +10,7 @@ import type { MergeParameters } from './versionedTypes';

/** Selectors generated by Reselect have several additional fields attached: */
export interface OutputSelectorFields<Combiner extends UnknownFunction> {
export interface OutputSelectorFields<Combiner extends UnknownFunction, Keys> {
/** The final function passed to `createSelector` */
resultFunc: Combiner;
/** The same function, memoized */
memoizedResultFunc: Combiner;
memoizedResultFunc: Combiner & Keys;
/** Returns the last result calculated by the selector */

@@ -30,3 +30,4 @@ lastResult: () => ReturnType<Combiner>;

*/
export type OutputSelector<S extends SelectorArray, Result, Combiner extends UnknownFunction, Params extends readonly any[] = never> = Selector<GetStateFromSelectors<S>, Result, Params> & OutputSelectorFields<Combiner>;
export type OutputSelector<S extends SelectorArray, Result, Combiner extends UnknownFunction, Params extends readonly any[] = never, // MergeParameters<S>
Keys = {}> = Selector<GetStateFromSelectors<S>, Result, Params> & OutputSelectorFields<Combiner, Keys>;
/** A selector that is assumed to have one additional argument, such as

@@ -40,3 +41,3 @@ * the props from a React component

/** A generated selector that is assumed to have one additional argument */
export type OutputParametricSelector<State, Props, Result, Combiner extends UnknownFunction> = ParametricSelector<State, Props, Result> & OutputSelectorFields<Combiner>;
export type OutputParametricSelector<State, Props, Result, Combiner extends UnknownFunction, Keys = {}> = ParametricSelector<State, Props, Result> & OutputSelectorFields<Combiner, Keys>;
/** An array of input selectors */

@@ -62,2 +63,13 @@ export type SelectorArray = ReadonlyArray<Selector>;

export type Tail<A> = A extends [any, ...infer Rest] ? Rest : never;
/** Last item in an array. Recursion also enables this to work with rest syntax - where the type of rest is extracted */
export type ReverseHead<S extends readonly unknown[][]> = Tail<S> extends [
unknown
] ? S : Tail<S> extends readonly unknown[][] ? ReverseHead<Tail<S>> : never;
/** All elements in array except last
*
* Recursion makes this work also when rest syntax has been used
* Runs _ReverseTail twice, because first pass turns last element into "never", and second pass removes it.
**/
export type ReverseTail<S> = _ReverseTail<_ReverseTail<S>>;
type _ReverseTail<S> = Tail<S> extends [unknown] ? [Head<S>] : Tail<S> extends unknown[] ? [Head<S>, ..._ReverseTail<Tail<S>>] : never;
/** Extract only numeric keys from an array type */

@@ -64,0 +76,0 @@ export type AllArrayKeys<A extends readonly any[]> = A extends any ? {

@@ -0,13 +1,12 @@

import { ReverseHead, ReverseTail } from '../types';
type UnknownFunction = (...args: any[]) => any;
type LongestTuple<T extends readonly unknown[][]> = T extends [
infer U extends unknown[]
] ? U : T extends [infer U, ...infer R extends unknown[][]] ? MostProperties<U, LongestTuple<R>> : never;
type LongestTuple<T> = T extends [infer U extends unknown[]] ? U : T extends [infer U, ...infer R extends unknown[][]] ? MostProperties<U, LongestTuple<R>> : never;
type MostProperties<T, U> = keyof U extends keyof T ? T : U;
type ElementAt<T extends unknown[], N extends keyof any> = N extends keyof T ? T[N] : unknown;
type ElementsAt<T extends readonly unknown[][], N extends keyof any> = {
type ElementAt<T, N extends keyof any> = N extends keyof T ? T[N] : unknown;
type ElementsAt<T, N extends keyof any> = {
[K in keyof T]: ElementAt<T[K], N>;
};
type Intersect<T extends readonly unknown[]> = T extends [] ? unknown : T extends [infer H, ...infer T] ? H & Intersect<T> : T[number];
type MergeTuples<T extends readonly unknown[][], L extends unknown[] = LongestTuple<T>> = {
[K in keyof L]: Intersect<ElementsAt<T, K>>;
type MergeTuples<T, L extends unknown[] = LongestTuple<T>> = {
[K in keyof L]: Intersect<ElementsAt<T, K> extends readonly unknown[] ? ElementsAt<T, K> : never>;
};

@@ -17,3 +16,10 @@ type ExtractParameters<T extends readonly UnknownFunction[]> = {

};
export type MergeParameters<T extends readonly UnknownFunction[]> = '0' extends keyof T ? MergeTuples<ExtractParameters<T>> : Parameters<T[number]>;
export type MergeParameters<T extends readonly UnknownFunction[]> = '0' extends keyof T ? MergeTuples<MakeRestExplicit<ExtractParameters<T>>> : Parameters<T[number]>;
type HasRest<S extends readonly unknown[]> = number extends S['length'] ? true : false;
type HasExplicit<S extends readonly unknown[]> = '0' extends keyof S ? true : false;
type HasCombined<S extends readonly unknown[]> = true extends HasExplicit<S> & HasRest<S> ? true : false;
type MakeRestExplicit<T extends readonly unknown[][]> = true extends HasCombined<T> ? [
...ReverseTail<T>,
ReverseHead<T> extends readonly unknown[] ? ReverseHead<T>[number] : never
] : true extends HasRest<T> ? [...T] : T;
export {};
{
"name": "reselect",
"version": "4.1.7",
"version": "4.1.8",
"description": "Selectors for Redux.",

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

"lint": "eslint src test",
"prepublishOnly": "yarn build",
"test": "jest",
"test:cov": "jest --coverage",
"prepack": "yarn build",
"test": "vitest run",
"test:cov": "vitest run --coverage",
"test:typescript": "tsc --noEmit -p typescript_test/tsconfig.json"

@@ -65,4 +65,3 @@ },

"@babel/register": "^7.15.3",
"@microsoft/api-extractor": "^7.18.16",
"@reduxjs/toolkit": "^1.9.0-rc.1",
"@reduxjs/toolkit": "^1.9.3",
"@rollup/plugin-babel": "^5.3.0",

@@ -77,5 +76,2 @@ "@rollup/plugin-commonjs": "^21.0.1",

"@typescript-eslint/parser": "5.1.0",
"chai": "^4.3.4",
"codecov.io": "^0.1.6",
"coveralls": "^3.1.1",
"cross-env": "^7.0.3",

@@ -90,3 +86,2 @@ "eslint": "^8.0.1",

"mkdirp": "^1.0.4",
"mocha": "^9.1.3",
"ncp": "^2.0.0",

@@ -99,6 +94,6 @@ "nyc": "^15.1.0",

"rollup-plugin-terser": "^7.0.2",
"ts-jest": "27.0.7",
"tslint": "6.1.3",
"typescript": "4.8.3"
"typescript": "^4.9",
"vitest": "^0.29.8"
}
}

@@ -179,4 +179,5 @@ import type {

Result,
(...args: SelectorResultArray<Selectors>) => Result & Keys,
GetParamsFromSelectors<Selectors>
(...args: SelectorResultArray<Selectors>) => Result,
GetParamsFromSelectors<Selectors>,
Keys
> &

@@ -195,4 +196,5 @@ Keys

Result,
((...args: SelectorResultArray<Selectors>) => Result) & Keys,
GetParamsFromSelectors<Selectors>
((...args: SelectorResultArray<Selectors>) => Result),
GetParamsFromSelectors<Selectors>,
Keys
> &

@@ -209,4 +211,5 @@ Keys

Result,
(...args: SelectorResultArray<Selectors>) => Result & Keys,
GetParamsFromSelectors<Selectors>
(...args: SelectorResultArray<Selectors>) => Result,
GetParamsFromSelectors<Selectors>,
Keys
> &

@@ -213,0 +216,0 @@ Keys

@@ -29,7 +29,7 @@ import type { MergeParameters } from './versionedTypes'

/** Selectors generated by Reselect have several additional fields attached: */
export interface OutputSelectorFields<Combiner extends UnknownFunction> {
export interface OutputSelectorFields<Combiner extends UnknownFunction, Keys> {
/** The final function passed to `createSelector` */
resultFunc: Combiner
/** The same function, memoized */
memoizedResultFunc: Combiner
memoizedResultFunc: Combiner & Keys
/** Returns the last result calculated by the selector */

@@ -54,5 +54,6 @@ lastResult: () => ReturnType<Combiner>

Combiner extends UnknownFunction,
Params extends readonly any[] = never // MergeParameters<S>
Params extends readonly any[] = never, // MergeParameters<S>
Keys = {}
> = Selector<GetStateFromSelectors<S>, Result, Params> &
OutputSelectorFields<Combiner>
OutputSelectorFields<Combiner, Keys>

@@ -73,4 +74,6 @@ /** A selector that is assumed to have one additional argument, such as

Result,
Combiner extends UnknownFunction
> = ParametricSelector<State, Props, Result> & OutputSelectorFields<Combiner>
Combiner extends UnknownFunction,
Keys = {}
> = ParametricSelector<State, Props, Result> &
OutputSelectorFields<Combiner, Keys>

@@ -122,2 +125,23 @@ /** An array of input selectors */

/** Last item in an array. Recursion also enables this to work with rest syntax - where the type of rest is extracted */
export type ReverseHead<S extends readonly unknown[][]> = Tail<S> extends [
unknown
]
? S
: Tail<S> extends readonly unknown[][]
? ReverseHead<Tail<S>>
: never
/** All elements in array except last
*
* Recursion makes this work also when rest syntax has been used
* Runs _ReverseTail twice, because first pass turns last element into "never", and second pass removes it.
**/
export type ReverseTail<S> = _ReverseTail<_ReverseTail<S>>
type _ReverseTail<S> = Tail<S> extends [unknown]
? [Head<S>]
: Tail<S> extends unknown[]
? [Head<S>, ..._ReverseTail<Tail<S>>]
: never
/** Extract only numeric keys from an array type */

@@ -124,0 +148,0 @@ export type AllArrayKeys<A extends readonly any[]> = A extends any

// This entire implementation courtesy of Anders Hjelsberg:
// https://github.com/microsoft/TypeScript/pull/50831#issuecomment-1253830522
import { ReverseHead, ReverseTail } from '../types'
type UnknownFunction = (...args: any[]) => any
type LongestTuple<T extends readonly unknown[][]> = T extends [
infer U extends unknown[]
]
type LongestTuple<T> = T extends [infer U extends unknown[]]
? U

@@ -16,7 +16,5 @@ : T extends [infer U, ...infer R extends unknown[][]]

type ElementAt<T extends unknown[], N extends keyof any> = N extends keyof T
? T[N]
: unknown
type ElementAt<T, N extends keyof any> = N extends keyof T ? T[N] : unknown
type ElementsAt<T extends readonly unknown[][], N extends keyof any> = {
type ElementsAt<T, N extends keyof any> = {
[K in keyof T]: ElementAt<T[K], N>

@@ -31,7 +29,6 @@ }

type MergeTuples<
T extends readonly unknown[][],
L extends unknown[] = LongestTuple<T>
> = {
[K in keyof L]: Intersect<ElementsAt<T, K>>
type MergeTuples<T, L extends unknown[] = LongestTuple<T>> = {
[K in keyof L]: Intersect<
ElementsAt<T, K> extends readonly unknown[] ? ElementsAt<T, K> : never
>
}

@@ -45,3 +42,28 @@

'0' extends keyof T
? MergeTuples<ExtractParameters<T>>
? MergeTuples<MakeRestExplicit<ExtractParameters<T>>>
: Parameters<T[number]>
type HasRest<S extends readonly unknown[]> = number extends S['length']
? true
: false
type HasExplicit<S extends readonly unknown[]> = '0' extends keyof S
? true
: false
type HasCombined<S extends readonly unknown[]> = true extends HasExplicit<S> &
HasRest<S>
? true
: false
type MakeRestExplicit<T extends readonly unknown[][]> =
true extends HasCombined<T>
? [
...ReverseTail<T>,
ReverseHead<T> extends readonly unknown[]
? ReverseHead<T>[number]
: never
]
: true extends HasRest<T>
? [...T]
: T
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