UNPKG

acebase-core

Version:

Shared AceBase core components, no need to install manually

345 lines 11 kB
import { SimpleEventEmitter } from './simple-event-emitter'; import type { TypedArrayLike } from './utils'; export interface IDataIndex { /** * Path of the indexed collection */ path: string; /** * key (property) of the indexed items in the collection */ key: string; /** * Whether the values are indexed with case sensitivity or not (applies to string values only) */ caseSensitive: boolean; /** * Locale of the indexed string values */ textLocale: string; /** * Key (property) that contains the locale of an indexed item, overrides the default in textLocale */ textLocaleKey?: string; /** * keys (properties) whose values are included in the index */ includeKeys: string[]; /** * Any additional info that is being stored with the items. Eg for fulltext indexes, it contains the word count and location */ indexMetadataKeys: string[]; /** * Type of index, eg 'normal', 'fulltext', 'array' or 'geo' */ type: string; /** * name of the index file on disk */ fileName: string; /** * description of the index */ description: string; } export interface QueryFilter { key: string | number; op: string; compare: any; } export interface QueryOrder { key: string; ascending: boolean; } export interface Query { filters: QueryFilter[]; /** * number of results to skip, useful for paging */ skip: number; /** * max number of results to return */ take: number; /** * sort order */ order: QueryOrder[]; } export interface QueryOptions { /** * whether to return matching data, or paths to matching nodes only * @default false */ snapshots?: boolean; /** * when using snapshots, keys or relative paths to include in result data */ include?: (string | number)[]; /** * when using snapshots, keys or relative paths to exclude from result data */ exclude?: (string | number)[]; /** * when using snapshots, whether to include child objects in result data * @default true */ child_objects?: boolean; /** * Whether to allow cached results * @deprecated Use `cache_mode` instead */ allow_cache?: boolean; /** How to handle results from cache */ cache_mode?: 'allow' | 'bypass' | 'force'; /** * callback function for events */ eventHandler?: (event: { name: 'add' | 'change' | 'remove'; path: string; value: any; } | { name: string; [key: string]: any; }) => boolean | void; /** * monitor changes * @default false */ monitor?: boolean | { /** * monitor new matches (either because they were added, or changed and now match the query) */ add?: boolean; /** * monitor changed children that still match this query */ change?: boolean; /** * monitor children that don't match this query anymore */ remove?: boolean; }; } /** * For backward compatiblity * @deprecated Use `Query` */ export type IApiQuery = Query; /** * For backward compatiblity * @deprecated Use `QueryOptions` */ export type IApiQueryOptions = QueryOptions; export interface IStreamLike { /** * Method that writes exported data to your stream * @param str string data to append * @returns Returns void or a Promise that resolves once writing to your stream is done. When returning a Promise, streaming will wait until it has resolved, so you can wait for eg a filestream to "drain". */ write(str: string): void | Promise<void>; } /** * Function that writes exported data to your stream * @param str string data to append * @returns Returns void or a Promise that resolves once writing to your stream is done. When returning a Promise, streaming will wait until it has resolved, so you can wait for eg a filestream to "drain". */ export type StreamWriteFunction = (str: string) => void | Promise<void>; /** * Function that reads data from your stream * @param length suggested number of bytes to read, reading more or less is allowed. * @returns Returns a string, typed array, or promise thereof */ export type StreamReadFunction = (length: number) => string | TypedArrayLike | Promise<string | TypedArrayLike>; export type ReflectionType = 'info' | 'children'; export interface IReflectionNodeInfo { key: string | number; exists: boolean; type: 'unknown' | 'object' | 'array' | 'number' | 'boolean' | 'string' | 'date' | 'bigint' | 'binary' | 'reference'; /** only present for small values (number, boolean, date), small strings & binaries, and empty objects and arrays */ value?: any; /** Physical storage location details used by the target database type */ address?: any; /** children are included for the target path of the reflection request */ children?: { count: number; } | { more: boolean; list: Pick<IReflectionNodeInfo, 'key' | 'type' | 'value' | 'address' | 'access'>[]; }; /** access rights if impersonation is used in reflection request */ access?: { read: boolean; write: boolean; }; } export interface IReflectionChildrenInfo { more: boolean; list: Pick<IReflectionNodeInfo, 'key' | 'type' | 'value' | 'address'>[]; } export interface IAceBaseSchemaInfo { path: string; schema: Record<string, any> | string; text: string; } export type EventSubscriptionCallback = (err: Error | null, path: string, value: any, previous?: any, eventContext?: any) => void; export type EventSubscriptionSettings = { newOnly: boolean; cancelCallback: (err: Error) => void; syncFallback: 'reload' | (() => any | Promise<any>); }; /** * Uncompressed mutation: a single database operation of `type` `"set"` (overwrite) or `"update"` (merge) on `mutations.path` * caused the value of `path` to be mutated to `value` */ export type ValueMutation = { /** path the mutation had effect on */ path: string; /** database operation used */ type: 'set' | 'update'; /** new effective value of the node at current `path` */ value: unknown; /** context used when database operation executed */ context: unknown; /** id (cursor) of the transaction log item */ id: string; /** timestamp of the mutation */ timestamp: number; /** actual changes caused by the database operation of `type` on `mutations.path` at the time of execution */ changes: { /** path the database operation was executed on, used as root of all changes in `list` */ path: string; /** list of all changed values relative to `path` */ list: Array<{ /** keys trail to mutated path, relative to `path` */ target: Array<string | number>; /** new value stored at target */ val: unknown; /** prev value stored at target */ prev: unknown; }>; }; }; /** * Compressed mutation: one or more database operations caused the value of the node at `path` to effectively be mutated * from `previous` to `value` using database operation logic of `type` `"set"` (overwrite) or `"update"` (merge) */ export type ValueChange = { path: string; type: 'set' | 'update'; previous: any; value: any; context: any; }; export type TransactionLogFilter = ({ /** * cursor to use */ cursor: string; } | { /** * timestamp to use */ timestamp: number; }) & { /** * path to get all mutations for, only used if `for` property isn't used */ path?: string; /** * paths and events to get relevant mutations for */ for?: Array<{ path: string; events: string[]; }>; }; /** * Refactor to type/interface once acebase and acebase-client have been ported to TS */ export declare abstract class Api extends SimpleEventEmitter { constructor(); /** * Provides statistics * @param options */ stats(options?: any): Promise<any>; /** * @param path * @param event event to subscribe to ("value", "child_added" etc) * @param callback callback function */ subscribe(path: string, event: string, callback: EventSubscriptionCallback, settings?: EventSubscriptionSettings): void | Promise<void>; unsubscribe(path: string, event?: string, callback?: EventSubscriptionCallback): void | Promise<void>; update(path: string, updates: any, options?: any): Promise<{ cursor?: string; }>; set(path: string, value: any, options?: any): Promise<{ cursor?: string; }>; get(path: string, options?: any): Promise<{ value: any; context: any; cursor?: string; }>; transaction(path: string, callback: (val: any) => any, options?: any): Promise<{ cursor?: string; }>; exists(path: string): Promise<boolean>; query(path: string, query: Query, options?: QueryOptions): Promise<{ results: Array<{ path: string; val: any; }> | string[]; context: any; stop(): Promise<void>; }>; reflect(path: string, type: 'children', args: any): Promise<IReflectionChildrenInfo>; reflect(path: string, type: 'info', args: any): Promise<IReflectionNodeInfo>; reflect(path: string, type: ReflectionType, args: any): Promise<any>; export(path: string, write: StreamWriteFunction, options: any): Promise<void>; import(path: string, read: StreamReadFunction, options: any): Promise<void>; /** Creates an index on key for all child nodes at path */ createIndex(path: string, key: string, options: any): Promise<IDataIndex>; getIndexes(): Promise<IDataIndex[]>; deleteIndex(filePath: string): Promise<void>; setSchema(path: string, schema: Record<string, any> | string, warnOnly?: boolean): Promise<void>; getSchema(path: string): Promise<IAceBaseSchemaInfo>; getSchemas(): Promise<IAceBaseSchemaInfo[]>; validateSchema(path: string, value: any, isUpdate: boolean): Promise<{ ok: boolean; reason?: string; warning?: string; }>; getMutations(filter: ({ cursor: string; } | { timestamp: number; }) & { path?: string; for?: Array<{ path: string; events: string[]; }>; }): Promise<{ used_cursor: string | null; new_cursor: string; mutations: ValueMutation[]; }>; getChanges(filter: ({ cursor: string; } | { timestamp: number; }) & { path?: string; for?: Array<{ path: string; events: string[]; }>; }): Promise<{ used_cursor: string | null; new_cursor: string; changes: ValueChange[]; }>; } //# sourceMappingURL=api.d.ts.map