// // Copyright © 2021 Anticrm Platform Contributors. // // Licensed under the Eclipse Public 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 https://www.eclipse.org/legal/epl-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 type { KeysByType } from 'simplytyped' import type { Class, Doc, Ref, Tx } from './classes' // eslint-disable-next-line @typescript-eslint/consistent-type-definitions export type QuerySelector = { $in?: T[] $like?: string } export type ObjQueryType = T | QuerySelector export type DocumentQuery = { [P in keyof T]?: ObjQueryType } export type Refs = Partial>>> // eslint-disable-next-line @typescript-eslint/consistent-type-definitions export type FindOptions = { limit?: number sort?: SortingQuery lookup?: Refs } export type SortingQuery = { [P in keyof T]?: T[P] extends object ? never : SortingOrder } export enum SortingOrder { Ascending = 1, Descending = -1 } type RefsAsDocs = { [P in keyof T]: T[P] extends Ref ? X : never } type RemoveNever = Omit> export type LookupData = Partial>> export type WithLookup = T & { $lookup?: LookupData } export type FindResult = WithLookup[] export interface Storage { findAll: ( _class: Ref>, query: DocumentQuery, options?: FindOptions ) => Promise> tx: (tx: Tx) => Promise }