es-toolkit 1.39.5-dev.1388 → 1.39.5-dev.1389

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ type GetFieldTypeOfArrayLikeByKey<T extends unknown[], K> = K extends number ? T[K] : K extends `${infer N extends number}` ? T[N] : K extends keyof T ? T[K] : undefined;
2
+ type GetFieldTypeOfStringByKey<T extends string, K> = K extends number ? T[K] : K extends `${infer N extends number}` ? T[N] : K extends keyof T ? T[K] : undefined;
3
+ type GetFieldTypeOfNarrowedByKey<T, K> = T extends unknown[] ? GetFieldTypeOfArrayLikeByKey<T, K> : T extends string ? GetFieldTypeOfStringByKey<T, K> : K extends keyof T ? T[K] : K extends number ? `${K}` extends keyof T ? T[`${K}`] : undefined : K extends `${infer N extends number}` ? N extends keyof T ? T[N] : undefined : undefined;
4
+ type GetFieldTypeOfNarrowedByDotPath<T, P> = P extends `${infer L}.${infer R}` ? GetFieldType<GetFieldTypeOfNarrowedByKey<T, L>, R, 'DotPath'> : GetFieldTypeOfNarrowedByKey<T, P>;
5
+ type GetFieldTypeOfNarrowedByLcKR<T, Lc, K, R> = '' extends R ? GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'> : R extends `.${infer Rc}` ? GetFieldType<GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'>, Rc> : GetFieldType<GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'>, R>;
6
+ type GetFieldTypeOfNarrowedByLKR<T, L, K, R> = '' extends L ? '' extends R ? GetFieldTypeOfNarrowedByKey<T, K> : R extends `.${infer Rc}` ? GetFieldType<GetFieldTypeOfNarrowedByKey<T, K>, Rc> : GetFieldType<GetFieldTypeOfNarrowedByKey<T, K>, R> : L extends `${infer Lc}.` ? GetFieldTypeOfNarrowedByLcKR<T, Lc, K, R> : GetFieldTypeOfNarrowedByLcKR<T, L, K, R>;
7
+ type GetFieldTypeOfNarrowed<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = XT extends 'Key' ? GetFieldTypeOfNarrowedByKey<T, X> : XT extends 'DotPath' ? GetFieldTypeOfNarrowedByDotPath<T, X> : X extends `${infer L}['${infer K}']${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : X extends `${infer L}["${infer K}"]${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : X extends `${infer L}[${infer K}]${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : GetFieldTypeOfNarrowedByDotPath<T, X>;
8
+ type GetFieldTypeOfObject<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = Extract<T, unknown[]> extends never ? GetFieldTypeOfNarrowed<T, X, XT> : GetFieldTypeOfNarrowed<Exclude<T, unknown[]>, X, XT> | GetFieldTypeOfNarrowed<Extract<T, unknown[]>, X, XT>;
9
+ type GetFieldTypeOfPrimitive<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = Extract<T, string> extends never ? T extends never ? never : undefined : (Exclude<T, string> extends never ? never : undefined) | GetFieldTypeOfNarrowed<Extract<T, string>, X, XT>;
10
+ type GetFieldType<T, X, XT extends 'DotPath' | 'Key' | 'Path' = 'Path'> = Extract<T, object> extends never ? GetFieldTypeOfPrimitive<T, X, XT> : GetFieldTypeOfPrimitive<Exclude<T, object>, X, XT> | GetFieldTypeOfObject<Extract<T, object>, X, XT>;
11
+
12
+ export type { GetFieldType };
@@ -0,0 +1,12 @@
1
+ type GetFieldTypeOfArrayLikeByKey<T extends unknown[], K> = K extends number ? T[K] : K extends `${infer N extends number}` ? T[N] : K extends keyof T ? T[K] : undefined;
2
+ type GetFieldTypeOfStringByKey<T extends string, K> = K extends number ? T[K] : K extends `${infer N extends number}` ? T[N] : K extends keyof T ? T[K] : undefined;
3
+ type GetFieldTypeOfNarrowedByKey<T, K> = T extends unknown[] ? GetFieldTypeOfArrayLikeByKey<T, K> : T extends string ? GetFieldTypeOfStringByKey<T, K> : K extends keyof T ? T[K] : K extends number ? `${K}` extends keyof T ? T[`${K}`] : undefined : K extends `${infer N extends number}` ? N extends keyof T ? T[N] : undefined : undefined;
4
+ type GetFieldTypeOfNarrowedByDotPath<T, P> = P extends `${infer L}.${infer R}` ? GetFieldType<GetFieldTypeOfNarrowedByKey<T, L>, R, 'DotPath'> : GetFieldTypeOfNarrowedByKey<T, P>;
5
+ type GetFieldTypeOfNarrowedByLcKR<T, Lc, K, R> = '' extends R ? GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'> : R extends `.${infer Rc}` ? GetFieldType<GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'>, Rc> : GetFieldType<GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'>, R>;
6
+ type GetFieldTypeOfNarrowedByLKR<T, L, K, R> = '' extends L ? '' extends R ? GetFieldTypeOfNarrowedByKey<T, K> : R extends `.${infer Rc}` ? GetFieldType<GetFieldTypeOfNarrowedByKey<T, K>, Rc> : GetFieldType<GetFieldTypeOfNarrowedByKey<T, K>, R> : L extends `${infer Lc}.` ? GetFieldTypeOfNarrowedByLcKR<T, Lc, K, R> : GetFieldTypeOfNarrowedByLcKR<T, L, K, R>;
7
+ type GetFieldTypeOfNarrowed<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = XT extends 'Key' ? GetFieldTypeOfNarrowedByKey<T, X> : XT extends 'DotPath' ? GetFieldTypeOfNarrowedByDotPath<T, X> : X extends `${infer L}['${infer K}']${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : X extends `${infer L}["${infer K}"]${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : X extends `${infer L}[${infer K}]${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : GetFieldTypeOfNarrowedByDotPath<T, X>;
8
+ type GetFieldTypeOfObject<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = Extract<T, unknown[]> extends never ? GetFieldTypeOfNarrowed<T, X, XT> : GetFieldTypeOfNarrowed<Exclude<T, unknown[]>, X, XT> | GetFieldTypeOfNarrowed<Extract<T, unknown[]>, X, XT>;
9
+ type GetFieldTypeOfPrimitive<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = Extract<T, string> extends never ? T extends never ? never : undefined : (Exclude<T, string> extends never ? never : undefined) | GetFieldTypeOfNarrowed<Extract<T, string>, X, XT>;
10
+ type GetFieldType<T, X, XT extends 'DotPath' | 'Key' | 'Path' = 'Path'> = Extract<T, object> extends never ? GetFieldTypeOfPrimitive<T, X, XT> : GetFieldTypeOfPrimitive<Exclude<T, object>, X, XT> | GetFieldTypeOfObject<Extract<T, object>, X, XT>;
11
+
12
+ export type { GetFieldType };
@@ -1,4 +1,4 @@
1
- import { Get } from './get.types.mjs';
1
+ import { GetFieldType } from '../_internal/GetFieldType.mjs';
2
2
  import { PropertyPath } from '../_internal/PropertyPath.mjs';
3
3
 
4
4
  /**
@@ -132,24 +132,6 @@ declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2
132
132
  * // => 3
133
133
  */
134
134
  declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3]): NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3] | undefined;
