UNPKG

@e-mc/types

Version:

Type definitions for E-mc.

322 lines (286 loc) 12.9 kB
import type { DataSource, RequestBase, WorkerAction } from './squared'; import type { IExternalConfig, IExternalFunction, IHost, IModule, ModuleConstructor } from './index'; import type { QueryResult, TimeoutAction } from './db'; import type { StatusType } from '@e-mc/types/lib/logger'; import type { Settings } from './node'; import type { ClientDbSettings, ClientModule, DbCacheValue, DbCoerceSettings, DbSourceOptions } from './settings'; import type { Transferable, Worker, WorkerOptions } from 'node:worker_threads'; import type * as EventEmitter from 'node:events'; export interface IdentifierAction { uuidKey?: string; } export interface AddEventListenerOptions { capture?: boolean; once?: boolean; passive?: boolean; signal?: AbortSignal; } export interface IClient<T extends IHost, U extends ClientModule, V extends FunctionType<any, any> = FunctionType> extends IModule<T>, IExternalConfig<U, U extends ClientModule<infer W> ? W : unknown>, IExternalFunction<V> { init(...args: unknown[]): this; getUserSettings<X>(): X | null; set cacheDir(value: string); get cacheDir(): string; } export interface ClientConstructor<T extends IHost = IHost, U extends ClientModule = ClientModule> extends ModuleConstructor { readonly prototype: IClient<T, U>; new(module?: U): IClient<T, U>; } export interface IClientDb<T extends IHost, U extends ClientModule<ClientDbSettings>, V extends DataSource = DataSource, W extends DbSourceOptions = DbSourceOptions, X extends DbCoerceSettings = DbCoerceSettings> extends IClient<T, U> { database: V[]; cacheExpires: number; add(item: V, state?: number): void; hasCache(source: string, sessionKey?: string): boolean; hasCoerce(source: string, component: keyof DbCoerceSettings, uuidKey: string | undefined): boolean; hasCoerce(source: string, component: keyof DbCoerceSettings, credential?: unknown): boolean; getQueryResult(source: string, credential: unknown, queryString: string, renewCache: boolean): QueryResult | undefined; getQueryResult(source: string, credential: unknown, queryString: string, sessionKey?: string, renewCache?: boolean): QueryResult | undefined; getQueryResult(source: string, credential: unknown, queryString: string, options?: CacheOptions | string, renewCache?: boolean): QueryResult | undefined; setQueryResult(source: string, credential: unknown, queryString: string, result: unknown, sessionKey?: string): QueryResult; setQueryResult(source: string, credential: unknown, queryString: string, result: unknown, options?: CacheOptions | string): QueryResult; getCacheResult(source: string, credential: unknown, queryString: string, cacheValue: CacheOptions, ignoreCache?: IntBool | FirstOf<number, number>): QueryResult | undefined; applyState(items: V | V[], value: number, as?: boolean): void; commit(items?: V[]): Promise<boolean>; valueOfKey(credential: unknown, name: keyof W, component?: keyof X): unknown; settingsOf(source: string, name: keyof W, component?: keyof X): unknown; settingsKey(uuidKey: string, name: keyof W, component?: keyof X): unknown; get pending(): V[]; get committed(): V[]; get failed(): V[]; } export interface ClientDbConstructor<T extends IHost = IHost, U extends ClientModule = ClientModule, V extends DataSource = DataSource> extends ClientConstructor<T, U> { STORE_RESULT_PARTITION_SIZE: number; STORE_RESULT_PARTITION_MULT: number; readonly TRANSACTION_ACTIVE: number; readonly TRANSACTION_PARTIAL: number; readonly TRANSACTION_COMMIT: number; readonly TRANSACTION_TERMINATE: number; readonly TRANSACTION_ABORT: number; readonly TRANSACTION_FAIL: number; loadSettings(settings: Pick<Settings, "process" | "memory">, password?: string): boolean; getTimeout(value: number | string | TimeoutAction | undefined): number; convertTime(value: number | string): number; findResult(source: string, credential: unknown, queryString: string, timeout: number, sessionKey?: string | boolean, renewCache?: boolean): QueryResult | undefined; storeResult(source: string, credential: unknown, queryString: string, result: QueryResult, options: StoreResultOptions): QueryResult; storeResult(source: string, credential: unknown, queryString: string, result: QueryResult, sessionKey: string, sessionExpires: number): QueryResult; storeResult(source: string, credential: unknown, queryString: string, result: QueryResult, cache: DbCacheValue): QueryResult; storeResult(source: string, credential: unknown, queryString: string, result: QueryResult, cache: DbCacheValue | undefined, options: StoreResultOptions): QueryResult; purgeResult(prefix?: string): Promise<number>; extractUUID(credential: unknown): string; setPoolConfig(value: unknown): void; getPoolConfig(source: string): unknown; keyOfResult(source: string, credential: unknown, uuidOnly?: boolean): string; readonly prototype: IClientDb<T, U, V>; new(module?: U, database?: V[]): IClientDb<T, U, V>; } export interface IWorkerGroup extends WorkerBase { [Symbol.iterator](): IteratorObject<IWorkerChannel, BuiltinIteratorReturn>; add(name: string, item: IWorkerChannel, priority?: number): this; get(name: string, force?: boolean | number): IWorkerChannel | undefined; delete(name: string | IWorkerChannel): boolean; free(count?: number): number; print(format: "stats" | "errors"): void; clear(): void; set max(value); get max(): number; get workers(): IWorkerChannel[]; get pending(): number; get available(): number; get errors(): WorkerChannelError[]; get size(): number; get sizeOf(): number; } export interface WorkerGroupConstructor { checkTimeout(value: number, active?: boolean): number; readonly prototype: IWorkerGroup; new(max?: number, locked?: boolean): IWorkerGroup; } export interface IWorkerChannel<T = unknown> extends EventEmitter, Iterable<Worker>, WorkerInfo { [Symbol.iterator](): IteratorObject<Worker, BuiltinIteratorReturn>; sendObject(data: unknown, transferList?: Transferable[], callback?: WorkerChannelResponse<T>, ...returnArgs: unknown[]): Worker; sendBuffer(data: Buffer, shared?: boolean, callback?: WorkerChannelResponse<T>, ...returnArgs: unknown[]): Worker | null; send(data: unknown, transferList?: Transferable[]): Promise<T>; drop(count?: number): number; join(group: IWorkerGroup, label?: string): void; quit(): void; kill(count?: number): Promise<number>; lock(): void; addLog(err: unknown, type?: StatusType): void; isEmpty(): boolean; set min(value); get min(): number; set max(value); get max(): number; set idleTimeout(value); get idleTimeout(): number; get filename(): string; get workers(): Worker[]; get detached(): boolean; get lastAccessed(): Date; get timesAccessed(): number; get frequencyAccessed(): number; get pending(): number; get available(): number; get errors(): WorkerChannelError[]; get size(): number; /* EventEmitter */ on(event: "error" | "messageerror" | "abort", listener: (err: Error) => void): this; on(event: "exit", listener: (exitCode: number) => void): this; on(event: "online", listener: () => void): this; on(event: "message", listener: (value: any) => void): this; on(event: "data", listener: (data: T) => void): this; on(event: "pass", listener: (data: unknown, transferList: Transferable[] | undefined) => void): this; once(event: "error" | "messageerror" | "abort", listener: (err: Error) => void): this; once(event: "exit", listener: (exitCode: number) => void): this; once(event: "online", listener: () => void): this; once(event: "message", listener: (value: any) => void): this; once(event: "data", listener: (data: T) => void): this; once(event: "pass", listener: (data: unknown, transferList: Transferable[] | undefined) => void): this; } export interface WorkerChannelConstructor<T = unknown> { create<U>(filename: string, name: string): IWorkerChannel<U>; create<U>(filename: string, options?: WorkerOptions, name?: string): IWorkerChannel<U>; hasPermission(options?: WorkerAction): boolean; readonly prototype: IWorkerChannel<T>; new(filename: string | URL, options?: WorkerOptions, init?: WorkerChannelInit): IWorkerChannel<T>; } export interface WorkerBase { max: number; readonly pending: number; readonly available: number; readonly errors: WorkerChannelError[]; readonly size: number; } export interface WorkerInfo extends WorkerBase { min: number; readonly filename: string; readonly workers: Worker[]; readonly detached: boolean; readonly idleTimeout: number; readonly lastAccessed: Date; readonly timesAccessed: number; readonly frequencyAccessed: number; } export interface WorkerChannelInit { max?: number; idleTimeout?: number; verbose?: boolean; } export interface WorkerChannelError { timeStamp: Date; type: StatusType; value: unknown; label?: string; } export interface IAbortComponent extends AbortController { reset(): void; get aborted(): boolean; } export interface AbortComponentConstructor { attach(instance: IAbortComponent, signal: AbortSignal, options?: AddEventListenerOptions): void; detach(instance: IAbortComponent, signal: AbortSignal): void; readonly prototype: IAbortComponent; new(): IAbortComponent; } export interface IPermission { setDiskRead(enabled: boolean): void; setDiskRead(pathname?: string | string[], enabled?: boolean): void; setDiskWrite(enabled: boolean): void; setDiskWrite(pathname?: string | string[], enabled?: boolean): void; setUNCRead(enabled: boolean): void; setUNCRead(pathname?: string | string[], enabled?: boolean): void; setUNCWrite(enabled: boolean): void; setUNCWrite(pathname?: string | string[], enabled?: boolean): void; getDiskRead(): string | string[]; getDiskWrite(): string | string[]; getUNCRead(): string | string[]; getUNCWrite(): string | string[]; hasDiskRead(pathname: string): boolean; hasDiskWrite(pathname: string): boolean; hasUNCRead(pathname: string): boolean; hasUNCWrite(pathname: string): boolean; get diskRead(): boolean; get diskWrite(): boolean; get uncRead(): boolean; get uncWrite(): boolean; } export interface PermissionConstructor { create(settings: PermittedDirectories, freeze?: boolean): IPermission | null; create(settings: PermittedDirectories, parent: IPermission | null, freeze?: boolean): IPermission | null; validate(settings: unknown): settings is PermittedDirectories; clone(permission: IPermission, freeze?: boolean): IPermission; match(pathname: string, pattern: string | string[]): boolean; toPosix<T>(value: T): T extends Array<unknown> ? string | string[] : string; readonly prototype: IPermission; new(freeze?: boolean): IPermission; } export interface PermissionReadWrite<T = boolean> { disk_read?: T; disk_write?: T; unc_read?: T; unc_write?: T; } export interface PermissionAction { permission?: PermittedDirectories; } export interface HostInitConfig<T extends HostInitLog = HostInitLog> extends PlainObject, RequestBase<T> { username?: string; remoteIp?: string; ignoreModules?: string[]; } export interface HostInitLog { enabled?: boolean; level?: number | string; exclude?: string | string[]; useColor?: boolean; silent?: boolean; showProgress?: boolean; } export interface PermittedDirectories extends PermissionReadWrite<string | string[]> { inherit?: boolean; } export interface StoreResultOptions { cache?: DbCacheValue; cacheDir?: string; sessionKey?: string; sessionExpires?: number; } export interface CacheOptions { value?: DbCacheValue; renewCache?: boolean; exclusiveOf?: FirstOf<number, number>; sessionKey?: string; } export interface ThreadInfo { pid: number; startTime: number; username?: string; sessionId?: string; broadcastId?: string | string[]; } export interface ThreadCountStat { count: number; pending: number; opened?: number; closed?: number; queued?: number; rejected?: number; killed?: number; startTime?: number; previousTime?: number; max?: number; admin?: ThreadInfo[]; } export interface JoinQueueOptions { args?: unknown[]; reject?: boolean; } export interface ResumeThreadOptions { args: unknown[]; startTime: number; aborted?: boolean; } export interface WorkerMessage<T = PlainObject, U = Buffer> { data: U; options?: T; } export type WorkerChannelResponse<T = unknown> = (result: T, ...args: unknown[]) => void;