import { Logger as ChipInLogger } from "@chip-in/logger"; import { ResourceNode, ServiceEngine } from "@chip-in/resource-node"; import { TransactionObject, TransactionRequest } from "../db/Transaction"; import { ExecOptions, TransactionUpdateDetail } from "./ContextManager"; import { QueryHandler } from "./QueryHandler"; export declare const CLIENT_VERSION = 1; /** * Dadgetコンフィグレーションパラメータ */ export declare class DadgetConfigDef { /** * データベース名 */ database: string; /** * 未使用サブセット自動削除フラグ */ autoDeleteSubset?: boolean; /** * ジャーナルのnewデータの文字列化による高速化フラグ */ useJournalStringification?: boolean; } export declare type CsnMode = "strict" | "latest"; /** * 結果オブジェクト */ export declare class QueryResult { /** * トランザクションをコミットしたコンテキスト通番 */ csn: number; /** * クエリに合致したオブジェクトの配列 */ resultSet: object[]; /** * 問い合わせに対するオブジェクトを全て列挙できなかった場合に、残った集合に対するクエリ(サブセットのクエリハンドラの場合のみで、APIからの返却時は undefined) */ restQuery: object | undefined; queryHandlers?: QueryHandler[]; csnMode?: CsnMode; error?: object; } /** * 計数結果オブジェクト */ export declare class CountResult { /** * トランザクションをコミットしたコンテキスト通番 */ csn: number; /** * クエリに合致したオブジェクトの数 */ resultCount: number; /** * 問い合わせに対するオブジェクトを全て列挙できなかった場合に、残った集合に対するクエリ(サブセットのクエリハンドラの場合のみで、APIからの返却時は undefined) */ restQuery: object | undefined; queryHandlers?: QueryHandler[]; csnMode?: CsnMode; error?: object; } /** * API(Dadget) * * 更新APIとクエリルータ機能を提供するAPIである。execメソッド(更新API)とqueryメソッド(クエリルータ)を提供する。 */ export default class Dadget extends ServiceEngine { static enableDeleteSubset: boolean; bootOrder: number; private logger; private option; private node; private database; private currentCsn; private notifyCsn; private updateListeners; private updateListenerKey; private latestCsn; private hasSubset; private lockNotify; constructor(option: DadgetConfigDef); /** * デフォルトサービスクラスを登録 * @param node */ static registerServiceClasses(node: ResourceNode): void; getDatabase(): string; _clone(): Dadget & this; _afterCommit(dadget: Dadget): void; setLatestCsn(csn: number): void; /** * Dadgetの取得 */ static getDb(node: ResourceNode, database: string): Dadget; /** * トランザクション実行 */ static execTransaction(node: ResourceNode, databases: string[], callback: (...seList: Dadget[]) => Promise): Promise; start(node: ResourceNode): Promise; stop(node: ResourceNode): Promise; /** * クエリハンドラの優先度順にソート * @param seList */ static sortQueryHandlers(seList: QueryHandler[]): QueryHandler[]; static __query(node: ResourceNode, database: string, query: object, sort?: object, limit?: number, offset?: number, csn?: number, csnMode?: CsnMode, projection?: object): Promise; static _count(node: ResourceNode, database: string, query: object, csn?: number, csnMode?: CsnMode): Promise; static _wait(node: ResourceNode, database: string, csn: number): Promise; /** * query メソッドはクエリルータを呼び出して、問い合わせを行い、結果オブジェクトを返す。 * * @param query mongoDBと同じクエリーオブジェクト * @param sort mongoDBと同じソートオブジェクト * @param limit 最大取得件数 * @param offset 開始位置 * @param csn 問い合わせの前提CSN * @param csnMode 問い合わせの前提CSNの意味付け * @param projection mongoDBと同じprojectionオブジェクト * @returns 取得した結果オブジェクトを返すPromiseオブジェクト */ query(query: object, sort?: object, limit?: number, offset?: number, csn?: number, csnMode?: CsnMode, projection?: object): Promise; static _query(node: ResourceNode, database: string, query: object, sort?: object, limit?: number, offset?: number, csn?: number, csnMode?: CsnMode, projection?: object): Promise; /** * count メソッドはクエリルータを呼び出して、問い合わせを行い、件数を返す。 * * @param query mongoDBと同じクエリーオブジェクト * @param csn 問い合わせの前提CSN * @param csnMode 問い合わせの前提CSNの意味付け * @returns 取得した件数を返すPromiseオブジェクト */ count(query: object, csn?: number, csnMode?: CsnMode): Promise; /** * targetに設定するUUIDを生成 */ static uuidGen(): string; /** * execメソッドはコンテキストマネージャの Rest API を呼び出してトランザクション要求を実行する。 * * @param csn トランザクションの前提となるコンテキスト通番(トランザクションの type が "insert" で重複のない UUID の場合は 0 を指定できる。それ以外の場合は更新するオブジェクトを取得、または重複IDが存在ないことを確認した query メソッドを実行した時の結果オブジェクトのcsn。) * @param request トランザクションの内容を持つオブジェクト * @param options 更新オプション(任意) * @return 更新されたオブジェクト(更新オプションが指定される場合、NULLの可能性がある) */ exec(csn: number, request: TransactionRequest, options?: ExecOptions): Promise; _exec(csn: number, request: TransactionRequest, atomicId: string | undefined, options?: ExecOptions): Promise; /** * execManyメソッドはコンテキストマネージャの Rest API を呼び出して複数のトランザクション要求を実行する。 * * @param csn exec メソッドのcsnと同じ * @param request トランザクションの内容を持つオブジェクトの配列 * @param options 更新オプション(任意) */ execMany(csn: number, requests: TransactionRequest[], options?: ExecOptions): Promise; _execMany(csn: number, requests: TransactionRequest[], atomicId: string | undefined, options?: ExecOptions): Promise; /** * updateMany メソッドはクエリーで取得した結果に対し更新オペレーターを適用して更新する。 * * @param query mongoDBと同じクエリーオブジェクト * @param operator 更新内容を記述するオペレータ。意味はmongoDB に準ずる。 * @return 変更された行数 */ updateMany(query: object, operator: object): Promise; _updateMany(query: object, operator: object, atomicId: string | undefined): Promise; /** * clearメソッドは全データの削除を実行する。 */ clear(): Promise; _clear(force?: boolean): Promise; private notifyAll; private notifyRollback; procNotify(transaction: TransactionObject): void; /** * データベースの更新通知のリスナを登録する * @param listener 更新があった場合、csn を引数にしてこの関数を呼び出す * @param minInterval 通知の間隔の最小値をミリ秒で指定 * @return 更新通知取り消しに指定するID */ addUpdateListener(listener: (csn: number) => void, minInterval?: number): string; /** * データベースの更新通知のリスナを解除する * @param id 登録時のID */ removeUpdateListener(id: string): void; /** * データベースの更新通知のリスナを全解除 */ resetUpdateListener(): void; /** * 指定されたcsnでの更新内容を取得 */ fetchUpdateDetails(csn: number): Promise; /** * 最新CSNの取得 */ fetchLatestCsn(): Promise; /** * Access-Control-Allow-Origin を設定する */ static setServerAccessControlAllowOrigin(origin: string): void; static getLogger(): typeof ChipInLogger; }