UNPKG

@cloudbase/node-sdk

Version:

tencent cloud base server sdk for node.js

685 lines (639 loc) 19.7 kB
/* eslint-disable @typescript-eslint/method-signature-style */ /* eslint-disable @typescript-eslint/ban-types */ /* eslint-disable @typescript-eslint/no-extraneous-class */ /* eslint-disable @typescript-eslint/naming-convention */ import { IKeyValue, ICustomReqOpts, IBaseResult } from './index' import { IInnerCloudBaseConfig } from './internal' export interface ICountRes extends IBaseResult { total?: number } export declare namespace Database { interface GeoType { Point: typeof Point LineString: typeof LineString MultiLineString: typeof MultiLineString MultiPoint: typeof MultiPoint MultiPolygon: typeof MultiPolygon Polygon: typeof Polygon } class HiddenSymbol { constructor(target: any) } class InternalSymbol extends HiddenSymbol { constructor(target: any, __mark__: any) static for(target: any): InternalSymbol } type OrderByDirection = 'desc' | 'asc' enum QueryType { WHERE = 'WHERE', DOC = 'DOC' } interface ISerializedPoint { type: string coordinates: [number, number] } interface ISerializedLineString { type: string coordinates: Array<[number, number]> } interface ISerializedPolygon { type: string coordinates: Array<Array<[number, number]>> } interface ISerializedMultiPoint { type: string coordinates: Array<[number, number]> } interface ISerializedMultiLineString { type: string coordinates: Array<Array<[number, number]>> } interface ISerializedMultiPolygon { type: string coordinates: Array<Array<Array<[number, number]>>> } export class Point { readonly latitude: number readonly longitude: number constructor(longitude: number, latitude: number) parse( key: any ): Record<number, { type: string coordinates: number[] }> toJSON(): { type: string coordinates: number[] } toReadableString(): string static validate(point: ISerializedPoint): boolean readonly _internalType: InternalSymbol } export class LineString { readonly points: Point[] constructor(points: Point[]) parse( key: any ): Record<number, { type: string coordinates: number[][] }> toJSON(): { type: string coordinates: number[][] } static validate(lineString: ISerializedLineString): boolean static isClosed(lineString: LineString): boolean readonly _internalType: InternalSymbol } export class MultiLineString { readonly lines: LineString[] constructor(lines: LineString[]) parse( key: any ): Record<number, { type: string coordinates: number[][][] }> toJSON(): { type: string coordinates: number[][][] } static validate(multiLineString: ISerializedMultiLineString): boolean readonly _internalType: InternalSymbol } export class MultiPoint { readonly points: Point[] constructor(points: Point[]) parse( key: any ): Record<number, { type: string coordinates: number[][] }> toJSON(): { type: string coordinates: number[][] } static validate(multiPoint: ISerializedMultiPoint): boolean readonly _internalType: InternalSymbol } export class MultiPolygon { public readonly polygons: Polygon[] public constructor(polygons: Polygon[]) parse( key: any ): Record<number, { type: string coordinates: number[][][][] }> toJSON(): { type: string coordinates: number[][][][] } static validate(multiPolygon: ISerializedMultiPolygon): boolean readonly _internalType: InternalSymbol } export class Polygon { readonly lines: LineString[] constructor(lines: LineString[]) parse( key: any ): Record<number, { type: string coordinates: number[][][] }> toJSON(): { type: string coordinates: number[][][] } static validate(polygon: ISerializedPolygon): boolean static isCloseLineString(lineString: any): boolean readonly _internalType: InternalSymbol } export class RegExp { $regularExpression?: { pattern?: string options?: string } constructor({ regexp, options }: { regexp: string, options: string }) parse(): { $regularExpression: { pattern: string options: string } } readonly _internalType: InternalSymbol } export class ServerDate { readonly offset: number constructor({ offset }?: { offset?: number }) readonly _internalType: InternalSymbol parse(): { $tcb_server_date: { offset: number } } } /** * 数据库模块的通用请求方法 * * @author haroldhu * @internal */ class DBRequest { private readonly config /** * 初始化 * * @internal * @param config */ constructor(config: IInnerCloudBaseConfig) /** * 发送请求 * * @param dbParams - 数据库请求参数 * @param opts - 可选配置项 */ send(api: string, data: any, opts?: ICustomReqOpts): Promise<any> } export class Db { Geo: GeoType command: typeof Command RegExp: (param: { regexp: string, options: string }) => RegExp serverDate: (opt: { offset: number }) => ServerDate startTransaction: () => Promise<Transaction> runTransaction: ( /* eslint-disable-next-line */ callback: (transaction: Transaction) => void | Promise<any>, times?: number ) => Promise<any> config: IInnerCloudBaseConfig static reqClass: DBRequest static dataVersion: string constructor(config?: IInnerCloudBaseConfig) collection(collName: string): CollectionReference createCollection(collName: string): IBaseResult } export class DocumentReference { readonly id: string | number readonly _transactionId: string readonly projection: Object private readonly _apiOptions set(data: Object): Promise<IUpdateResult> update(data: Object): Promise<IUpdateResult> delete(): Promise<IDeleteResult> remove(): Promise<IDeleteResult> get(): Promise<IGetRes> field(projection: Object): DocumentReference } interface IStageItem { stageKey: string stageValue: string } export class Aggregation { _db: Db _request: DBRequest _stages: IStageItem[] _collectionName: string constructor(db?: Db, collectionName?: string) end(): Promise<any> unwrap(): any[] done(): Array<Record<number, any>> _pipe(stage: string, param: any): this addFields(param: any): this bucket(param: any): this bucketAuto(param: any): this count(param: any): this geoNear(param: any): this group(param: any): this limit(param: any): this match(param: any): this project(param: any): this lookup(param: any): this replaceRoot(param: any): this sample(param: any): this skip(param: any): this sort(param: any): this sortByCount(param: any): this unwind(param: any): this } export class Query { protected _transactionId: string get(): Promise<IGetRes> count(): Promise<ICountRes> where(query: object): Query options(apiOptions: QueryOption | UpdateOption): Query orderBy(fieldPath: string, directionStr: OrderByDirection): Query limit(limit: number): Query skip(offset: number): Query update(data: Object): Promise<IUpdateResult> field(projection: any): Query remove(): Promise<IDeleteResult> updateAndReturn(data: Object): Promise<IUpdateAndReturnResult> } export class CollectionReference extends Query { protected _transactionId: string readonly name: string doc(docID: string | number): DocumentReference add(data: IKeyValue): Promise<IAddRes> aggregate(): Aggregation options(apiOptions: QueryOption | UpdateOption): CollectionReference } export interface IReqOpts { timeout: number } export type CenterSphere = [Point, number] | [[number, number], number] export interface IAddRes extends IBaseResult { ids?: string[] // 批量插入返回 id?: string inserted?: number ok?: number } export interface IGetRes extends IBaseResult { data: any[] total: number limit: number offset: number } export interface BaseOption { timeout?: number raw?: boolean } export interface QueryOption extends BaseOption { limit?: number offset?: number projection?: Object order?: Array<Record<string, any>> } export interface UpdateOption extends BaseOption { multiple?: boolean } export enum QUERY_COMMANDS_LITERAL { EQ = 'eq', NEQ = 'neq', GT = 'gt', GTE = 'gte', LT = 'lt', LTE = 'lte', IN = 'in', NIN = 'nin', ALL = 'all', ELEM_MATCH = 'elemMatch', EXISTS = 'exists', SIZE = 'size', MOD = 'mod', GEO_NEAR = 'geoNear', GEO_WITHIN = 'geoWithin', GEO_INTERSECTS = 'geoIntersects' } export enum LOGIC_COMMANDS_LITERAL { AND = 'and', OR = 'or', NOT = 'not', NOR = 'nor' } export class LogicCommand { fieldName: string | InternalSymbol operator: LOGIC_COMMANDS_LITERAL | string operands: any[] _internalType: InternalSymbol constructor( operator: LOGIC_COMMANDS_LITERAL | string, operands: any, fieldName?: string | InternalSymbol ) _setFieldName(fieldName: string): LogicCommand and(...__expressions__: LogicCommand[]): LogicCommand or(...__expressions__: LogicCommand[]): LogicCommand } export class QueryCommand extends LogicCommand { operator: QUERY_COMMANDS_LITERAL constructor( operator: QUERY_COMMANDS_LITERAL, operands: any, fieldName?: string | InternalSymbol ) toJSON(): | { ['$ne']: any } | { [x: string]: any $ne?: undefined } _setFieldName(fieldName: string): QueryCommand eq(val: any): LogicCommand neq(val: any): LogicCommand gt(val: any): LogicCommand gte(val: any): LogicCommand lt(val: any): LogicCommand lte(val: any): LogicCommand in(list: any[]): LogicCommand nin(list: any[]): LogicCommand geoNear(val: IGeoNearOptions): LogicCommand geoWithin(val: IGeoWithinOptions): LogicCommand geoIntersects(val: IGeoIntersectsOptions): LogicCommand } export enum UPDATE_COMMANDS_LITERAL { SET = 'set', REMOVE = 'remove', INC = 'inc', MUL = 'mul', PUSH = 'push', PULL = 'pull', PULL_ALL = 'pullAll', POP = 'pop', SHIFT = 'shift', UNSHIFT = 'unshift', ADD_TO_SET = 'addToSet', BIT = 'bit', RENAME = 'rename', MAX = 'max', MIN = 'min' } export class UpdateCommand { fieldName: string | InternalSymbol operator: UPDATE_COMMANDS_LITERAL operands: any _internalType: InternalSymbol constructor( operator: UPDATE_COMMANDS_LITERAL, operands?: any, fieldName?: string | InternalSymbol ) _setFieldName(fieldName: string): UpdateCommand } export interface IGeoNearOptions { geometry: Point maxDistance?: number minDistance?: number } export interface IGeoWithinOptions { geometry?: Polygon | MultiPolygon centerSphere?: CenterSphere } export interface IGeoIntersectsOptions { geometry: Point | LineString | Polygon | MultiPoint | MultiLineString | MultiPolygon } interface TransactionAPI { send(interfaceName: string, param?: any): any } export class Transaction { private readonly _id: string private readonly _db: Db private readonly _request aborted: boolean abortReason: any commited: boolean inited: boolean constructor(db: Db) init(): Promise<void> collection(collName: string): CollectionReference getTransactionId(): string getRequestMethod(): TransactionAPI commit(): Promise<CommitResult> rollback(customRollbackRes: any): Promise<RollbackResult> } export interface CommitResult { requestId: string } export interface RollbackResult { requestId: string } export interface IUpdateResult extends IBaseResult { updated?: number upserted?: JsonString } export interface IUpdateAndReturnResult extends IBaseResult { updated?: number doc?: any } export interface ISetResult extends IUpdateResult { upserted: JsonString } export interface IDeleteResult extends IBaseResult { deleted: number | string } type JsonString = string export type IQueryCondition = Record<string, any> | LogicCommand export const Command: { eq(val: any): QueryCommand neq(val: any): QueryCommand lt(val: any): QueryCommand lte(val: any): QueryCommand gt(val: any): QueryCommand gte(val: any): QueryCommand in(val: any): QueryCommand nin(val: any): QueryCommand all(val: any): QueryCommand elemMatch(val: any): QueryCommand exists(val: boolean): QueryCommand size(val: number): QueryCommand mod(val: number[]): QueryCommand geoNear(val: any): QueryCommand geoWithin(val: any): QueryCommand geoIntersects(val: any): QueryCommand and(...__expressions__: IQueryCondition[]): LogicCommand nor(...__expressions__: IQueryCondition[]): LogicCommand or(...__expressions__: IQueryCondition[]): LogicCommand not(...__expressions__: IQueryCondition[]): LogicCommand set(val: any): UpdateCommand remove(): UpdateCommand inc(val: number): UpdateCommand mul(val: number): UpdateCommand push(...args: any[]): UpdateCommand pull(values: any): UpdateCommand pullAll(values: any): UpdateCommand pop(): UpdateCommand shift(): UpdateCommand unshift(...__values__: any[]): UpdateCommand addToSet(values: any): UpdateCommand rename(values: any): UpdateCommand bit(values: any): UpdateCommand max(values: any): UpdateCommand min(values: any): UpdateCommand expr( values: AggregationOperator ): { $expr: AggregationOperator } jsonSchema( schema: any ): { $jsonSchema: any } text( values: | string | { search: string language?: string caseSensitive?: boolean diacriticSensitive: boolean } ): | { $search: { (regexp: string | RegExp): number (searcher: { [Symbol.search](string: string): number }): number } $language?: undefined $caseSensitive?: undefined $diacriticSensitive?: undefined } | { $search: string $language: string $caseSensitive: boolean $diacriticSensitive: boolean } aggregate: { pipeline(): Aggregation abs: (param: any) => AggregationOperator add: (param: any) => AggregationOperator ceil: (param: any) => AggregationOperator divide: (param: any) => AggregationOperator exp: (param: any) => AggregationOperator floor: (param: any) => AggregationOperator ln: (param: any) => AggregationOperator log: (param: any) => AggregationOperator log10: (param: any) => AggregationOperator mod: (param: any) => AggregationOperator multiply: (param: any) => AggregationOperator pow: (param: any) => AggregationOperator sqrt: (param: any) => AggregationOperator subtract: (param: any) => AggregationOperator trunc: (param: any) => AggregationOperator arrayElemAt: (param: any) => AggregationOperator arrayToObject: (param: any) => AggregationOperator concatArrays: (param: any) => AggregationOperator filter: (param: any) => AggregationOperator in: (param: any) => AggregationOperator indexOfArray: (param: any) => AggregationOperator isArray: (param: any) => AggregationOperator map: (param: any) => AggregationOperator range: (param: any) => AggregationOperator reduce: (param: any) => AggregationOperator reverseArray: (param: any) => AggregationOperator size: (param: any) => AggregationOperator slice: (param: any) => AggregationOperator zip: (param: any) => AggregationOperator and: (param: any) => AggregationOperator not: (param: any) => AggregationOperator or: (param: any) => AggregationOperator cmp: (param: any) => AggregationOperator eq: (param: any) => AggregationOperator gt: (param: any) => AggregationOperator gte: (param: any) => AggregationOperator lt: (param: any) => AggregationOperator lte: (param: any) => AggregationOperator neq: (param: any) => AggregationOperator cond: (param: any) => AggregationOperator ifNull: (param: any) => AggregationOperator switch: (param: any) => AggregationOperator dateFromParts: (param: any) => AggregationOperator dateFromString: (param: any) => AggregationOperator dayOfMonth: (param: any) => AggregationOperator dayOfWeek: (param: any) => AggregationOperator dayOfYear: (param: any) => AggregationOperator isoDayOfWeek: (param: any) => AggregationOperator isoWeek: (param: any) => AggregationOperator isoWeekYear: (param: any) => AggregationOperator millisecond: (param: any) => AggregationOperator minute: (param: any) => AggregationOperator month: (param: any) => AggregationOperator second: (param: any) => AggregationOperator hour: (param: any) => AggregationOperator week: (param: any) => AggregationOperator year: (param: any) => AggregationOperator literal: (param: any) => AggregationOperator mergeObjects: (param: any) => AggregationOperator objectToArray: (param: any) => AggregationOperator allElementsTrue: (param: any) => AggregationOperator anyElementTrue: (param: any) => AggregationOperator setDifference: (param: any) => AggregationOperator setEquals: (param: any) => AggregationOperator setIntersection: (param: any) => AggregationOperator setIsSubset: (param: any) => AggregationOperator setUnion: (param: any) => AggregationOperator concat: (param: any) => AggregationOperator dateToString: (param: any) => AggregationOperator indexOfBytes: (param: any) => AggregationOperator indexOfCP: (param: any) => AggregationOperator split: (param: any) => AggregationOperator strLenBytes: (param: any) => AggregationOperator strLenCP: (param: any) => AggregationOperator strcasecmp: (param: any) => AggregationOperator substr: (param: any) => AggregationOperator substrBytes: (param: any) => AggregationOperator substrCP: (param: any) => AggregationOperator toLower: (param: any) => AggregationOperator toUpper: (param: any) => AggregationOperator meta: (param: any) => AggregationOperator addToSet: (param: any) => AggregationOperator avg: (param: any) => AggregationOperator first: (param: any) => AggregationOperator last: (param: any) => AggregationOperator max: (param: any) => AggregationOperator min: (param: any) => AggregationOperator push: (param: any) => AggregationOperator stdDevPop: (param: any) => AggregationOperator stdDevSamp: (param: any) => AggregationOperator sum: (param: any) => AggregationOperator let: (param: any) => AggregationOperator } project: { slice: (param: any) => ProjectionOperator elemMatch: (param: any) => ProjectionOperator } } export class AggregationOperator { constructor(name: string, param: any) } export class ProjectionOperator { constructor(name: string, param: any) } }