135
- /**
136
- * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
137
- *
138
- * @template TObject
139
- * @template TKey1
140
- * @template TKey2
141
- * @template TKey3
142
- * @template TDefault
143
- * @param {TObject | null | undefined} object - The object to query.
144
- * @param {[TKey1, TKey2, TKey3]} path - The path of the property to get.
145
- * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
146
- * @returns {Exclude<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3], undefined> | TDefault} Returns the resolved value.
147
- *
148
- * @example
149
- * const object = { 'a': { 'b': { 'c': 3 } } };
150
- * get(object, ['a', 'b', 'c'], 'default');
151
- * // => 3
152
- */
153
135
  /**
154
136
  * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
155
137
  *
@@ -302,14 +284,14 @@ declare function get(object: null | undefined, path: PropertyPath): undefined;
302
284
  * @template TPath
303
285
  * @param {TObject} data - The object to query.
304
286
  * @param {TPath} path - The path of the property to get.
305
- * @returns {string extends TPath ? any : Get<TObject, TPath>} Returns the resolved value.
287
+ * @returns {string extends TPath ? any : GetFieldType<TObject, TPath>} Returns the resolved value.
306
288
  *
307
289
  * @example
308
290
  * const object = { a: { b: { c: 1 } } };
309
291
  * get(object, 'a.b.c');
310
292
  * // => 1
311
293
  */
