UNPKG

trusktr-dummy-test-pkg

Version:

JavaScript/TypeScript class inheritance tools.

230 lines (229 loc) 12 kB
import { Constructor } from './utils.js'; declare type ImplementationKeys = 'static' | 'private' | 'protected'; declare type FunctionToConstructor<T, TReturn> = T extends (...a: infer A) => void ? new (...a: A) => TReturn : never; declare type ReplaceCtorReturn<T, TReturn> = T extends new (...a: infer A) => unknown ? new (...a: A) => TReturn : never; declare type ConstructorOrDefault<T> = T extends { constructor: infer TCtor; } ? TCtor : () => void; declare type SuperType<_T, TSuper extends Constructor<any>> = TSuper extends Constructor<infer I, infer A> ? { constructor: (...a: A) => I; } & InstanceType<TSuper> : never; declare type SuperHelper<TSuper extends Constructor> = <T>(self: T) => SuperType<T, TSuper>; declare type PrivateHelper = <T>(self: T) => T extends { __: { private: infer TPrivate; }; } ? TPrivate : never; declare type PublicHelper = <T>(self: T) => Omit<T, ImplementationKeys>; declare type ProtectedHelper = <T>(self: T) => T extends { __: { protected: infer TProtected; }; } ? TProtected : never; declare type Statics<T> = T extends { static: infer TStatic; } ? TStatic : {}; declare type SaveInheritedProtected<T> = T extends { protected: infer TProtected; } ? TProtected : {}; declare type ExtractInheritedProtected<T> = T extends { __: infer TProtected; } ? TProtected : {}; export declare const staticBlacklist: string[]; export declare class InvalidSuperAccessError extends Error { } export declare class InvalidAccessError extends Error { } export declare const Class: { (): ObjectConstructor; (name: string): { extends<TBase extends new (...a: any[]) => object, T>(base: TBase, members: (helpers: { Super: SuperHelper<TBase>; Public: PublicHelper; Protected: ProtectedHelper; Private: PrivateHelper; }) => T & Partial<InstanceType<TBase>> & ThisType<{ [P in keyof (Pick<T & InstanceType<TBase> & ExtractInheritedProtected<TBase>, Exclude<keyof T, ImplementationKeys> | Exclude<keyof InstanceType<TBase>, ImplementationKeys> | Exclude<keyof ExtractInheritedProtected<TBase>, ImplementationKeys>> & { __: Pick<T & InstanceType<TBase> & ExtractInheritedProtected<TBase>, Extract<keyof T, ImplementationKeys> | Extract<keyof InstanceType<TBase>, ImplementationKeys> | Extract<keyof ExtractInheritedProtected<TBase>, ImplementationKeys>>; })]: (Pick<T & InstanceType<TBase> & ExtractInheritedProtected<TBase>, Exclude<keyof T, ImplementationKeys> | Exclude<keyof InstanceType<TBase>, ImplementationKeys> | Exclude<keyof ExtractInheritedProtected<TBase>, ImplementationKeys>> & { __: Pick<T & InstanceType<TBase> & ExtractInheritedProtected<TBase>, Extract<keyof T, ImplementationKeys> | Extract<keyof InstanceType<TBase>, ImplementationKeys> | Extract<keyof ExtractInheritedProtected<TBase>, ImplementationKeys>>; })[P]; }>, brand?: object | undefined): T extends { constructor: infer _TCtor; } ? FunctionToConstructor<ConstructorOrDefault<T>, { [P_1 in keyof (InstanceType<TBase> & Pick<T, Exclude<keyof T, ImplementationKeys>>)]: (InstanceType<TBase> & Pick<T, Exclude<keyof T, ImplementationKeys>>)[P_1]; }> & { [P_3 in keyof ({ [P_2 in keyof (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })]: (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })[P_2]; } & Pick<TBase, keyof TBase>)]: ({ [P_2 in keyof (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })]: (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })[P_2]; } & Pick<TBase, keyof TBase>)[P_3]; } : ReplaceCtorReturn<TBase, { [P_4 in keyof InstanceType<TBase>]: InstanceType<TBase>[P_4]; }> & { [P_6 in keyof ({ [P_5 in keyof (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })]: (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })[P_5]; } & Pick<TBase, keyof TBase>)]: ({ [P_5 in keyof (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })]: (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })[P_5]; } & Pick<TBase, keyof TBase>)[P_6]; }; }; <T_1>(name: string, members: (helpers: { Public: PublicHelper; Protected: ProtectedHelper; Private: PrivateHelper; Super: never; }) => T_1 & ThisType<{ [P_7 in keyof (Pick<T_1, Exclude<keyof T_1, ImplementationKeys>> & { __: Pick<T_1, Extract<keyof T_1, ImplementationKeys>>; })]: (Pick<T_1, Exclude<keyof T_1, ImplementationKeys>> & { __: Pick<T_1, Extract<keyof T_1, ImplementationKeys>>; })[P_7]; }>, brand?: object | undefined): FunctionToConstructor<ConstructorOrDefault<T_1>, { [P_8 in keyof Pick<T_1, Exclude<keyof T_1, ImplementationKeys>>]: Pick<T_1, Exclude<keyof T_1, ImplementationKeys>>[P_8]; }> & { [P_10 in keyof { [P_9 in keyof (Statics<T_1> & { __: { protected: SaveInheritedProtected<T_1>; }; })]: (Statics<T_1> & { __: { protected: SaveInheritedProtected<T_1>; }; })[P_9]; }]: { [P_9 in keyof (Statics<T_1> & { __: { protected: SaveInheritedProtected<T_1>; }; })]: (Statics<T_1> & { __: { protected: SaveInheritedProtected<T_1>; }; })[P_9]; }[P_10]; }; <T_2>(name: string, members: T_2 & ThisType<{ [P_11 in keyof (Pick<T_2, Exclude<keyof T_2, ImplementationKeys>> & { __: Pick<T_2, Extract<keyof T_2, ImplementationKeys>>; })]: (Pick<T_2, Exclude<keyof T_2, ImplementationKeys>> & { __: Pick<T_2, Extract<keyof T_2, ImplementationKeys>>; })[P_11]; }>, brand?: object | undefined): FunctionToConstructor<ConstructorOrDefault<T_2>, { [P_12 in keyof Pick<T_2, Exclude<keyof T_2, ImplementationKeys>>]: Pick<T_2, Exclude<keyof T_2, ImplementationKeys>>[P_12]; }> & { [P_14 in keyof { [P_13 in keyof (Statics<T_2> & { __: { protected: SaveInheritedProtected<T_2>; }; })]: (Statics<T_2> & { __: { protected: SaveInheritedProtected<T_2>; }; })[P_13]; }]: { [P_13 in keyof (Statics<T_2> & { __: { protected: SaveInheritedProtected<T_2>; }; })]: (Statics<T_2> & { __: { protected: SaveInheritedProtected<T_2>; }; })[P_13]; }[P_14]; }; }; export declare function createClassHelper(options?: any): { (): ObjectConstructor; (name: string): { extends<TBase extends new (...a: any[]) => object, T>(base: TBase, members: (helpers: { Super: SuperHelper<TBase>; Public: PublicHelper; Protected: ProtectedHelper; Private: PrivateHelper; }) => T & Partial<InstanceType<TBase>> & ThisType<{ [P in keyof (Pick<T & InstanceType<TBase> & ExtractInheritedProtected<TBase>, Exclude<keyof T, ImplementationKeys> | Exclude<keyof InstanceType<TBase>, ImplementationKeys> | Exclude<keyof ExtractInheritedProtected<TBase>, ImplementationKeys>> & { __: Pick<T & InstanceType<TBase> & ExtractInheritedProtected<TBase>, Extract<keyof T, ImplementationKeys> | Extract<keyof InstanceType<TBase>, ImplementationKeys> | Extract<keyof ExtractInheritedProtected<TBase>, ImplementationKeys>>; })]: (Pick<T & InstanceType<TBase> & ExtractInheritedProtected<TBase>, Exclude<keyof T, ImplementationKeys> | Exclude<keyof InstanceType<TBase>, ImplementationKeys> | Exclude<keyof ExtractInheritedProtected<TBase>, ImplementationKeys>> & { __: Pick<T & InstanceType<TBase> & ExtractInheritedProtected<TBase>, Extract<keyof T, ImplementationKeys> | Extract<keyof InstanceType<TBase>, ImplementationKeys> | Extract<keyof ExtractInheritedProtected<TBase>, ImplementationKeys>>; })[P]; }>, brand?: object | undefined): T extends { constructor: infer _TCtor; } ? FunctionToConstructor<ConstructorOrDefault<T>, { [P_1 in keyof (InstanceType<TBase> & Pick<T, Exclude<keyof T, ImplementationKeys>>)]: (InstanceType<TBase> & Pick<T, Exclude<keyof T, ImplementationKeys>>)[P_1]; }> & { [P_3 in keyof ({ [P_2 in keyof (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })]: (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })[P_2]; } & Pick<TBase, keyof TBase>)]: ({ [P_2 in keyof (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })]: (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })[P_2]; } & Pick<TBase, keyof TBase>)[P_3]; } : ReplaceCtorReturn<TBase, { [P_4 in keyof InstanceType<TBase>]: InstanceType<TBase>[P_4]; }> & { [P_6 in keyof ({ [P_5 in keyof (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })]: (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })[P_5]; } & Pick<TBase, keyof TBase>)]: ({ [P_5 in keyof (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })]: (Statics<T> & { __: { protected: SaveInheritedProtected<T>; }; })[P_5]; } & Pick<TBase, keyof TBase>)[P_6]; }; }; <T_1>(name: string, members: (helpers: { Public: PublicHelper; Protected: ProtectedHelper; Private: PrivateHelper; Super: never; }) => T_1 & ThisType<{ [P_7 in keyof (Pick<T_1, Exclude<keyof T_1, ImplementationKeys>> & { __: Pick<T_1, Extract<keyof T_1, ImplementationKeys>>; })]: (Pick<T_1, Exclude<keyof T_1, ImplementationKeys>> & { __: Pick<T_1, Extract<keyof T_1, ImplementationKeys>>; })[P_7]; }>, brand?: object | undefined): FunctionToConstructor<ConstructorOrDefault<T_1>, { [P_8 in keyof Pick<T_1, Exclude<keyof T_1, ImplementationKeys>>]: Pick<T_1, Exclude<keyof T_1, ImplementationKeys>>[P_8]; }> & { [P_10 in keyof { [P_9 in keyof (Statics<T_1> & { __: { protected: SaveInheritedProtected<T_1>; }; })]: (Statics<T_1> & { __: { protected: SaveInheritedProtected<T_1>; }; })[P_9]; }]: { [P_9 in keyof (Statics<T_1> & { __: { protected: SaveInheritedProtected<T_1>; }; })]: (Statics<T_1> & { __: { protected: SaveInheritedProtected<T_1>; }; })[P_9]; }[P_10]; }; <T_2>(name: string, members: T_2 & ThisType<{ [P_11 in keyof (Pick<T_2, Exclude<keyof T_2, ImplementationKeys>> & { __: Pick<T_2, Extract<keyof T_2, ImplementationKeys>>; })]: (Pick<T_2, Exclude<keyof T_2, ImplementationKeys>> & { __: Pick<T_2, Extract<keyof T_2, ImplementationKeys>>; })[P_11]; }>, brand?: object | undefined): FunctionToConstructor<ConstructorOrDefault<T_2>, { [P_12 in keyof Pick<T_2, Exclude<keyof T_2, ImplementationKeys>>]: Pick<T_2, Exclude<keyof T_2, ImplementationKeys>>[P_12]; }> & { [P_14 in keyof { [P_13 in keyof (Statics<T_2> & { __: { protected: SaveInheritedProtected<T_2>; }; })]: (Statics<T_2> & { __: { protected: SaveInheritedProtected<T_2>; }; })[P_13]; }]: { [P_13 in keyof (Statics<T_2> & { __: { protected: SaveInheritedProtected<T_2>; }; })]: (Statics<T_2> & { __: { protected: SaveInheritedProtected<T_2>; }; })[P_13]; }[P_14]; }; }; export default Class;