UNPKG

ddb-table

Version:

Strongly typed library for querying and modeling DynamoDB documents.

139 lines (138 loc) 25.9 kB
/// <reference types="node" /> import ExpressionAttributeNames from './ExpressionAttributeNames'; import ExpressionAttributeValues from './ExpressionAttributeValues'; export type ConditionGenerator<T> = (condition: ConditionExpression<T>) => ConditionExpression<T> | string; export type ValueFn<T, V> = V | ((path: string, condition: ConditionExpression<T>) => ConditionExpression<T> | string); export type Comparator = '=' | '<>' | '<' | '<=' | '>' | '>='; export type FunctionName = 'attribute_exists' | 'attribute_not_exists' | 'attribute_type' | 'begins_with' | 'contains' | 'size'; export type AttributeTypeString = 'S' | 'SS' | 'N' | 'NS' | 'B' | 'BS' | 'BOOL' | 'NULL' | 'L' | 'M'; export type AttributeType = AttributeTypeString | StringConstructor | [StringConstructor] | NumberConstructor | [NumberConstructor] | ArrayBufferConstructor | typeof Buffer | [ArrayBufferConstructor | typeof Buffer] | BooleanConstructor | null | ArrayConstructor | ObjectConstructor; export type ContainsOperand<T, V> = ([NonNullable<V>] extends [string] ? NonNullable<V> : [NonNullable<V>] extends [Set<infer SV>] ? SV : never) | ((exp: ConditionExpression<T>) => string); export default class ConditionExpression<T> { private names; private values; private expression; static getAttributeTypeString(type: AttributeType): AttributeTypeString; constructor(names: ExpressionAttributeNames<T>, values: ExpressionAttributeValues, init?: string | ConditionExpression<T>); serialize(): string | undefined; name<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(...path: [K1, K2?, K3?, K4?, K5?, K6?, K7?, K8?, ...(string | number)[]]): string; value(key: string, value: unknown): string; eq<K1 extends keyof T>(path: K1 | [K1], value: ValueFn<T, T[K1]>): this; eq<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], value: ValueFn<T, T[K1][K2]>): this; eq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], value: ValueFn<T, T[K1][K2][K3]>): this; eq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], value: ValueFn<T, T[K1][K2][K3][K4]>): this; eq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], value: ValueFn<T, T[K1][K2][K3][K4][K5]>): this; eq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>): this; eq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; eq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; nq<K1 extends keyof T>(path: K1 | [K1], value: ValueFn<T, T[K1]>): this; nq<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], value: ValueFn<T, T[K1][K2]>): this; nq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], value: ValueFn<T, T[K1][K2][K3]>): this; nq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], value: ValueFn<T, T[K1][K2][K3][K4]>): this; nq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], value: ValueFn<T, T[K1][K2][K3][K4][K5]>): this; nq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>): this; nq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; nq<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; lt<K1 extends keyof T>(path: K1 | [K1], value: ValueFn<T, T[K1]>): this; lt<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], value: ValueFn<T, T[K1][K2]>): this; lt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], value: ValueFn<T, T[K1][K2][K3]>): this; lt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], value: ValueFn<T, T[K1][K2][K3][K4]>): this; lt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], value: ValueFn<T, T[K1][K2][K3][K4][K5]>): this; lt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>): this; lt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; lt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; lte<K1 extends keyof T>(path: K1 | [K1], value: ValueFn<T, T[K1]>): this; lte<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], value: ValueFn<T, T[K1][K2]>): this; lte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], value: ValueFn<T, T[K1][K2][K3]>): this; lte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], value: ValueFn<T, T[K1][K2][K3][K4]>): this; lte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], value: ValueFn<T, T[K1][K2][K3][K4][K5]>): this; lte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>): this; lte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; lte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; gt<K1 extends keyof T>(path: K1 | [K1], value: ValueFn<T, T[K1]>): this; gt<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], value: ValueFn<T, T[K1][K2]>): this; gt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], value: ValueFn<T, T[K1][K2][K3]>): this; gt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], value: ValueFn<T, T[K1][K2][K3][K4]>): this; gt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], value: ValueFn<T, T[K1][K2][K3][K4][K5]>): this; gt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>): this; gt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; gt<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; gte<K1 extends keyof T>(path: K1 | [K1], value: ValueFn<T, T[K1]>): this; gte<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], value: ValueFn<T, T[K1][K2]>): this; gte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], value: ValueFn<T, T[K1][K2][K3]>): this; gte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], value: ValueFn<T, T[K1][K2][K3][K4]>): this; gte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], value: ValueFn<T, T[K1][K2][K3][K4][K5]>): this; gte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>): this; gte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; gte<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; comparator<K1 extends keyof T>(comparator: Comparator, path: K1 | [K1], value: ValueFn<T, T[K1]>): this; comparator<K1 extends keyof T, K2 extends keyof T[K1]>(comparator: Comparator, path: [K1, K2], value: ValueFn<T, T[K1][K2]>): this; comparator<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(comparator: Comparator, path: [K1, K2, K3], value: ValueFn<T, T[K1][K2][K3]>): this; comparator<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(comparator: Comparator, path: [K1, K2, K3, K4], value: ValueFn<T, T[K1][K2][K3][K4]>): this; comparator<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(comparator: Comparator, path: [K1, K2, K3, K4, K5], value: ValueFn<T, T[K1][K2][K3][K4][K5]>): this; comparator<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(comparator: Comparator, path: [K1, K2, K3, K4, K5, K6], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>): this; comparator<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(comparator: Comparator, path: [K1, K2, K3, K4, K5, K6, K7], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; comparator<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(comparator: Comparator, path: [K1, K2, K3, K4, K5, K6, K7, K8], value: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; between<K1 extends keyof T>(path: K1 | [K1], from: ValueFn<T, T[K1]>, to: ValueFn<T, T[K1]>): this; between<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], from: ValueFn<T, T[K1][K2]>, to: ValueFn<T, T[K1][K2]>): this; between<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], from: ValueFn<T, T[K1][K2][K3]>, to: ValueFn<T, T[K1][K2][K3]>): this; between<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], from: ValueFn<T, T[K1][K2][K3][K4]>, to: ValueFn<T, T[K1][K2][K3][K4]>): this; between<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], from: ValueFn<T, T[K1][K2][K3][K4][K5]>, to: ValueFn<T, T[K1][K2][K3][K4][K5]>): this; between<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], from: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>, to: ValueFn<T, T[K1][K2][K3][K4][K5][K6]>): this; between<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], from: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>, to: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; between<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], from: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>, to: ValueFn<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; attributeExists<K1 extends keyof T>(path: K1 | [K1]): this; attributeExists<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2]): this; attributeExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3]): this; attributeExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4]): this; attributeExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5]): this; attributeExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6]): this; attributeExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7]): this; attributeExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8]): this; attributeNotExists<K1 extends keyof T>(path: K1 | [K1]): this; attributeNotExists<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2]): this; attributeNotExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3]): this; attributeNotExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4]): this; attributeNotExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5]): this; attributeNotExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6]): this; attributeNotExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7]): this; attributeNotExists<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8]): this; attributeType<K1 extends keyof T>(path: K1 | [K1], type: AttributeType): this; attributeType<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], type: AttributeType): this; attributeType<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], type: AttributeType): this; attributeType<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], type: AttributeType): this; attributeType<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], type: AttributeType): this; attributeType<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], type: AttributeType): this; attributeType<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], type: AttributeType): this; attributeType<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], type: AttributeType): this; beginsWith<K1 extends keyof T>(path: K1 | [K1], substr: string): this; beginsWith<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], substr: string): this; beginsWith<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], substr: string): this; beginsWith<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], substr: string): this; beginsWith<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], substr: string): this; beginsWith<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], substr: string): this; beginsWith<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], substr: string): this; beginsWith<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], substr: string): this; contains<K1 extends keyof T>(path: K1 | [K1], operand: ContainsOperand<T, T[K1]>): this; contains<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2], operand: ContainsOperand<T, T[K1][K2]>): this; contains<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3], operand: ContainsOperand<T, T[K1][K2][K3]>): this; contains<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4], operand: ContainsOperand<T, T[K1][K2][K3][K4]>): this; contains<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5], operand: ContainsOperand<T, T[K1][K2][K3][K4][K5]>): this; contains<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6], operand: ContainsOperand<T, T[K1][K2][K3][K4][K5][K6]>): this; contains<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7], operand: ContainsOperand<T, T[K1][K2][K3][K4][K5][K6][K7]>): this; contains<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8], operand: ContainsOperand<T, T[K1][K2][K3][K4][K5][K6][K7][K8]>): this; size<K1 extends keyof T>(path: K1 | [K1]): this; size<K1 extends keyof T, K2 extends keyof T[K1]>(path: [K1, K2]): this; size<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(path: [K1, K2, K3]): this; size<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3]>(path: [K1, K2, K3, K4]): this; size<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4]>(path: [K1, K2, K3, K4, K5]): this; size<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5]>(path: [K1, K2, K3, K4, K5, K6]): this; size<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6]>(path: [K1, K2, K3, K4, K5, K6, K7]): this; size<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], K4 extends keyof T[K1][K2][K3], K5 extends keyof T[K1][K2][K3][K4], K6 extends keyof T[K1][K2][K3][K4][K5], K7 extends keyof T[K1][K2][K3][K4][K5][K6], K8 extends keyof T[K1][K2][K3][K4][K5][K6][K7]>(path: [K1, K2, K3, K4, K5, K6, K7, K8]): this; fn(fnName: FunctionName, ...args: string[]): this; and(fn: ConditionGenerator<T>): this; or(fn: ConditionGenerator<T>): this; not(fn: ConditionGenerator<T>): this; private append; protected calcValueStr(path: unknown[], pathName: string, value: ValueFn<T, unknown>): string; }