312
- declare function get<TObject, TPath extends string>(data: TObject, path: TPath): string extends TPath ? any : Get<TObject, TPath>;
294
+ declare function get<TObject, TPath extends string>(data: TObject, path: TPath): string extends TPath ? any : GetFieldType<TObject, TPath>;
313
295
  /**
314
296
  * Gets the value at path of object using type-safe path. If the resolved value is undefined, the defaultValue is returned.
315
297
  *
@@ -319,14 +301,14 @@ declare function get<TObject, TPath extends string>(data: TObject, path: TPath):
319
301
  * @param {TObject} data - The object to query.
320
302
  * @param {TPath} path - The path of the property to get.
321
303
  * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
322
- * @returns {Exclude<Get<TObject, TPath>, null | undefined> | TDefault} Returns the resolved value.
304
+ * @returns {Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault} Returns the resolved value.
323
305
  *
324
306
  * @example
325
307
  * const object = { a: { b: { c: 1 } } };
326
308
  * get(object, 'a.b.d', 'default');
327
309
  * // => 'default'
328
310
  */
329
- declare function get<TObject, TPath extends string, TDefault = Get<TObject, TPath>>(data: TObject, path: TPath, defaultValue: TDefault): Exclude<Get<TObject, TPath>, null | undefined> | TDefault;
311
+ declare function get<TObject, TPath extends string, TDefault = GetFieldType<TObject, TPath>>(data: TObject, path: TPath, defaultValue: TDefault): Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault;
330
312
  /**
331
313
  * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned.
332
314
  *
@@ -1,4 +1,4 @@
1
- import { Get } from './get.types.js';
1
+ import { GetFieldType } from '../_internal/GetFieldType.js';
2
2
  import { PropertyPath } from '../_internal/PropertyPath.js';
3
3
 
4
4
  /**
@@ -132,24 +132,6 @@ declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2
132
132
  * // => 3
133
133
  */
134
134
  declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3]): NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3] | undefined;
135
- /**
136
- * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
137
- *
138
- * @template TObject
139
- * @template TKey1
140
- * @template TKey2
141
- * @template TKey3
142
- * @template TDefault
143
- * @param {TObject | null | undefined} object - The object to query.
144
- * @param {[TKey1, TKey2, TKey3]} path - The path of the property to get.
145
- * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
146
- * @returns {Exclude<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3], undefined> | TDefault} Returns the resolved value.
147
- *
148
- * @example
149
- * const object = { 'a': { 'b': { 'c': 3 } } };
150
- * get(object, ['a', 'b', 'c'], 'default');
151
- * // => 3
152
- */
153
135
  /**
154
136
  * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
155
137
  *
@@ -302,14 +284,14 @@ declare function get(object: null | undefined, path: PropertyPath): undefined;
302
284
  * @template TPath
303
285
  * @param {TObject} data - The object to query.
304
286
  * @param {TPath} path - The path of the property to get.
305
- * @returns {string extends TPath ? any : Get<TObject, TPath>} Returns the resolved value.
287
+ * @returns {string extends TPath ? any : GetFieldType<TObject, TPath>} Returns the resolved value.
306
288
  *
307
289
  * @example
308
290
  * const object = { a: { b: { c: 1 } } };
309
291
  * get(object, 'a.b.c');
310
292
  * // => 1
311
293
  */
