@humeris/boule
Advanced tools
Comparing version 3.0.0 to 4.0.0
import { AllFalse, And, Not } from "./boolean"; | ||
export declare type Is<T, U> = (<_>() => _ extends T ? 0 : 1) extends <_>() => _ extends U ? 0 : 1 ? true : false; | ||
export declare type IsSubtype<T, U> = T extends U ? true : false; | ||
@@ -8,33 +9,1 @@ export declare type IsAny<T> = IsSubtype<[T], T & []>; | ||
export declare type IsCompatible<T, U> = IsSubtype<[T, U], [U, T]>; | ||
declare type Primitive = number | string | symbol | boolean | null | undefined | void; | ||
declare const Any: unique symbol; | ||
declare const Unknown: unique symbol; | ||
declare const Never: unique symbol; | ||
declare type Reify<T> = [T] extends T & [] ? typeof Any : unknown extends T ? typeof Unknown : [T] extends [never] ? typeof Never : T extends Primitive ? T : { | ||
[K in keyof T]: Reify<T[K]>; | ||
} & (T extends (...args: infer Parameters) => infer ReturnType ? (...args: { | ||
[K in keyof Parameters]: Reify<Parameters[K]>; | ||
}) => Reify<ReturnType> : unknown) & (T extends new (...args: infer Parameters) => infer ReturnType ? new (...args: { | ||
[K in keyof Parameters]: Reify<Parameters[K]>; | ||
}) => Reify<ReturnType> : unknown); | ||
export declare type Is<T, U, MaxDepth extends number = 5> = _Is<Reify<T>, Reify<U>, [], MaxDepth>; | ||
declare type _Is<T, U, DepthMeter extends never[], MaxDepth extends number> = DepthMeter["length"] extends MaxDepth ? true : IsCompatible<T, U> extends true ? [T, U] extends [Primitive, Primitive] ? true : IsStructurallyEqual<Normalize<T>, Normalize<U>, [never, ...DepthMeter], MaxDepth> : false; | ||
declare type IsStructurallyEqual<T, U, DepthMeter extends never[], MaxDepth extends number> = IsCompatible<keyof T, keyof U> extends true ? IsSubtype<{ | ||
[K in Exclude<keyof T & keyof U, typeof data>]: _Is<T[K], U[K], [ | ||
...DepthMeter | ||
], MaxDepth>; | ||
}, { | ||
[K in Exclude<keyof T & keyof U, typeof data>]: true; | ||
}> : false; | ||
declare const data: unique symbol; | ||
declare const parameters: unique symbol; | ||
declare const return_type: unique symbol; | ||
declare const constructor_parameters: unique symbol; | ||
declare type NormalizeConstructor<T> = T extends new (...args: infer P) => infer R ? T extends infer G & (new (...args: P) => R) ? { | ||
[constructor_parameters]: P; | ||
} & G : never : T; | ||
declare type Normalize<T> = T extends (...args: infer P) => infer R ? T extends infer G & ((...args: P) => R) ? NormalizeConstructor<G> & { | ||
[parameters]: P; | ||
[return_type]: R; | ||
} : never : NormalizeConstructor<T>; | ||
export {}; |
{ | ||
"name": "@humeris/boule", | ||
"version": "3.0.0", | ||
"version": "4.0.0", | ||
"publisher": "humeris", | ||
@@ -17,7 +17,7 @@ "license": "MIT", | ||
"scripts": { | ||
"build": "npm run build:types && npm run build:js", | ||
"build": "yarn run build:types && yarn run build:js", | ||
"build:types": "tsc -p tsconfig.build.json", | ||
"build:js": "rollup -c", | ||
"prepublishOnly": "npm run build", | ||
"test": "npm run ts", | ||
"prepublishOnly": "yarn run build", | ||
"test": "yarn run ts", | ||
"ts": "tsc", | ||
@@ -27,14 +27,13 @@ "format": "prettier --write src" | ||
"devDependencies": { | ||
"@babel/cli": "^7.10.5", | ||
"@babel/core": "^7.11.1", | ||
"@babel/plugin-syntax-class-properties": "^7.10.4", | ||
"@babel/preset-env": "^7.11.0", | ||
"@babel/preset-typescript": "^7.10.4", | ||
"@rollup/plugin-babel": "^5.1.0", | ||
"@rollup/plugin-node-resolve": "^8.4.0", | ||
"@types/node": "^14.0.27", | ||
"prettier": "^2.0.5", | ||
"rollup": "^2.23.1", | ||
"typescript": "^4.1.0-dev.20200817" | ||
"@babel/cli": "^7.16.0", | ||
"@babel/core": "^7.16.0", | ||
"@babel/preset-env": "^7.16.0", | ||
"@babel/preset-typescript": "^7.16.0", | ||
"@rollup/plugin-babel": "^5.3.0", | ||
"@rollup/plugin-node-resolve": "^13.0.6", | ||
"@types/node": "^16.11.6", | ||
"prettier": "^2.4.1", | ||
"rollup": "^2.58.3", | ||
"typescript": "^4.4.4" | ||
} | ||
} |
10
2352
19