inferred-types 0.53.10 → 0.53.12

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.
@@ -624,6 +624,13 @@ interface Thenable {
624
624
  }
625
625
 
626
626
  type TupleRange = [required: number, optional: number];
627
+ type _Tuple<TType = unknown, TLength extends number | TupleRange | `${number}+` = 0> = 0 extends TLength ? TType extends any[] ? Readonly<TType> : readonly TType[] : TLength extends number ? Readonly<FixedLengthArray<TType, TLength>> : TLength extends TupleRange ? Readonly<[
628
+ ...FixedLengthArray<TType, TLength[0]>,
629
+ ...FixedLengthArray<TType | undefined, TLength[1]>
630
+ ]> : TLength extends `${infer Num extends number}+` ? Num extends number ? Readonly<[
631
+ ...FixedLengthArray<TType, Num>,
632
+ ...TType[]
633
+ ]> : never : never;
627
634
  /**
628
635
  * **Tuple**`<TType,TLength>`
629
636
  *
@@ -639,13 +646,7 @@ type TupleRange = [required: number, optional: number];
639
646
  * type T2 = Tuple<string, 4>;
640
647
  * ```
641
648
  */
642
- type Tuple<TType = unknown, TLength extends number | TupleRange | `${number}+` = 0> = 0 extends TLength ? TType extends any[] ? Readonly<TType> : readonly TType[] : TLength extends number ? Readonly<FixedLengthArray<TType, TLength>> : TLength extends TupleRange ? Readonly<[
643
- ...FixedLengthArray<TType, TLength[0]>,
644
- ...FixedLengthArray<TType | undefined, TLength[1]>
645
- ]> : TLength extends `${infer Num extends number}+` ? Num extends number ? Readonly<[
646
- ...FixedLengthArray<TType, Num>,
647
- ...TType[]
648
- ]> : never : never;
649
+ type Tuple<TType = unknown, TLength extends number | TupleRange | `${number}+` = 0> = _Tuple<TType, TLength> extends readonly unknown[] ? _Tuple<TType, TLength> : never;
649
650
 
650
651
  type Process$1x<TVal, TDefault> = TVal extends Something ? TVal : TDefault;
651
652
  /**
@@ -9946,6 +9947,14 @@ type IterateOverDefinitions<T extends readonly unknown[], TElse> = {
9946
9947
  [K in keyof T]: ToType$1<T[K], TElse>;
9947
9948
  };
9948
9949
  type TypeDefinition = NarrowableScalar | ShapeCallback;
9950
+ type _FromDefineObject<T extends Required<DefineObject>> = {
9951
+ [K in keyof T]: T[K] extends SimpleToken ? SimpleType<T[K]> : T[K] extends ShapeCallback ? ReturnType<HandleDoneFn<T[K]>> : never;
9952
+ };
9953
+ /**
9954
+ * Converts a `DefineObject` definition into the type that it is
9955
+ * defining.
9956
+ */
9957
+ type FromDefineObject<T extends DefineObject> = MakeKeysOptional<_FromDefineObject<Required<T>>, UnionToTuple$1<OptionalKeys<T>> extends readonly ObjectKey[] ? UnionToTuple$1<OptionalKeys<T>> : never>;
9949
9958
  /**
9950
9959
  * **FromDefn**`<T, [TElse]>`
9951
9960
  *
@@ -9961,9 +9970,7 @@ type TypeDefinition = NarrowableScalar | ShapeCallback;
9961
9970
  * Note: when dictionary objects are found the _values_ will be
9962
9971
  * interrogated for ShapeCallback's.
9963
9972
  */
9964
- type FromDefn$1<T, TElse = Constant$1<"not-set">> = T extends DefineObject ? {
9965
- [K in keyof T]: T[K] extends SimpleToken ? SimpleType<T[K]> : T[K] extends ShapeCallback ? HandleDoneFn<T[K]> : never;
9966
- } : T extends readonly unknown[] ? IterateOverDefinitions<T, TElse> : ToType$1<T, TElse>;
9973
+ type FromDefn$1<T, TElse = Constant$1<"not-set">> = T extends DefineObject ? FromDefineObject<T> : T extends readonly unknown[] ? IterateOverDefinitions<T, TElse> : ToType$1<T, TElse>;
9967
9974
 
9968
9975
  type WideTokenNames = "string" | "number" | "boolean" | "null" | "undefined" | "never" | "unknown" | "string[]" | "number[]" | "boolean[]" | "unknown[]";
