UNPKG

@e-mc/types

Version:

Type definitions for E-mc.

567 lines (490 loc) 16.4 kB
import type { WatchInterval } from './squared'; import type { HashAlgorithm } from './asset'; import type { CloudSource } from './cloud'; import type { PermissionAction, PermissionReadWrite, PermittedDirectories } from './core'; import type { DbSource, TimeoutAction } from './db'; import type { AuthValue, HttpOutgoingHeaders, SecureConfig, ServerPort } from './http'; import type { BackgroundColor, BroadcastOutMethod, ErrorOutMethod, ForegroundColor, LoggerColor, LoggerStatus, TextAlign, TextWrapStyle } from './logger'; import type { ExecAction, IncludeAction } from './module'; import type { SpawnOptions } from 'node:child_process'; import type { BinaryLike, CipherGCMTypes } from 'node:crypto'; import type { LookupAddress } from 'node:dns'; import type { BrotliOptions, ZlibOptions } from 'node:zlib'; // @ts-ignore import type { BackgroundColor as IBackgroundColor } from 'chalk'; // @ts-ignore import type { Unit } from 'bytes'; // @ts-ignore import type { MinimatchOptions } from 'minimatch'; // @ts-ignore import type { Options as ZopfliOptions } from 'node-zopfli'; // @ts-ignore import type { PicomatchOptions } from 'picomatch'; export interface DownloadAction { bin?: string | false; exec?: ExecAction; } export interface HandlerModule<T = PlainObject, U = string> extends HandlerSettings<T> { handler?: U; extensions?: string[]; } export interface HandlerSettings<T = PlainObject> { settings?: T & { broadcast_id?: string | string[] }; } export interface ClientModule<T = ClientSettings> extends HandlerModule<T>, PermissionAction {} export interface ClientSettings<T = PlainObject> extends PlainObject { users?: ObjectMap<T>; cache_dir?: string; } export interface NodeModule<T = NodeSettings> extends HandlerSettings<T> { process?: { cpu_usage?: boolean; memory_usage?: boolean; inline?: boolean; }; require?: { ext?: string | string[] | boolean; npm?: boolean; inline?: boolean; }; posix?: { strict?: boolean; }; } export interface NodeSettings extends PlainObject { package_manager?: "npm" | "yarn" | "pnpm"; } export interface ProcessModule<T = PlainObject> extends HandlerSettings<T> { env?: ProcessEnvConfig; thread?: { admin: { users?: string[]; private?: boolean; }; queue?: { limit?: number | string; expires?: number | string; priority: { bypass?: number | string } & MinMax<number | string>; }; worker?: { users?: boolean | string[]; max?: number | string; max_expires?: number | string; locked?: boolean; channel?: MinMax<number | string> & { expires?: number | string; verbose?: boolean }; }; limit?: number | string; sub_limit?: number | string; expires?: number | string; }; cipher?: CipherConfig; password?: string; } export interface ProcessEnvConfig { apply?: boolean; } export interface TempModule<T = PlainObject> extends HandlerSettings<T> { dir?: string; env?: string; os?: boolean; write?: boolean; } export interface PermissionModule<T = PermissionSettings> extends PermittedDirectories, HandlerSettings<T> { home_read?: boolean; home_write?: boolean; process_exec?: Array<string | ExecOptions>; } export interface PermissionSettings extends PlainObject { picomatch?: PicomatchOptions | null; minimatch?: MinimatchOptions | null; } export interface DownloadModule<T = PlainObject> extends HandlerSettings<T> { expires?: number | string; aria2?: DownloadAction & { check_integrity?: boolean; update_status?: number | string | { interval?: number | string; broadcast_only?: boolean }; max_concurrent_downloads?: number | string; max_connection_per_server?: number | string; bt_stop_timeout?: number | string; bt_tracker_connect_timeout?: number | string; bt_tracker_timeout?: number | string; min_split_size?: string; disk_cache?: number | string; lowest_speed_limit?: number | string; always_resume?: boolean; file_allocation?: "none" | "prealloc" | "trunc" | "falloc"; proxy?: { http: string; https: string; ftp: string; all: string; } | false; no_proxy?: string; conf_path?: string; }; rclone?: DownloadAction & { /* Copy */ check_first?: boolean; checksum?: boolean; cutoff_mode?: "HARD" | "SOFT" | "CAUTIOUS"; ignore_case_sync?: boolean; ignore_checksum?: boolean; ignore_existing?: boolean; ignore_size?: boolean; ignore_times?: boolean; immutable?: boolean; inplace?: boolean; max_backlog?: number; max_duration?: string; max_transfer?: string; metadata?: boolean; modify_window?: string; multi_thread_chunk_size?: string; multi_thread_cutoff?: string; multi_thread_streams?: number; multi_thread_write_buffer_size?: string; no_check_dest?: boolean; no_traverse?: boolean; no_update_dir_modtime?: boolean; refresh_times?: boolean; size_only?: boolean; update?: boolean; /* Listing */ fast_list?: boolean; /* Networking */ bind?: string; contimeout?: string; disable_http2?: boolean; timeout?: string; /* Config */ config?: string; }; } export interface DocumentModule<T = DocumentSettings, U = DbSettings> extends ClientModule<T> { eval?: DocumentEval; imports?: StringMap; versions?: StringMap; format?: AnyObject; db?: DbModule<U>; } export interface DocumentEval { function?: boolean; absolute?: boolean; } export interface DocumentGroup<T = { imports?: StringMap } & AnyObject, U = AnyObject> { transform?: T; view_engine?: U; pages?: ObjectMap<AnyObject>; imports?: StringMap; } export interface DocumentUserSettings<T = AnyObject, U = T> extends DocumentGroup<T, U>, PlainObject { extensions?: string[] | null; imports_strict?: boolean; } export interface DocumentComponent<T = boolean, U = T, V = U> extends Omit<DocumentGroup<T, U>, "pages"> { cloud?: V; } export interface DocumentComponentOption<T = unknown> { cache?: T; coerce?: boolean; abort?: boolean; local_file?: number | string; } export interface DocumentSettings<T extends DocumentUserSettings = DocumentUserSettings> extends DocumentGroup, PurgeAction, ClientSettings<T>, PlainObject { directory?: DocumentDirectory; options?: DocumentComponentOptions; imports_strict?: boolean; } export interface DocumentDirectory extends StringMap { package?: string; } export type DocumentComponentOptions = DocumentComponent<DocumentComponentOption<DocumentTransform>, DocumentComponentOption<boolean>>; export interface ClientDbSettings<T = PlainObject> extends ClientSettings<T>, PurgeAction { session_expires?: number; user_key?: ObjectMap<DbSourceOptions>; imports?: StringMap; } export interface MemoryModule<T = MemorySettings> extends HandlerSettings<T>, Record<string, T | ObjectMap<PurgeBase> | undefined> {} export interface MemorySettings extends PlainObject { users?: boolean | string[]; cache_disk?: MemoryCacheDiskSettings; } export interface MemoryCacheDiskSettings<T = number | string> extends IncludeAction<string[] | null> { enabled?: boolean; min_size?: T; max_size?: T; expires?: T; } export interface DbModule<T = DbSettings> extends ClientModule<T>, DbSourceDataType<ObjectMap<AnyObject>>, PlainObject { apiVersion?: string; } export interface DbSettings<T = DbUserSettings> extends ClientDbSettings<T>, DbSourceDataType<DbSourceOptions> {} export interface DbUserSettings extends DbSourceDataType<{ commands?: ObjectMap<ObjectMap<PlainObject>> }>, PlainObject {} export interface DbCacheSettings extends TimeoutAction { dir?: string; purge?: number | string; when_empty?: boolean; } export interface DbSourceOptions { pool?: PoolConfig<number | string>; cache?: DbCacheValue; coerce?: DbCoerceValue; } export interface DbCoerceSettings<T = boolean> { credential?: T; options?: T; } export interface PurgeBase<T = number | string> extends MinMax { enabled?: boolean; percent?: T; limit?: T; } export interface PurgeComponent extends PurgeBase { interval?: number | string; all?: boolean | number; log?: boolean; prefix?: string; } export type DbCacheValue = number | string | DbCacheSettings; export type DbCoerceValue = boolean | DbCoerceSettings; export type DbSourceDataType<T = unknown> = { [K in DbSource]?: T; }; export type ImageModule<T = ImageSettings> = ClientModule<T>; export interface ImageSettings extends PlainObject { cache?: boolean; webp?: { path?: string; cwebp?: string[]; gif2webp?: string[]; }; } export interface RequestModule<T = RequestSettings> extends HandlerSettings<T>, HttpHostSettings { timeout?: number | string; read_timeout?: number | string; agent?: { keep_alive?: boolean; timeout?: number | string; }; disk?: HttpDiskSettings; buffer?: HttpMemorySettings; connect?: HttpConnectSettings; dns?: DnsLookupSettings; use?: { http_version?: number | string; accept_encoding?: boolean; }; proxy?: HttpProxySettings; headers?: HttpOutgoingHeaders; certs?: ObjectMap<SecureConfig<string | string[]>>; post_limit?: number | string; } export interface HttpProxySettings extends AuthValue, IncludeAction { address?: string; port?: number | string; origin?: string; keep_alive?: boolean; } export interface HttpHostSettings { localhost?: string[]; protocol?: { "http/1.1"?: string[]; h2c?: string[]; h2?: string[]; }; write_stream?: ObjectMap<number | string>; } export interface RequestSettings extends PurgeAction, PlainObject { time_format?: "readable" | "relative" | "none"; } export interface WatchModule<T = WatchSettings> extends HandlerModule<T>, ServerInfo { interval?: number | string; } export interface WatchSettings<T = WatchUserSettings> extends ClientSettings<ObjectMap<T>>, PlainObject {} export interface CompressModule<U = CompressSettings> extends HandlerSettings<U> { gzip?: ZlibOptions; brotli?: BrotliOptions; zopfli?: ZopfliOptions; } export interface CompressSettings extends PlainObject { cache?: boolean; cache_expires?: number | string; gzip_level?: number | string; brotli_quality?: number | string; zopfli_iterations?: number | string; chunk_size?: number | string; } export interface TaskModule<T = PlainObject> extends ClientModule<T>, PlainObject {} export interface CloudModule<T = CloudSettings> extends ClientModule<T>, CloudServiceDataType<ObjectMap<AnyObject>>, PlainObject { apiVersion?: string; } export interface CloudSettings extends ClientDbSettings, CloudServiceDataType<CloudServiceOptions> {} export type CloudServiceDataType<T = unknown> = { [K in CloudSource]?: T; }; export interface CloudServiceOptions extends DbSourceOptions { auth?: CloudAuthSettings; } export interface CloudAuthSettings { storage?: boolean; database?: boolean; } export interface ErrorModule<T = ErrorSettings> extends HandlerModule<T, ErrorOutMethod> { out?: string | ErrorOutMethod; abort?: string[]; fatal?: boolean; /** @deprecated retry_limit */ recursion_limit?: number | string; retry_limit?: number | string; } export interface ErrorSettings extends PlainObject { trap_exceptions?: boolean; } export interface LoggerProgress extends LoggerFormatColor { scroll_buffer?: number | string; max_width?: number | string; use_color?: boolean; text_wrap?: TextWrapStyle; box_char?: string; raw_mode?: boolean; } export interface LoggerModule<T = number | string, U = boolean | T, V = LoggerFormat<T>, W = boolean | LoggerProcessSettings> { enabled?: boolean; level?: number | string; production?: string[]; format?: LoggerFormatSettings<V>; progress?: LoggerProgress; meter?: LoggerMeterSettings<T>; broadcast?: BroadcastServer & { color?: boolean }; status?: boolean | LoggerStatus; color?: boolean; session_id?: U; message?: boolean; stack_trace?: boolean | T; abort?: boolean; stdout?: boolean; unknown?: boolean | LoggerColor; system?: boolean | LoggerColor; node?: boolean | LoggerColor; process?: W; image?: boolean | LoggerColor; compress?: boolean | LoggerColor; watch?: boolean | LoggerColor; file?: boolean | LoggerColor; cloud?: boolean | LoggerColor; db?: boolean | LoggerColor; time_elapsed?: boolean | LoggerColor; time_process?: boolean | LoggerColor; exec?: boolean | LoggerColor; http?: boolean | LoggerColor; } export interface LoggerFormatSettings<T = PlainObject> { title?: T; value?: T; hint?: T & { unit?: "auto" | "s" | "ms" }; session_id?: T; message?: T; meter?: T; error?: T; } export interface LoggerMeterSettings<T = number | string> { http?: T; image?: T; compress?: T; process?: T; } export interface LoggerProcessSettings extends LoggerColor { enabled?: boolean; cpu?: boolean; cpu_bar?: boolean | number | number[]; cpu_bar_color?: [typeof IBackgroundColor, typeof IBackgroundColor, typeof IBackgroundColor]; cpu_single_core?: boolean; mem?: boolean; mem_format?: "%" | Unit; mem_free?: boolean; } export interface LoggerFormatColor { color?: ForegroundColor; bg_color?: BackgroundColor; } export interface LoggerFormat<T = number | string> extends LoggerFormatColor { width?: T; alt_color?: ForegroundColor; bg_alt_color?: BackgroundColor; bold?: boolean; justify?: TextAlign; unit?: string; as?: StringMap; braces?: string | [string, string]; } export interface HttpSettings { version?: number | string; timeout?: number | string; headers?: HttpOutgoingHeaders; certs?: ObjectMap<SecureConfig<string | string[]>>; } export interface HttpDiskSettings extends IncludeAction { enabled?: boolean; limit?: number | string; expires?: number | string; } export interface HttpMemorySettings extends HttpDiskSettings { limit_all?: number | string; to_disk?: number | string | [number | string, (number | string)?]; purge_amount?: number | string; } export interface HttpConnectSettings { timeout?: number | string; retry_wait?: number | string; retry_after?: number | string; retry_limit?: number | string; redirect_limit?: number | string; } export interface DnsLookupSettings { family?: number | string; expires?: number | string; resolve?: ObjectMap<Partial<LookupAddress>>; } export interface HashConfig extends IncludeAction<ObjectMap<string[] | "*">> { enabled?: boolean; algorithm?: HashAlgorithm; etag?: boolean; expires?: number | string; renew?: boolean; limit?: number | string; } export interface BroadcastServer extends ServerInfo<ArrayOf<number | string>> { out?: string | BroadcastOutMethod; } export interface ExecOptions extends SpawnOptions { command?: string; warn?: string | string[]; } export interface PurgeAction { purge?: PurgeComponent; } export interface PoolConfig<T = number> extends MinMax { idle?: T; queue_max?: number; queue_idle?: T; purge?: T; timeout?: number; server_timeout?: number; socket_timeout?: number; } export interface CipherConfig { algorithm?: CipherGCMTypes; key?: BinaryLike; iv?: BinaryLike; } export interface ServerInfo<T = number | string> extends ServerPort<T> { enabled?: boolean; secure?: SecureConfig & ServerPort<T>; } export interface MinMax<T = number> { min?: T; max?: T; } export type WatchUserSettings = ObjectMap<WatchInterval>; export type DocumentTransform = boolean | "etag" | HashAlgorithm | HashConfig | null; export type { ExecAction, PermissionReadWrite, SecureConfig };