trusktr-dummy-test-pkg
Version:
JavaScript/TypeScript class inheritance tools.
230 lines (229 loc) • 12 kB
TypeScript
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;