9969
9976
  type ConvertWideTokenNames<T extends WideTokenNames> = T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : T extends "null" ? null : T extends "undefined" ? undefined : T extends "never" ? never : T extends "unknown" ? unknown : T extends "string[]" ? string[] : T extends "number[]" ? number[] : T extends "boolean[]" ? boolean[] : T extends "unknown[]" ? unknown[] : never;
@@ -10291,6 +10298,48 @@ type Process$e<TObj extends Dictionary, TKeys extends ObjectKey> = [] extends TK
10291
10298
  */
10292
10299
  type WithoutKeys<TObj extends Dictionary, TKeys extends ObjectKey | readonly ObjectKey[]> = TKeys extends readonly ObjectKey[] ? Process$e<TObj, TupleToUnion<TKeys>> : ExpandDictionary<Process$e<TObj, TKeys extends readonly ObjectKey[] ? TupleToUnion<TKeys> : TKeys>>;
10293
10300
 
10301
+ type ProcessTupleKeys<TObj extends AnyObject, TKeys extends readonly ObjectKey[]> = ExpandDictionary<WithoutKeys<TObj, TKeys> & {
10302
+ [K in keyof WithKeys<TObj, TKeys>]?: K extends keyof TObj ? TObj[K] : never;
10303
+ }>;
10304
+ type ProcessUnionKeys<TObj extends AnyObject, TKeys extends (string | symbol)> = ExpandDictionary<WithoutKeys<TObj, TKeys> & {
10305
+ [K in keyof WithKeys<TObj, TKeys>]?: K extends keyof TObj ? TObj[K] : never;
10306
+ }>;
10307
+ /**
10308
+ * **MakeKeysOptional**`<TObj, TKeys>`
10309
+ *
10310
+ * Makes a set of keys on a known object `TObj` become
10311
+ * _optional_ parameters while leaving the other properties
10312
+ * "as is".
10313
+ *
10314
+ * **Related:** `MakeKeysRequired`
10315
+ */
10316
+ type MakeKeysOptional<TObj extends AnyObject, TKeys extends (string | symbol) | readonly ObjectKey[]> = IsWideContainer<TObj> extends true ? TObj : TKeys extends readonly ObjectKey[] ? ProcessTupleKeys<TObj, TKeys> : TKeys extends (string | symbol) ? IsWideUnion<TKeys> extends true ? never : ProcessUnionKeys<TObj, TKeys> : never;
10317
+
10318
+ /**
10319
+ * **OptionalKeys**`<T,[V]>`
10320
+ *
10321
+ * Provides a union type of the _keys_ in `T` which are
10322
+ * **optional** properties.
10323
+ *
10324
+ * **Note:** you also may optionally filter further by specifying a value
10325
+ * by the _value_ of the key and then only keys which are required AND
10326
+ * who extend `V` will be included in the union.
10327
+ *
10328
+ * **Related:** `OptionalKeys`, `RequiredProps` * Provides a union type of the _keys_ in `T` which are
10329
+ * **required** properties.
10330
+ *
10331
+ * **Note:** you also may optionally filter further by specifying a value
10332
+ * by the _value_ of the key and then only keys which are required AND
10333
+ * who extend `V` will be included in the union.
10334
+ *
10335
+ * **Related:** `RequiredKeys`, `RequiredProps`
10336
+ */
10337
+ type OptionalKeys<T extends AnyObject, V = Unset> = {
10338
+ [K in keyof T]-?: EmptyObject extends {
10339
+ [P in K]: T[K];
10340
+ } ? If<IsEqual<V, Unset>, K, K extends V ? K : never> : never;
10341
+ }[keyof T];
10342
+
10294
10343
  /**
10295
10344
  * **CombinedKeys**`<A,B>`
10296
10345
  *
@@ -10797,7 +10846,9 @@ type TypeTuple<TType extends Narrowable = Narrowable, TDesc extends string = str
10797
10846
  *
10798
10847
  * - typically used though a function of type `DefineObjectApi`
10799
10848
  */
10800
- type DefineObject = Record<string, SimpleToken | ShapeCallback>;
10849
+ interface DefineObject {
10850
+ [key: string]: SimpleToken | ShapeCallback;
10851
+ }
10801
10852
 
10802
10853
  type BuildObj<T extends readonly string[] | Dictionary | [Dictionary], TType> = T extends Dictionary ? T : T extends [Dictionary] ? T[0] : T extends string[] ? CreateKV<T, TType> : never;
10803
10854
  /**
@@ -11355,6 +11406,7 @@ declare function getYesterday(): Iso8601Date<"explicit">;
11355
11406
  */
