You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					116 lines
				
				4.9 KiB
			
		
		
			
		
	
	
					116 lines
				
				4.9 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import { Key, Comparator } from "./utils";
							 | 
						||
| 
								 | 
							
								export interface Operation<TItem> {
							 | 
						||
| 
								 | 
							
								    readonly keep: boolean;
							 | 
						||
| 
								 | 
							
								    readonly done: boolean;
							 | 
						||
| 
								 | 
							
								    reset(): any;
							 | 
						||
| 
								 | 
							
								    next(item: TItem, key?: Key, owner?: any): any;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare type Tester = (item: any, key?: Key, owner?: any) => boolean;
							 | 
						||
| 
								 | 
							
								export interface NamedOperation {
							 | 
						||
| 
								 | 
							
								    name: string;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare type OperationCreator<TItem> = (params: any, parentQuery: any, options: Options, name: string) => Operation<TItem>;
							 | 
						||
| 
								 | 
							
								declare type BasicValueQuery<TValue> = {
							 | 
						||
| 
								 | 
							
								    $eq?: TValue;
							 | 
						||
| 
								 | 
							
								    $ne?: TValue;
							 | 
						||
| 
								 | 
							
								    $lt?: TValue;
							 | 
						||
| 
								 | 
							
								    $gt?: TValue;
							 | 
						||
| 
								 | 
							
								    $lte?: TValue;
							 | 
						||
| 
								 | 
							
								    $gte?: TValue;
							 | 
						||
| 
								 | 
							
								    $in?: TValue[];
							 | 
						||
| 
								 | 
							
								    $nin?: TValue[];
							 | 
						||
| 
								 | 
							
								    $all?: TValue[];
							 | 
						||
| 
								 | 
							
								    $mod?: [number, number];
							 | 
						||
| 
								 | 
							
								    $exists?: boolean;
							 | 
						||
| 
								 | 
							
								    $regex?: string | RegExp;
							 | 
						||
| 
								 | 
							
								    $size?: number;
							 | 
						||
| 
								 | 
							
								    $where?: ((this: TValue) => boolean) | string;
							 | 
						||
| 
								 | 
							
								    $options?: "i" | "g" | "m" | "u";
							 | 
						||
| 
								 | 
							
								    $type?: Function;
							 | 
						||
| 
								 | 
							
								    $not?: NestedQuery<TValue>;
							 | 
						||
| 
								 | 
							
								    $or?: NestedQuery<TValue>[];
							 | 
						||
| 
								 | 
							
								    $nor?: NestedQuery<TValue>[];
							 | 
						||
| 
								 | 
							
								    $and?: NestedQuery<TValue>[];
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								declare type ArrayValueQuery<TValue> = {
							 | 
						||
| 
								 | 
							
								    $elemMatch?: Query<TValue>;
							 | 
						||
| 
								 | 
							
								} & BasicValueQuery<TValue>;
							 | 
						||
| 
								 | 
							
								declare type Unpacked<T> = T extends (infer U)[] ? U : T;
							 | 
						||
| 
								 | 
							
								declare type ValueQuery<TValue> = TValue extends Array<any> ? ArrayValueQuery<Unpacked<TValue>> : BasicValueQuery<TValue>;
							 | 
						||
| 
								 | 
							
								declare type NotObject = string | number | Date | boolean | Array<any>;
							 | 
						||
| 
								 | 
							
								declare type ShapeQuery<TItemSchema> = TItemSchema extends NotObject ? {} : {
							 | 
						||
| 
								 | 
							
								    [k in keyof TItemSchema]?: TItemSchema[k] | ValueQuery<TItemSchema[k]>;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								declare type NestedQuery<TItemSchema> = ValueQuery<TItemSchema> & ShapeQuery<TItemSchema>;
							 | 
						||
| 
								 | 
							
								export declare type Query<TItemSchema> = TItemSchema | RegExp | NestedQuery<TItemSchema>;
							 | 
						||
| 
								 | 
							
								declare abstract class BaseOperation<TParams, TItem = any> implements Operation<TItem> {
							 | 
						||
| 
								 | 
							
								    readonly params: TParams;
							 | 
						||
| 
								 | 
							
								    readonly owneryQuery: any;
							 | 
						||
| 
								 | 
							
								    readonly options: Options;
							 | 
						||
| 
								 | 
							
								    keep: boolean;
							 | 
						||
| 
								 | 
							
								    done: boolean;
							 | 
						||
| 
								 | 
							
								    constructor(params: TParams, owneryQuery: any, options: Options);
							 | 
						||
| 
								 | 
							
								    protected init(): void;
							 | 
						||
| 
								 | 
							
								    reset(): void;
							 | 
						||
| 
								 | 
							
								    abstract next(item: any, key: Key, parent: any): any;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare abstract class NamedBaseOperation<TParams, TItem = any> extends BaseOperation<TParams, TItem> implements NamedOperation {
							 | 
						||
| 
								 | 
							
								    readonly name: string;
							 | 
						||
| 
								 | 
							
								    constructor(params: TParams, owneryQuery: any, options: Options, name: string);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								declare abstract class GroupOperation extends BaseOperation<any> {
							 | 
						||
| 
								 | 
							
								    readonly children: Operation<any>[];
							 | 
						||
| 
								 | 
							
								    keep: boolean;
							 | 
						||
| 
								 | 
							
								    done: boolean;
							 | 
						||
| 
								 | 
							
								    constructor(params: any, owneryQuery: any, options: Options, children: Operation<any>[]);
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    reset(): void;
							 | 
						||
| 
								 | 
							
								    abstract next(item: any, key: Key, owner: any): any;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    protected childrenNext(item: any, key: Key, owner: any): void;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare abstract class NamedGroupOperation extends GroupOperation implements NamedOperation {
							 | 
						||
| 
								 | 
							
								    readonly name: string;
							 | 
						||
| 
								 | 
							
								    constructor(params: any, owneryQuery: any, options: Options, children: Operation<any>[], name: string);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare class QueryOperation<TItem> extends GroupOperation {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    next(item: TItem, key: Key, parent: any): void;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare class NestedOperation extends GroupOperation {
							 | 
						||
| 
								 | 
							
								    readonly keyPath: Key[];
							 | 
						||
| 
								 | 
							
								    constructor(keyPath: Key[], params: any, owneryQuery: any, options: Options, children: Operation<any>[]);
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    next(item: any, key: Key, parent: any): void;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private _nextNestedValue;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare const createTester: (a: any, compare: Comparator) => any;
							 | 
						||
| 
								 | 
							
								export declare class EqualsOperation<TParam> extends BaseOperation<TParam> {
							 | 
						||
| 
								 | 
							
								    private _test;
							 | 
						||
| 
								 | 
							
								    init(): void;
							 | 
						||
| 
								 | 
							
								    next(item: any, key: Key, parent: any): void;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare const createEqualsOperation: (params: any, owneryQuery: any, options: Options) => EqualsOperation<any>;
							 | 
						||
| 
								 | 
							
								export declare class NopeOperation<TParam> extends BaseOperation<TParam> {
							 | 
						||
| 
								 | 
							
								    next(): void;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare const numericalOperationCreator: (createNumericalOperation: OperationCreator<any>) => (params: any, owneryQuery: any, options: Options, name: string) => Operation<any> | NopeOperation<any>;
							 | 
						||
| 
								 | 
							
								export declare const numericalOperation: (createTester: (any: any) => Tester) => (params: any, owneryQuery: any, options: Options, name: string) => Operation<any> | NopeOperation<any>;
							 | 
						||
| 
								 | 
							
								export declare type Options = {
							 | 
						||
| 
								 | 
							
								    operations: {
							 | 
						||
| 
								 | 
							
								        [identifier: string]: OperationCreator<any>;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    compare: (a: any, b: any) => boolean;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								export declare const containsOperation: (query: any) => boolean;
							 | 
						||
| 
								 | 
							
								export declare const createQueryOperation: <TItem, TSchema = TItem>(query: Query<TSchema>, owneryQuery?: any, { compare, operations }?: Partial<Options>) => QueryOperation<TItem>;
							 | 
						||
| 
								 | 
							
								export declare const createOperationTester: <TItem>(operation: Operation<TItem>) => (item: TItem, key?: string | number, owner?: any) => boolean;
							 | 
						||
| 
								 | 
							
								export declare const createQueryTester: <TItem, TSchema = TItem>(query: Query<TSchema>, options?: Partial<Options>) => (item: TItem, key?: string | number, owner?: any) => boolean;
							 | 
						||
| 
								 | 
							
								export {};
							 |