@livequery/types
Advanced tools
| import { LivequeryBaseEntity } from "./LivequeryBaseEntity.js"; | ||
| export type FlatObjectKeys<T, MatchType, K extends keyof T = keyof T> = (K extends string ? (T[K] extends MatchType ? K : (T[K] extends { | ||
| [key: string]: any; | ||
| } ? (`${K}.${FlatObjectKeys<T[K], MatchType>}`) : never)) : never); | ||
| export type ChainObjectKeys<T, MatchType, Delimiter extends string = ','> = (T extends { | ||
| [key: string]: any; | ||
| } ? (FlatObjectKeys<T, MatchType> | `${FlatObjectKeys<T, MatchType>}${Delimiter}${FlatObjectKeys<T, MatchType>}` | `${FlatObjectKeys<T, MatchType>}${Delimiter}${FlatObjectKeys<T, MatchType>}${Delimiter}${FlatObjectKeys<T, MatchType>}`) : never); | ||
| export type RequestMethod = 'put' | 'patch' | 'delete' | 'post'; | ||
| type ConditionTypeBuilder<T, FieldType, MapWith extends string, ResultType = any> = { | ||
| [Key in keyof T as (T[Key] extends FieldType ? `${string & Key}:${MapWith}` : '')]: ResultType; | ||
| export type ConditionTypeBuilder<T, FieldType, MapWith extends string, ResultType = any> = { | ||
| [K in keyof T as `${FlatObjectKeys<T, FieldType>}:${MapWith}`]: ResultType; | ||
| }; | ||
| export type Eq<T> = { | ||
| [key in keyof T]?: T[key]; | ||
| export type Eq<T> = ConditionTypeBuilder<T, string | number | boolean, 'eq'> & { | ||
| [Key in keyof T as (T[Key] extends string | number | boolean ? Key : never)]: T[Key]; | ||
| }; | ||
| export type Neq<T> = ConditionTypeBuilder<T, any, 'ne'>; | ||
| export type Neq<T> = ConditionTypeBuilder<T, string | number | boolean, 'ne'>; | ||
| export type NumberNotEqual<T> = ConditionTypeBuilder<T, number, 'nne'>; | ||
| export type Lt<T> = ConditionTypeBuilder<T, number, 'lt', number>; | ||
@@ -14,15 +21,26 @@ export type Lte<T> = ConditionTypeBuilder<T, number, 'lte', number>; | ||
| export type Gte<T> = ConditionTypeBuilder<T, number, 'gte', number>; | ||
| export type Visible<T> = ConditionTypeBuilder<T, any, 'select', 0 | 1>; | ||
| export type InArray<T> = ConditionTypeBuilder<T, number | string, 'in', Array<number | string>>; | ||
| export type NotInArray<T> = ConditionTypeBuilder<T, number | string, 'nin', Array<number | string>>; | ||
| export type Like<T> = ConditionTypeBuilder<T, string, 'like', string>; | ||
| export type Between<T> = ConditionTypeBuilder<T, number, 'between', [number, number]>; | ||
| export type FilterCondition<T> = Partial<Eq<T> & Neq<T> & Lt<T> & Lte<T> & Gt<T> & Gte<T> & InArray<T> & Like<T> & Between<T>>; | ||
| export type BasicQueryOption<T extends LivequeryBaseEntity = LivequeryBaseEntity> = { | ||
| _limit: number; | ||
| _cursor: any; | ||
| _order_by: keyof T; | ||
| _sort: 'asc' | 'desc'; | ||
| _select: Array<keyof T>; | ||
| _search: string; | ||
| export type OrderBy<T> = ConditionTypeBuilder<T, number, 'order', 'asc' | 'desc'>; | ||
| export type FilterConditions<T> = Partial<(Eq<T> & NumberNotEqual<T> & Neq<T> & Lt<T> & Lte<T> & Gt<T> & Gte<T> & Visible<T> & InArray<T> & NotInArray<T> & Like<T> & OrderBy<T> & { | ||
| ':and': FilterConditions<T>; | ||
| ':or': FilterConditions<T>; | ||
| ':not': FilterConditions<T>; | ||
| })>; | ||
| export type SummaryOperator<T> = 'count()' | `${'sum' | 'avg' | 'max' | 'min'}(${string})`; | ||
| export type GroupByOperator<T> = '' | `|${FlatObjectKeys<T, string | number>}`; | ||
| export type SummaryQuery<T> = { | ||
| [key: `::${string}`]: `${SummaryOperator<T>}${GroupByOperator<T>}${GroupByOperator<T>}`; | ||
| }; | ||
| export type QueryOption<T extends LivequeryBaseEntity = LivequeryBaseEntity> = BasicQueryOption<T> & FilterCondition<T>; | ||
| export type BasicOptions = Partial<{ | ||
| ':limit': number; | ||
| ':before': string; | ||
| ':after': string; | ||
| ':search': string; | ||
| ':page': number; | ||
| ':around': string; | ||
| }>; | ||
| export type QueryOption<T extends LivequeryBaseEntity = LivequeryBaseEntity> = (BasicOptions & SummaryQuery<T> & FilterConditions<T>); | ||
| export type LivequeryRequest<T extends LivequeryBaseEntity = LivequeryBaseEntity> = { | ||
@@ -37,7 +55,5 @@ ref: string; | ||
| }; | ||
| filters: Array<[string, string, any]>; | ||
| options: BasicQueryOption<T>; | ||
| options: QueryOption<T>; | ||
| method?: string; | ||
| body?: any; | ||
| }; | ||
| export {}; |
@@ -10,16 +10,28 @@ import { LivequeryBaseEntity } from "./LivequeryBaseEntity.js"; | ||
| }; | ||
| export type ErrorInfo = { | ||
| export type Response<T> = { | ||
| data?: T; | ||
| error?: boolean; | ||
| code?: string; | ||
| message?: string; | ||
| helper_url?: string; | ||
| ms?: number; | ||
| }; | ||
| export type Response<T> = { | ||
| data?: T; | ||
| error?: ErrorInfo; | ||
| }; | ||
| export type Paging = { | ||
| n?: number; | ||
| has_more?: boolean; | ||
| next_cursor?: any; | ||
| has: { | ||
| next: boolean; | ||
| prev: boolean; | ||
| }; | ||
| cursor: { | ||
| last?: string; | ||
| first?: string; | ||
| }; | ||
| page: { | ||
| current: number; | ||
| total: number; | ||
| }; | ||
| count: { | ||
| prev: number; | ||
| next: number; | ||
| current: number; | ||
| total: number; | ||
| }; | ||
| }; | ||
@@ -30,11 +42,13 @@ export declare type QueryStream<T extends LivequeryBaseEntity = LivequeryBaseEntity> = Response<{ | ||
| }>; | ||
| export type CollectionResponse<T> = Response<{ | ||
| export type CollectionResponse<T, R extends {} = {}> = Response<Paging & { | ||
| summary: { | ||
| [key in keyof R]: number; | ||
| }; | ||
| items: T[]; | ||
| paging: Paging; | ||
| realtime_token?: string; | ||
| subscription_token?: string; | ||
| }>; | ||
| export type DocumentResponse<T> = Response<{ | ||
| item: T; | ||
| realtime_token?: string; | ||
| subscription_token?: string; | ||
| }>; | ||
| export declare type QueryData<T extends LivequeryBaseEntity = LivequeryBaseEntity> = CollectionResponse<T> | DocumentResponse<T>; |
| import { LivequeryBaseEntity } from "./LivequeryBaseEntity.js"; | ||
| import { QueryOption } from "./LivequeryRequest.js"; | ||
| import { QueryStream } from "./LivequeryResponse.js"; | ||
| import { DocumentResponse, QueryStream, Response } from "./LivequeryResponse.js"; | ||
| import { Observable } from 'rxjs'; | ||
@@ -9,7 +9,7 @@ export type Transporter = { | ||
| }; | ||
| get: <T>(ref: string, query?: any) => Promise<T>; | ||
| add: <T extends LivequeryBaseEntity, K = void>(ref: string, data: Partial<T>) => Promise<K>; | ||
| update: <T extends LivequeryBaseEntity, K = void>(ref: string, data: Partial<T>) => Promise<K>; | ||
| remove: (ref: string) => Promise<void | void>; | ||
| trigger: <Query, Payload, Response>(ref: string, name: string, query: Query, payload: Payload) => Promise<Response>; | ||
| get: <T extends LivequeryBaseEntity>(ref: string, query?: Partial<QueryOption<T>>) => Promise<T>; | ||
| add: <T extends {}>(ref: string, data: Partial<T>) => Promise<DocumentResponse<T & LivequeryBaseEntity>>; | ||
| update: <T extends {}>(ref: string, data: Partial<T>) => Promise<DocumentResponse<T & LivequeryBaseEntity>>; | ||
| remove: <T extends {}>(ref: string) => Promise<DocumentResponse<T & LivequeryBaseEntity>>; | ||
| trigger: <T extends {}>(ref: string, name: string, payload?: any, query?: any) => Promise<Response<T>>; | ||
| }; |
+1
-1
@@ -6,3 +6,3 @@ { | ||
| }, | ||
| "version": "1.0.82", | ||
| "version": "2.0.0", | ||
| "description": "", | ||
@@ -9,0 +9,0 @@ "type": "module", |
7156
31.33%151
24.79%