ddb-table
Version:
Strongly typed library for querying and modeling DynamoDB documents.
139 lines (138 loc) • 25.9 kB
TypeScript
/// <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;
}