// // 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' /** * @public */ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions export type QuerySelector = { $in?: T[] $like?: string } /** * @public */ export type ObjQueryType = T | QuerySelector /** * @public */ export type DocumentQuery = { [P in keyof T]?: ObjQueryType } /** * @public */ export type Refs = Partial>>> /** * @public */ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions export type FindOptions = { limit?: number sort?: SortingQuery lookup?: Refs } /** * @public */ export type SortingQuery = { [P in keyof T]?: T[P] extends object ? never : SortingOrder } /** * @public */ export enum SortingOrder { Ascending = 1, Descending = -1 } /** * @public */ export type RefsAsDocs = { [P in keyof T]: T[P] extends Ref ? X : never } /** * @public */ export type RemoveNever = Omit> /** * @public */ export type LookupData = Partial>> /** * @public */ export type WithLookup = T & { $lookup?: LookupData } /** * @public */ export type FindResult = WithLookup[] /** * @public */ export interface Storage { findAll: ( _class: Ref>, query: DocumentQuery, options?: FindOptions ) => Promise> tx: (tx: Tx) => Promise }