芝麻web文件管理V1.00
编辑当前文件:/home/freeclou/app.optimyar.com/backend/node_modules/immer/src/types/types-external.ts
import {Nothing} from "../internal" type Tail
= ((...t: T) => any) extends ( _: any, ...tail: infer TT ) => any ? TT : [] type PrimitiveType = number | string | boolean /** Object types that should never be mapped */ type AtomicObject = Function | Promise
| Date | RegExp /** * If the lib "ES2105.collections" is not included in tsconfig.json, * types like ReadonlyArray, WeakMap etc. fall back to `any` (specified nowhere) * or `{}` (from the node types), in both cases entering an infite recursion in * pattern matching type mappings * This type can be used to cast these types to `void` in these cases. */ export type IfAvailable
= // fallback if any true | false extends (T extends never ? true : false) ? Fallback // fallback if empty type : keyof T extends never ? Fallback // original type : T /** * These should also never be mapped but must be tested after regular Map and * Set */ type WeakReferences = IfAvailable
> | IfAvailable
> export type WritableDraft
= {-readonly [K in keyof T]: Draft
} export type Draft
= T extends PrimitiveType ? T : T extends AtomicObject ? T : T extends IfAvailable
> // Map extends ReadonlyMap ? Map
, Draft
> : T extends IfAvailable
> // Set extends ReadonlySet ? Set
> : T extends WeakReferences ? T : T extends object ? WritableDraft
: T /** Convert a mutable type into a readonly type */ export type Immutable
= T extends PrimitiveType ? T : T extends AtomicObject ? T : T extends IfAvailable
> // Map extends ReadonlyMap ? ReadonlyMap
, Immutable
> : T extends IfAvailable
> // Set extends ReadonlySet ? ReadonlySet
> : T extends WeakReferences ? T : T extends object ? {readonly [K in keyof T]: Immutable
} : T export interface Patch { op: "replace" | "remove" | "add" path: (string | number)[] value?: any } export type PatchListener = (patches: Patch[], inversePatches: Patch[]) => void /** Converts `nothing` into `undefined` */ type FromNothing
= T extends Nothing ? undefined : T /** The inferred return type of `produce` */ export type Produced
= Return extends void ? Base : Return extends Promise
? Promise
> : FromNothing
/** * The `produce` function takes a value and a "recipe function" (whose * return value often depends on the base state). The recipe function is * free to mutate its first argument however it wants. All mutations are * only ever applied to a __copy__ of the base state. * * Pass only a function to create a "curried producer" which relieves you * from passing the recipe function every time. * * Only plain objects and arrays are made mutable. All other objects are * considered uncopyable. * * Note: This function is __bound__ to its `Immer` instance. * * @param {any} base - the initial state * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified * @param {Function} patchListener - optional function that will be called with all the patches produced here * @returns {any} a new state, or the initial state if nothing was modified */ export interface IProduce { /** Curried producer */ < Recipe extends (...args: any[]) => any, Params extends any[] = Parameters
, T = Params[0] >( recipe: Recipe ):
>( base: Base, ...rest: Tail
) => Produced
> // ^ by making the returned type generic, the actual type of the passed in object is preferred // over the type used in the recipe. However, it does have to satisfy the immutable version used in the recipe // Note: the type of S is the widened version of T, so it can have more props than T, but that is technically actually correct! /** Curried producer with initial state */ < Recipe extends (...args: any[]) => any, Params extends any[] = Parameters
, T = Params[0] >( recipe: Recipe, initialState: Immutable
):
>( base?: Base, ...rest: Tail
) => Produced
> /** Normal producer */
, Return = void>( base: Base, recipe: (draft: D) => Return, listener?: PatchListener ): Produced
} /** * Like `produce`, but instead of just returning the new state, * a tuple is returned with [nextState, patches, inversePatches] * * Like produce, this function supports currying */ export interface IProduceWithPatches { /** Curried producer */ < Recipe extends (...args: any[]) => any, Params extends any[] = Parameters
, T = Params[0] >( recipe: Recipe ):
>( base: Base, ...rest: Tail
) => [Produced
>, Patch[], Patch[]] // ^ by making the returned type generic, the actual type of the passed in object is preferred // over the type used in the recipe. However, it does have to satisfy the immutable version used in the recipe // Note: the type of S is the widened version of T, so it can have more props than T, but that is technically actually correct! /** Curried producer with initial state */ < Recipe extends (...args: any[]) => any, Params extends any[] = Parameters
, T = Params[0] >( recipe: Recipe, initialState: Immutable
):
>( base?: Base, ...rest: Tail
) => [Produced
>, Patch[], Patch[]] /** Normal producer */
, Return = void>( base: Base, recipe: (draft: D) => Return ): [Produced
, Patch[], Patch[]] } // Fixes #507: bili doesn't export the types of this file if there is no actual source in it.. // hopefully it get's tree-shaken away for everyone :) export function never_used() {}