11356
11407
  declare function isLeapYear(val: NumberLike | Record<string, any> | Date | number): boolean;
11357
11408
 
11409
+ type Returns$1<T extends DefineObject, P extends readonly (keyof T & string)[]> = P["length"] extends 0 ? FromDefineObject<T> : MakeKeysOptional<T, P> extends DefineObject ? FromDefineObject<MakeKeysOptional<T, P>> : never;
11358
11410
  /**
11359
11411
  * Takes an object definition where the values are either
11360
11412
  * `SimpleToken` representations of a type or a `ShapeCallback`.
@@ -11362,7 +11414,7 @@ declare function isLeapYear(val: NumberLike | Record<string, any> | Date | numbe
11362
11414
  * In both cases the runtime type is left unchanged but the
11363
11415
  * type is converted to represent the designed object shape.
11364
11416
  */
11365
- declare function defineObject<T extends DefineObject>(defn: T): FromDefn$1<T>;
11417
+ declare function defineObject<T extends DefineObject, P extends readonly (keyof T & string)[]>(defn: T, ..._optProps: P): Returns$1<T, P>;
11366
11418
 
11367
11419
  /**
11368
11420
  * **entries**
@@ -13330,8 +13382,10 @@ declare function isArray(value: unknown): value is unknown[];
13330
13382
  * **isBoolean**(value)
13331
13383
  *
13332
13384
  * Type guard which validates that type is a boolean value.
13385
+ *
13386
+ * **Related:** `isBooleanLike()`
13333
13387
  */
13334
- declare function isBoolean<T>(value: T): value is T & boolean;
13388
+ declare function isBoolean(value: unknown): value is boolean;
13335
13389
 
13336
13390
  /**
13337
13391
  * **isBooleanLike**`(val)`
@@ -13405,17 +13459,20 @@ declare function isFalse(i: unknown): i is false;
13405
13459
  declare function isFalsy<V extends Narrowable>(val: V): val is V & FalsyValue;
13406
13460
 
13407
13461
  /**
13408
- * **isFnWithDict**(input)
13462
+ * **isFnWithParams**(input, [...params | count])
13409
13463
  *
13410
13464
  * Type guard which checks whether a give variable is a function
13411
13465
  * which contains at least one parameter.
13412
13466
  *
13413
- * - if you set the parameter types, it will check that precisely the
13414
- * correct amount are set
13467
+ * - the optional second parameter may be used to express the **types** of
13468
+ * the expected parameters or just the expected **count** of parameters
13469
+ * - if you set the parameter types, it will check that the
13470
+ * correct amount of parameters are set but can only _assume_ the types of
13471
+ * the parameters are as you have expressed
13415
13472
  */
13416
- declare function isFnWithParams<T, P extends readonly SimpleToken[]>(input: T, ...params: P): input is T & AsNarrowingFn<P["length"] extends 0 ? [any, ...any[]] : {
13473
+ declare function isFnWithParams<T, P extends (readonly SimpleToken[]) | [number]>(input: T, ...params: P): input is T & AsNarrowingFn<"length" extends keyof T ? T["length"] extends 0 ? IsLiteral<P["length"]> extends true ? Tuple<any, P["length"]> : [any, ...any[]] : [any, ...any[]] : P extends readonly SimpleToken[] ? {
13417
13474
  [K in keyof P]: SimpleType<P[K]>;
13418
- }, T extends TypedFunction ? ReturnType<T> : unknown>;
13475
+ } : P extends [number] ? Tuple<any, P[0]> : never, T extends TypedFunction ? ReturnType<T> : unknown>;
13419
13476
 
13420
13477
  /**
13421
13478
  * **isFunction**(value)
@@ -13424,7 +13481,7 @@ declare function isFnWithParams<T, P extends readonly SimpleToken[]>(input: T, .
13424
13481
  *
13425
13482
  * **Related:** `isFnWithParams`, `ifFunction`
13426
13483
  */
13427
- declare function isFunction<T>(value: T): value is T & TypedFunction;
13484
+ declare function isFunction(value: unknown): value is TypedFunction;
13428
13485
 
13429
13486
  /**
13430
13487
  * **isHexadecimal**`(val)`
@@ -2054,7 +2054,7 @@ function isLeapYear(val) {
2054
2054
  }
2055
2055
 
2056
2056
  // src/dictionary/defineObject.ts
2057
- function defineObject(defn) {
2057
+ function defineObject(defn, ..._optProps) {
2058
2058
  return defn;
2059
2059
  }
2060
2060