312
- declare function get<TObject, TPath extends string>(data: TObject, path: TPath): string extends TPath ? any : Get<TObject, TPath>;
294
+ declare function get<TObject, TPath extends string>(data: TObject, path: TPath): string extends TPath ? any : GetFieldType<TObject, TPath>;
313
295
  /**
314
296
  * Gets the value at path of object using type-safe path. If the resolved value is undefined, the defaultValue is returned.
315
297
  *
@@ -319,14 +301,14 @@ declare function get<TObject, TPath extends string>(data: TObject, path: TPath):
319
301
  * @param {TObject} data - The object to query.
320
302
  * @param {TPath} path - The path of the property to get.
321
303
  * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
322
- * @returns {Exclude<Get<TObject, TPath>, null | undefined> | TDefault} Returns the resolved value.
304
+ * @returns {Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault} Returns the resolved value.
323
305
  *
324
306
  * @example
325
307
  * const object = { a: { b: { c: 1 } } };
326
308
  * get(object, 'a.b.d', 'default');
327
309
  * // => 'default'
328
310
  */
329
- declare function get<TObject, TPath extends string, TDefault = Get<TObject, TPath>>(data: TObject, path: TPath, defaultValue: TDefault): Exclude<Get<TObject, TPath>, null | undefined> | TDefault;
311
+ declare function get<TObject, TPath extends string, TDefault = GetFieldType<TObject, TPath>>(data: TObject, path: TPath, defaultValue: TDefault): Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault;
330
312
  /**
331
313
  * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned.
332
314
  *
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "es-toolkit",
3
3
  "description": "A state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.",
4
- "version": "1.39.5-dev.1388+16709839",
4
+ "version": "1.39.5-dev.1389+b281cab8",
5
5
  "homepage": "https://es-toolkit.dev",
6
6
  "bugs": "https://github.com/toss/es-toolkit/issues",
7
7
  "repository": {
@@ -1,9 +0,0 @@
1
- /**
2
- * See the definition of `@types/lodash`.
3
- */
4
- type GetIndexedField<T, K> = K extends keyof T ? T[K] : K extends `${number}` ? 'length' extends keyof T ? number extends T['length'] ? number extends keyof T ? T[number] : undefined : undefined : undefined : undefined;
5
- type FieldWithPossiblyUndefined<T, Key> = Get<Exclude<T, undefined>, Key> | Extract<T, undefined>;
6
- type IndexedFieldWithPossiblyUndefined<T, Key> = GetIndexedField<Exclude<T, undefined>, Key> | Extract<T, undefined>;
7
- type Get<T, P> = P extends `${infer Left}.${infer Right}` ? Left extends keyof Exclude<T, undefined> ? FieldWithPossiblyUndefined<Exclude<T, undefined>[Left], Right> | Extract<T, undefined> : Left extends `${infer FieldKey}[${infer IndexKey}]` ? FieldKey extends keyof T ? FieldWithPossiblyUndefined<IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey>, Right> : undefined : undefined : P extends keyof T ? T[P] : P extends `${infer FieldKey}[${infer IndexKey}]` ? FieldKey extends keyof T ? IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey> : undefined : IndexedFieldWithPossiblyUndefined<T, P>;
8
-
9
- export type { Get };
@@ -1,9 +0,0 @@
1
- /**
2
- * See the definition of `@types/lodash`.
3
- */
4
- type GetIndexedField<T, K> = K extends keyof T ? T[K] : K extends `${number}` ? 'length' extends keyof T ? number extends T['length'] ? number extends keyof T ? T[number] : undefined : undefined : undefined : undefined;
5
- type FieldWithPossiblyUndefined<T, Key> = Get<Exclude<T, undefined>, Key> | Extract<T, undefined>;
6
- type IndexedFieldWithPossiblyUndefined<T, Key> = GetIndexedField<Exclude<T, undefined>, Key> | Extract<T, undefined>;
7
- type Get<T, P> = P extends `${infer Left}.${infer Right}` ? Left extends keyof Exclude<T, undefined> ? FieldWithPossiblyUndefined<Exclude<T, undefined>[Left], Right> | Extract<T, undefined> : Left extends `${infer FieldKey}[${infer IndexKey}]` ? FieldKey extends keyof T ? FieldWithPossiblyUndefined<IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey>, Right> : undefined : undefined : P extends keyof T ? T[P] : P extends `${infer FieldKey}[${infer IndexKey}]` ? FieldKey extends keyof T ? IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey> : undefined : IndexedFieldWithPossiblyUndefined<T, P>;
8
-
9
- export type { Get };