Skip to content

Commit

Permalink
chore(TS): Fix support for isOptional in ensure options (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
borracciaBlu committed Aug 4, 2022
1 parent 50c31ad commit 320f89b
Show file tree
Hide file tree
Showing 25 changed files with 116 additions and 55 deletions.
6 changes: 4 additions & 2 deletions ts-types/array-length/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureArrayLength(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
declare function ensureArrayLength(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<number>): number;

declare function ensureArrayLength(value: any, options?: EnsureOptions): number;
export default ensureArrayLength;
9 changes: 6 additions & 3 deletions ts-types/array-like/ensure.d.ts
@@ -1,7 +1,10 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

type LengthwiseObject = { length: number } & object;
type ArrayLikeEnsureOptions = { allowString?: boolean } | EnsureOptions;
type ArrayLikeEnsureOptions = { allowString?: boolean };


declare function ensureArrayLike<T>(value: any, options?: ArrayLikeEnsureOptions & EnsureBaseOptions & EnsureIsOptional): T[] | string | LengthwiseObject | null;
declare function ensureArrayLike<T>(value: any, options?: ArrayLikeEnsureOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault<T[] | string | LengthwiseObject>): T[] | string | LengthwiseObject;

declare function ensureArrayLike<T>(value: any, options?: ArrayLikeEnsureOptions): T[] | string | LengthwiseObject;
export default ensureArrayLike;
9 changes: 6 additions & 3 deletions ts-types/array/ensure.d.ts
@@ -1,6 +1,9 @@
import { EnsureFunction, EnsureOptions } from '../ensure';
import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

type EnsureArrayOptions = { ensureItem?: EnsureFunction } | EnsureOptions;
type EnsureArrayOptions = { ensureItem?: EnsureFunction };


declare function ensureArray<T>(value: any, options?: EnsureArrayOptions & EnsureBaseOptions & EnsureIsOptional): T[] | null;
declare function ensureArray<T>(value: any, options?: EnsureArrayOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault<T[]>): T[];

declare function ensureArray<T>(value: any, options?: EnsureArrayOptions): T[];
export default ensureArray;
6 changes: 4 additions & 2 deletions ts-types/big-int/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from "../ensure";
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureBigInt(value: any, options?: EnsureBaseOptions & EnsureIsOptional): bigint | null;
declare function ensureBigInt(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<bigint>): bigint;

declare function ensureBigInt(value: any, options?: EnsureOptions): bigint;
export default ensureBigInt;
6 changes: 4 additions & 2 deletions ts-types/constructor/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureFunction, EnsureOptions } from '../ensure';
import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureConstructor(value: any, options?: EnsureBaseOptions & EnsureIsOptional): EnsureFunction | object | null;
declare function ensureConstructor(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<EnsureFunction | object>): EnsureFunction | object;

declare function ensureConstructor(value: any, options?: EnsureOptions): EnsureFunction | object;
export default ensureConstructor;
6 changes: 4 additions & 2 deletions ts-types/date/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureDate(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Date | null;
declare function ensureDate(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<Date>): Date;

declare function ensureDate(value: any, options?: EnsureOptions): Date;
export default ensureDate;
14 changes: 11 additions & 3 deletions ts-types/ensure.d.ts
@@ -1,13 +1,21 @@
export type EnsureFunction = (...args: any[]) => any;
export interface EnsureOptions {
export interface EnsureBaseOptions {
name?: string;
isOptional?: boolean;
default?: any;
errorMessage?: string;
errorCode?: number;
Error?: ErrorConstructor;
}

export interface EnsureIsOptional {
isOptional?: boolean;
}

export interface EnsureDefault<T> {
default?: T;
}

type EnsureOptions = EnsureBaseOptions & EnsureIsOptional & EnsureDefault<any>;

type ValidationDatum = [argumentName: string, inputValue: any, ensureFunction: EnsureFunction, options?: object];
type ValidationDatumList = ValidationDatum[];

Expand Down
6 changes: 4 additions & 2 deletions ts-types/error/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureError(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Error | null;
declare function ensureError(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<Error>): Error;

declare function ensureError(value: any, options?: EnsureOptions): Error;
export default ensureError;
6 changes: 4 additions & 2 deletions ts-types/finite/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureFinite(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
declare function ensureFinite(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<number>): number;

declare function ensureFinite(value: any, options?: EnsureOptions): number;
export default ensureFinite;
6 changes: 4 additions & 2 deletions ts-types/function/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureFunction, EnsureOptions } from '../ensure';
import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureFunction(value: any, options?: EnsureBaseOptions & EnsureIsOptional): EnsureFunction | null;
declare function ensureFunction(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<EnsureFunction>): EnsureFunction;

declare function ensureFunction(value: any, options?: EnsureOptions): EnsureFunction;
export default ensureFunction;
6 changes: 4 additions & 2 deletions ts-types/integer/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureInteger(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
declare function ensureInteger(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<number>): number;

declare function ensureInteger(value: any, options?: EnsureOptions): number;
export default ensureInteger;
9 changes: 6 additions & 3 deletions ts-types/iterable/ensure.d.ts
@@ -1,6 +1,9 @@
import { EnsureFunction, EnsureOptions } from '../ensure';
import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

type IterableEnsureOptions = { ensureItem?: EnsureFunction, allowString?: boolean, denyEmpty?: boolean} | EnsureOptions;
type IterableEnsureOptions = { ensureItem?: EnsureFunction, allowString?: boolean, denyEmpty?: boolean};


declare function ensureIterable<T>(value: any, options?: IterableEnsureOptions & EnsureBaseOptions & EnsureIsOptional): T[] | null;
declare function ensureIterable<T>(value: any, options?: IterableEnsureOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault<T[]>): T[];

declare function ensureIterable<T>(value: any, options?: IterableEnsureOptions): T[];
export default ensureIterable;
6 changes: 4 additions & 2 deletions ts-types/map/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureMap<K, V>(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Map<K, V> | null;
declare function ensureMap<K, V>(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<Map<K, V>>): Map<K, V>;

declare function ensureMap<K, V>(value: any, options?: EnsureOptions): Map<K, V>;
export default ensureMap;
6 changes: 4 additions & 2 deletions ts-types/natural-number/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureNaturalNumber(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
declare function ensureNaturalNumber(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<number>): number;

declare function ensureNaturalNumber(value: any, options?: EnsureOptions): number;
export default ensureNaturalNumber;
6 changes: 4 additions & 2 deletions ts-types/number/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureNumber(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
declare function ensureNumber(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<number>): number;

declare function ensureNumber(value: any, options?: EnsureOptions): number;
export default ensureNumber;
6 changes: 4 additions & 2 deletions ts-types/object/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureObject(value: any, options?: EnsureBaseOptions & EnsureIsOptional): object | null;
declare function ensureObject(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<object>): object;

declare function ensureObject(value: any, options?: EnsureOptions): object;
export default ensureObject;
6 changes: 4 additions & 2 deletions ts-types/plain-function/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureFunction, EnsureOptions } from '../ensure';
import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensurePlainFunction(value: any, options?: EnsureBaseOptions & EnsureIsOptional): EnsureFunction | null;
declare function ensurePlainFunction(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<EnsureFunction>): EnsureFunction;

declare function ensurePlainFunction(value: any, options?: EnsureOptions): EnsureFunction;
export default ensurePlainFunction;
9 changes: 6 additions & 3 deletions ts-types/plain-object/ensure.d.ts
@@ -1,6 +1,9 @@
import { EnsureFunction, EnsureOptions } from '../ensure';
import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

type PlainObjectEnsureOptions = {allowedKeys?: string[], ensurePropertyValue?: EnsureFunction} | EnsureOptions;
type PlainObjectEnsureOptions = {allowedKeys?: string[], ensurePropertyValue?: EnsureFunction};


declare function ensurePlainObject(value: any, options?: PlainObjectEnsureOptions & EnsureBaseOptions & EnsureIsOptional): object | null;
declare function ensurePlainObject(value: any, options?: PlainObjectEnsureOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault<object>): object;

declare function ensurePlainObject(value: any, options?: PlainObjectEnsureOptions): object;
export default ensurePlainObject;
6 changes: 4 additions & 2 deletions ts-types/promise/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensurePromise<T>(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Promise<T> | null;
declare function ensurePromise<T>(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<Promise<T>>): Promise<T>;

declare function ensurePromise<T>(value: any, options?: EnsureOptions): Promise<T>;
export default ensurePromise;
6 changes: 4 additions & 2 deletions ts-types/reg-exp/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureRegExp(value: any, options?: EnsureBaseOptions & EnsureIsOptional): RegExp | null;
declare function ensureRegExp(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<RegExp>): RegExp;

declare function ensureRegExp(value: any, options?: EnsureOptions): RegExp;
export default ensureRegExp;
6 changes: 4 additions & 2 deletions ts-types/safe-integer/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureSafeInteger(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
declare function ensureSafeInteger(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<number>): number;

declare function ensureSafeInteger(value: any, options?: EnsureOptions): number;
export default ensureSafeInteger;
6 changes: 4 additions & 2 deletions ts-types/set/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureSet<T>(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Set<T> | null;
declare function ensureSet<T>(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<Set<T>>): Set<T>;

declare function ensureSet<T>(value: any, options?: EnsureOptions): Set<T>;
export default ensureSet;
6 changes: 4 additions & 2 deletions ts-types/string/ensure.d.ts
@@ -1,4 +1,6 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureString(value: any, options?: EnsureBaseOptions & EnsureIsOptional): string | null;
declare function ensureString(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<string>): string;

declare function ensureString(value: any, options?: EnsureOptions): string;
export default ensureString;
8 changes: 6 additions & 2 deletions ts-types/thenable/ensure.d.ts
@@ -1,5 +1,9 @@
import { EnsureFunction, EnsureOptions } from '../ensure';
import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

type ThenableObject = { then: EnsureFunction } & object;

declare function ensureThenable<T>(value: any, options?: EnsureOptions): Promise<T> | ThenableObject;

declare function ensureThenable<T>(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Promise<T> | ThenableObject | null;
declare function ensureThenable<T>(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<Promise<T> | ThenableObject>): Promise<T> | ThenableObject;

export default ensureThenable;
5 changes: 3 additions & 2 deletions ts-types/time-value/ensure.d.ts
@@ -1,4 +1,5 @@
import { EnsureOptions } from '../ensure';
import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';

declare function ensureTimeValue(value: any, options?: EnsureOptions): number;
declare function ensureTimeValue(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
declare function ensureTimeValue(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault<number>): number;
export default ensureTimeValue;

0 comments on commit 320f89b

Please sign in to comment.