You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

type-fest

Package Overview
Dependencies
Maintainers
1
Versions
189
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

type-fest - npm Package Compare versions

Comparing version
5.4.3
to
5.4.4
+1
-1
package.json
{
"name": "type-fest",
"version": "5.4.3",
"version": "5.4.4",
"description": "A collection of essential TypeScript types",

@@ -5,0 +5,0 @@ "license": "(MIT OR CC0-1.0)",

import type {IsNever} from './is-never.d.ts';
import type {IsEqual} from './is-equal.d.ts';

@@ -27,3 +28,3 @@ /**

: T extends any
? [U] extends [T]
? IsEqual<U, T> extends true
? false

@@ -30,0 +31,0 @@ : true

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

import type {JsonObject, JsonValue} from './json-value.d.ts';
import type {LiteralUnion} from './literal-union.d.ts';
import type {JsonObject, JsonValue} from './json-value.d.ts';

@@ -529,3 +529,3 @@ export namespace PackageJson {

engines?: {
[EngineName in 'npm' | 'node' | string]?: string;
[EngineName in LiteralUnion<'npm' | 'node', string>]?: string;
};

@@ -532,0 +532,0 @@

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

import type {StaticPartOfArray, VariablePartOfArray, NonRecursiveType, ToString, IsNumberLike, ApplyDefaultOptions} from './internal/index.d.ts';
import type {NonRecursiveType, ToString, IsNumberLike, ApplyDefaultOptions, MapsSetsOrArrays} from './internal/index.d.ts';
import type {IsAny} from './is-any.d.ts';

@@ -195,65 +195,48 @@ import type {UnknownArray} from './unknown-array.d.ts';

type _Paths<T, Options extends Required<PathsOptions>, CurrentDepth extends number = 0> =
T extends NonRecursiveType | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown>
T extends NonRecursiveType | Exclude<MapsSetsOrArrays, UnknownArray>
? never
: IsAny<T> extends true
? never
: T extends UnknownArray
? number extends T['length']
// We need to handle the fixed and non-fixed index part of the array separately.
? InternalPaths<StaticPartOfArray<T>, Options, CurrentDepth> | InternalPaths<Array<VariablePartOfArray<T>[number]>, Options, CurrentDepth>
: InternalPaths<T, Options, CurrentDepth>
: T extends object
? InternalPaths<T, Options, CurrentDepth>
: never;
: T extends object
? InternalPaths<Required<T>, Options, CurrentDepth>
: never;
type InternalPaths<T, Options extends Required<PathsOptions>, CurrentDepth extends number> =
Options['maxRecursionDepth'] extends infer MaxDepth extends number
? Required<T> extends infer T
? T extends readonly []
? never
: IsNever<keyof T> extends true // Check for empty object
? never
: {
[Key in keyof T]:
Key extends string | number // Limit `Key` to string or number.
? (
And<Options['bracketNotation'], IsNumberLike<Key>> extends true
? `[${Key}]`
// If `Key` is a number, return `Key | `${Key}``, because both `array[0]` and `array['0']` work.
: CurrentDepth extends 0
? Key | ToString<Key>
: `.${(Key | ToString<Key>)}`
) extends infer TranformedKey extends string | number ?
// 1. If style is 'a[0].b' and 'Key' is a numberlike value like 3 or '3', transform 'Key' to `[${Key}]`, else to `${Key}` | Key
// 2. If style is 'a.0.b', transform 'Key' to `${Key}` | Key
| ((Options['leavesOnly'] extends true
? MaxDepth extends CurrentDepth
? TranformedKey
: T[Key] extends infer Value
? (Value extends readonly [] | NonRecursiveType | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown>
? TranformedKey
: IsNever<keyof Value> extends true // Check for empty object
? TranformedKey
: never)
: never
: TranformedKey
) extends infer _TransformedKey
// If `depth` is provided, the condition becomes truthy only when it reaches `CurrentDepth`.
// Otherwise, since `depth` defaults to `number`, the condition is always truthy, returning paths at all depths.
? CurrentDepth extends Options['depth']
? _TransformedKey
: never
: never)
| (
// Recursively generate paths for the current key
GreaterThan<MaxDepth, CurrentDepth> extends true // Limit the depth to prevent infinite recursion
? `${TranformedKey}${_Paths<T[Key], Options, Sum<CurrentDepth, 1>> & (string | number)}`
: never
)
: never
: never
}[keyof T & (T extends UnknownArray ? number : unknown)]
{[Key in keyof T]: Key extends string | number // Limit `Key` to `string | number`
? (
And<Options['bracketNotation'], IsNumberLike<Key>> extends true
? `[${Key}]`
: CurrentDepth extends 0
// Return both `Key` and `ToString<Key>` because for number keys, like `1`, both `1` and `'1'` are valid keys.
? Key | ToString<Key>
: `.${(Key | ToString<Key>)}`
) extends infer TransformedKey extends string | number
? ((Options['leavesOnly'] extends true
? Options['maxRecursionDepth'] extends CurrentDepth
? TransformedKey
: IsNever<T[Key]> extends true
? TransformedKey
: T[Key] extends infer Value // For distributing `T[Key]`
? (Value extends readonly [] | NonRecursiveType | Exclude<MapsSetsOrArrays, UnknownArray>
? TransformedKey
: IsNever<keyof Value> extends true // Check for empty object & `unknown`, because `keyof unknown` is `never`.
? TransformedKey
: never)
: never // Should never happen
: TransformedKey
) extends infer _TransformedKey
// If `depth` is provided, the condition becomes truthy only when it matches `CurrentDepth`.
// Otherwise, since `depth` defaults to `number`, the condition is always truthy, returning paths at all depths.
? CurrentDepth extends Options['depth']
? _TransformedKey
: never
: never)
// Recursively generate paths for the current key
| (GreaterThan<Options['maxRecursionDepth'], CurrentDepth> extends true // Limit the depth to prevent infinite recursion
? `${TransformedKey}${_Paths<T[Key], Options, Sum<CurrentDepth, 1>> & (string | number)}`
: never)
: never
: never;
: never
}[keyof T & (T extends UnknownArray ? number : unknown)];
export {};