/* * Copyright DataStax, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { types } from '../types'; import { Client } from '../../'; import Long = types.Long; type UpperCaseLetters = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"; type lowerCaseLetters = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"; type snakeCaseConditions< P extends string, S1 extends string, S2 extends string, > = S1 extends UpperCaseLetters ? P extends "" ? false : P extends lowerCaseLetters ? true : S2 extends lowerCaseLetters ? true : false : false; type snakeCase< S extends string, P extends string = ""> = S extends `${infer S1}${infer S2}${infer S3}` ? snakeCaseConditions extends true ? `_${Lowercase}${snakeCase<`${S2}${S3}`, S1>}` : `${Lowercase}${snakeCase<`${S2}${S3}`, S1>}` : Lowercase; type getKeys = (keyof T)[]; export namespace mapping { interface TableMappings { getColumnName(propName: string): string; getPropertyName(columnName: string): string; objectToArray(obj: any): any[]; objectToFixedCasing(obj: any): any; objectToTableCasing(obj: any): any; newObjectInstance(): any; } class DefaultTableMappings implements TableMappings { getColumnName(propName: string): string; getPropertyName(columnName: string): string; objectToArray(obj: any): any[]; objectToFixedCasing(obj: any): any; objectToTableCasing(obj: any): any; newObjectInstance(): any; } class UnderscoreCqlToCamelCaseMappings implements TableMappings { private convertLongsToStrings: boolean; constructor(convertLongsToStrings?: boolean); getColumnName(propName: string): string; getPropertyName(columnName: string): string; objectToArray(obj: any): any[]; objectToFixedCasing(obj: any): any; objectToTableCasing(obj: any): any; newObjectInstance(): any; } class UnderscoreCqlToPascalCaseMappings implements TableMappings { private convertLongsToStrings: boolean; constructor(convertLongsToStrings?: boolean); getColumnName(propName: string): string; getPropertyName(columnName: string): string; objectToArray(obj: any): any[]; objectToFixedCasing(obj: any): any; objectToTableCasing(obj: any): any; newObjectInstance(): any; } interface Result extends Iterator { wasApplied(): boolean; first(): T | null; forEach(callback: (currentValue: T, index: number) => void, thisArg?: any): void; toArray(): T[]; } type MappingExecutionOptions = { executionProfile?: string; isIdempotent?: boolean; logged?: boolean; timestamp?: number | Long; fetchSize?: number; pageState?: number; }; interface ModelTables { name: string; isView: boolean; } class Mapper { constructor(client: Client, options?: MappingOptions); batch(items: ModelBatchItem[], executionOptions?: string | MappingExecutionOptions): Promise; forModel(name: string): ModelMapper; } type MappingOptions = { models: { [key: string]: ModelOptions; }; }; type FindDocInfo = { fields?: getKeys; orderBy?: { [key: string]: string; }; limit?: number; allowFiltering?: boolean; }; type InsertDocInfo = { fields?: getKeys; ttl?: number; ifNotExists?: boolean; }; type UpdateDocInfo = { fields?: getKeys; ttl?: number; ifExists?: boolean; when?: { [key: string]: any; }; orderBy?: { [key: string]: string; }; limit?: number; deleteOnlyColumns?: boolean; }; type RemoveDocInfo = { fields?: getKeys; ttl?: number; ifExists?: boolean; when?: { [key: string]: any; }; deleteOnlyColumns?: boolean; }; type ModelOptions = { tables?: string[] | ModelTables[]; mappings?: TableMappings; columns?: { [key: string]: string | ModelColumnOptions; }; keyspace?: string; }; type ModelColumnOptions = { name: string; toModel?: (columnValue: any) => any; fromModel?: (modelValue: any) => any; }; interface ModelBatchItem { } interface ModelBatchMapper { insert(doc: any, docInfo?: InsertDocInfo): ModelBatchItem; remove(doc: any, docInfo?: RemoveDocInfo): ModelBatchItem; update(doc: any, docInfo?: UpdateDocInfo): ModelBatchItem; } interface ModelMapper { name: string; batching: ModelBatchMapper; get(doc: Partial, docInfo?: { fields?: getKeys, allowFiltering?: boolean; }, executionOptions?: string | MappingExecutionOptions): Promise; find(doc: Partial, docInfo?: FindDocInfo, executionOptions?: string | MappingExecutionOptions): Promise>; findAll(docInfo?: FindDocInfo, executionOptions?: string | MappingExecutionOptions): Promise>; insert(doc: T, docInfo?: InsertDocInfo, executionOptions?: string | MappingExecutionOptions): Promise>; update(doc: Partial, docInfo?: UpdateDocInfo, executionOptions?: string | MappingExecutionOptions): Promise>; remove(doc: Partial, docInfo?: RemoveDocInfo, executionOptions?: string | MappingExecutionOptions): Promise>; mapWithQuery( query: string, paramsHandler: (doc: any) => any[], executionOptions?: string | MappingExecutionOptions ): (doc: any, executionOptions?: string | MappingExecutionOptions) => Promise>; } namespace q { interface QueryOperator { } function in_(arr: any): QueryOperator; function gt(value: any): QueryOperator; function gte(value: any): QueryOperator; function lt(value: any): QueryOperator; function lte(value: any): QueryOperator; function notEq(value: any): QueryOperator; function and(condition1: any, condition2: any): QueryOperator; function incr(value: any): QueryOperator; function decr(value: any): QueryOperator; function append(value: any): QueryOperator; function prepend(value: any): QueryOperator; function remove(value: any): QueryOperator; } }