@akanjs/constant 0.0.39 → 0.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./src";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/constant",
3
- "version": "0.0.39",
3
+ "version": "0.0.41",
4
4
  "type": "commonjs",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -0,0 +1,8 @@
1
+ import "reflect-metadata";
2
+ import { BaseObject, Type } from "@akanjs/base";
3
+ import type { NonFunctionalKeys } from "./types";
4
+ export declare const as: <T>(modelRef: Type<T>) => Type<T>;
5
+ export declare const via: <T, LightOrFields extends readonly NonFunctionalKeys<Omit<T, "id" | "createdAt" | "updatedAt" | "removedAt">>[] | Type | undefined = undefined>(modelRef: Type<T>, fieldsOrLightModelRef?: LightOrFields, overwriteRef?: Type, overwriteLightRef?: Type) => LightOrFields extends undefined ? Type<T & BaseObject> : LightOrFields extends Type<infer Light> ? Type<T & Light & BaseObject> : LightOrFields extends readonly NonFunctionalKeys<Omit<T, "id" | "createdAt" | "updatedAt" | "removedAt">>[] ? Type<{ [K in LightOrFields[number]]: T[K]; } & BaseObject> : never;
6
+ export declare const from: <A, T1, T2 = unknown, T3 = unknown, T4 = unknown, T5 = unknown, T6 = unknown, T7 = unknown, T8 = unknown, T9 = unknown, T10 = unknown>(modelRef: Type<A>, t1: Type<T1>, t2?: Type<T2>, t3?: Type<T3>, t4?: Type<T4>, t5?: Type<T5>, t6?: Type<T6>, t7?: Type<T7>, t8?: Type<T8>, t9?: Type<T9>, t10?: Type<T10>) => Type<A & T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10>;
7
+ export declare const mixModelOf: <T1 = unknown, T2 = unknown, T3 = unknown, T4 = unknown, T5 = unknown, T6 = unknown, T7 = unknown, T8 = unknown, T9 = unknown, T10 = unknown, T11 = unknown, T12 = unknown, T13 = unknown, T14 = unknown, T15 = unknown, T16 = unknown, T17 = unknown, T18 = unknown, T19 = unknown, T20 = unknown>(t1: Type<T1>, t2?: Type<T2>, t3?: Type<T3>, t4?: Type<T4>, t5?: Type<T5>, t6?: Type<T6>, t7?: Type<T7>, t8?: Type<T8>, t9?: Type<T9>, t10?: Type<T10>, t11?: Type<T11>, t12?: Type<T12>, t13?: Type<T13>, t14?: Type<T14>, t15?: Type<T15>, t16?: Type<T16>, t17?: Type<T17>, t18?: Type<T18>, t19?: Type<T19>, t20?: Type<T20>) => Type<T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11 & T12 & T13 & T14 & T15 & T16 & T17 & T18 & T19 & T20>;
8
+ export declare const over: <T1 = unknown, T2 = unknown, T3 = unknown, T4 = unknown, T5 = unknown, T6 = unknown, T7 = unknown, T8 = unknown, T9 = unknown, T10 = unknown, T11 = unknown, T12 = unknown, T13 = unknown, T14 = unknown, T15 = unknown, T16 = unknown, T17 = unknown, T18 = unknown, T19 = unknown, T20 = unknown>(t1: Type<T1>, t2?: Type<T2>, t3?: Type<T3>, t4?: Type<T4>, t5?: Type<T5>, t6?: Type<T6>, t7?: Type<T7>, t8?: Type<T8>, t9?: Type<T9>, t10?: Type<T10>, t11?: Type<T11>, t12?: Type<T12>, t13?: Type<T13>, t14?: Type<T14>, t15?: Type<T15>, t16?: Type<T16>, t17?: Type<T17>, t18?: Type<T18>, t19?: Type<T19>, t20?: Type<T20>) => Type<T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11 & T12 & T13 & T14 & T15 & T16 & T17 & T18 & T19 & T20>;
@@ -0,0 +1,36 @@
1
+ import "reflect-metadata";
2
+ import { type Enum, type Type } from "@akanjs/base";
3
+ export declare class InputModelStorage {
4
+ }
5
+ export declare class LightModelStorage {
6
+ }
7
+ export declare class FullModelStorage {
8
+ }
9
+ export declare class ScalarModelStorage {
10
+ }
11
+ export declare class FilterModelStorage {
12
+ }
13
+ export declare const getFullModelRef: (refName: string) => Type;
14
+ export declare const getInputModelRef: (refName: string) => Type;
15
+ export declare const getScalarModelRef: (refName: string) => Type;
16
+ export declare const getChildClassRefs: (target: Type) => Type[];
17
+ export declare const getFieldEnumMetas: (modelRef: Type) => {
18
+ key: string;
19
+ enum: Enum<string | number>;
20
+ }[];
21
+ export declare const hasTextField: (modelRef: Type) => boolean;
22
+ export type ClassType = "light" | "full" | "input" | "scalar";
23
+ export declare const Model: {
24
+ Light: (refName: string) => (target: Type) => void;
25
+ Object: (refName: string) => (target: Type) => void;
26
+ Full: (refName: string) => (target: Type) => void;
27
+ Input: (refName: string) => (target: Type) => void;
28
+ Scalar: (refName: string) => (target: Type) => void;
29
+ Summary: (refName: string) => (target: Type) => void;
30
+ Insight: (refName: string) => (target: Type) => void;
31
+ Filter: (refName: string) => (target: Type) => void;
32
+ };
33
+ export declare const getLightModelRef: (modelRef: Type) => Type;
34
+ export declare const getAllFullModelRefs: () => Type[];
35
+ export declare const getAllScalarModelRefs: () => Type[];
36
+ export declare const getAllFilterModelRefs: () => Type[];
@@ -0,0 +1,14 @@
1
+ import "reflect-metadata";
2
+ import type { Type } from "@akanjs/base";
3
+ import type { FilterType } from "./types";
4
+ export declare const getCnstMeta: (refName: string) => ConstantModel<any, any, any, any, any, any>;
5
+ export interface ConstantModel<T extends string, Input, Full, Light, Insight, Filter extends FilterType, Summary = any> {
6
+ refName: T;
7
+ Input: Type<Input>;
8
+ Full: Type<Full>;
9
+ Light: Type<Light>;
10
+ Insight: Type<Insight>;
11
+ Filter: Type<Filter>;
12
+ Summary?: Type<Summary>;
13
+ }
14
+ export declare const cnstOf: <T extends string, Input, Full, Light, Insight, Filter extends FilterType, Summary>(refName: T, Input: Type<Input>, Full: Type<Full>, Light: Type<Light>, Insight: Type<Insight>, Filter: Type<Filter>, Summary?: Type<Summary>) => ConstantModel<T, Input, Full, Light, Insight, Filter, Summary>;
@@ -0,0 +1,7 @@
1
+ import { ConstantFieldProps, ReturnType } from "./scalar";
2
+ export declare const Field: {
3
+ Prop: (returns: ReturnType, fieldOption?: Omit<ConstantFieldProps, "fieldType" | "select"> | Omit<ConstantFieldProps, "nullable" | "fieldType" | "select">[]) => PropertyDecorator;
4
+ Hidden: (returns: ReturnType, fieldOption?: Omit<ConstantFieldProps, "fieldType" | "select"> | Omit<ConstantFieldProps, "nullable" | "fieldType" | "select">[]) => PropertyDecorator;
5
+ Secret: (returns: ReturnType, fieldOption?: Omit<ConstantFieldProps, "fieldType" | "select"> | Omit<ConstantFieldProps, "nullable" | "fieldType" | "select">[]) => PropertyDecorator;
6
+ Resolve: (returns: ReturnType, fieldOption?: Omit<ConstantFieldProps, "fieldType" | "select"> | Omit<ConstantFieldProps, "nullable" | "fieldType" | "select">[]) => PropertyDecorator;
7
+ };
@@ -0,0 +1,61 @@
1
+ import { type Type } from "@akanjs/base";
2
+ import { type ConstantFilterMeta, type FilterArgMeta, type FilterArgProps, type FilterKeyMeta, type FilterKeyProps, type ReturnType } from "./scalar";
3
+ import type { QueryOf, SortType } from "./types";
4
+ export declare const isFilterModel: (filterRef: Type) => boolean;
5
+ export declare const getFilterMeta: (filterRef: Type) => ConstantFilterMeta;
6
+ export declare const setFilterMeta: (filterRef: Type, filterMeta: ConstantFilterMeta) => void;
7
+ export declare const getFilterKeyMetaMapOnPrototype: (prototype: object) => Map<string, FilterKeyMeta>;
8
+ export declare const setFilterKeyMetaMapOnPrototype: (prototype: object, metadataMap: Map<string, FilterKeyMeta>) => void;
9
+ export declare const setFilterArgMetasOnPrototype: (prototype: object, key: string, filterArgMetas: FilterArgMeta[]) => void;
10
+ export declare const getFilterArgMetas: (filterRef: Type, key: string) => FilterArgMeta[];
11
+ export declare const getFilterQuery: (filterRef: Type, key: string) => (...args: any[]) => QueryOf<any>;
12
+ export declare const getFilterQueryMap: (filterRef: Type) => Map<string, FilterKeyMeta>;
13
+ export declare const getFilterSort: (filterRef: Type, key: string) => {
14
+ [key: string]: number;
15
+ };
16
+ export declare const getFilterSortMap: (filterRef: Type) => SortType;
17
+ export declare const Filter: {
18
+ Mongo: (fieldOption?: Omit<FilterKeyProps, "type">) => (prototype: object, key: string, descriptor: PropertyDescriptor) => void;
19
+ Arg: (name: string, returns: ReturnType, argOption?: FilterArgProps | FilterArgProps[]) => (prototype: object, key: string, idx: number) => void;
20
+ };
21
+ export type BaseFilterKey = "latest" | "oldest" | "any" | "byStatuses";
22
+ export declare const sortOf: <Sort extends SortType>(modelRef: Type, sort: Sort) => Type<{
23
+ latest: {
24
+ createdAt: number;
25
+ };
26
+ oldest: {
27
+ createdAt: number;
28
+ };
29
+ any(): {
30
+ removedAt: {
31
+ $exists: boolean;
32
+ };
33
+ };
34
+ byStatuses(statuses: string[] | null): {
35
+ status: {
36
+ $in: string[];
37
+ };
38
+ } | {
39
+ status?: undefined;
40
+ };
41
+ } & Sort>;
42
+ export declare function BaseFilter<Sort extends SortType>(modelRef: Type, sort: Sort): Type<{
43
+ latest: {
44
+ createdAt: number;
45
+ };
46
+ oldest: {
47
+ createdAt: number;
48
+ };
49
+ any(): {
50
+ removedAt: {
51
+ $exists: boolean;
52
+ };
53
+ };
54
+ byStatuses(statuses: string[] | null): {
55
+ status: {
56
+ $in: string[];
57
+ };
58
+ } | {
59
+ status?: undefined;
60
+ };
61
+ } & Sort>;
package/src/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export * from "./types";
2
+ export * from "./fieldMeta";
3
+ export * from "./scalar";
4
+ export * from "./constantDecorator";
5
+ export * from "./filterMeta";
6
+ export * from "./baseGql";
7
+ export * from "./classMeta";
@@ -0,0 +1,91 @@
1
+ import "reflect-metadata";
2
+ import { type Dayjs, type Enum, Float, type GqlScalar, ID, Int, JSON, type SingleFieldType, type Type, Upload } from "@akanjs/base";
3
+ import type { AccumulatorOperator } from "mongoose";
4
+ import { type QueryOf, type SortType } from "./types";
5
+ export declare const scalarExampleMap: Map<MapConstructor | typeof Int | typeof Upload | typeof Float | typeof ID | typeof JSON | StringConstructor | BooleanConstructor | DateConstructor, string | number | boolean | object>;
6
+ export declare const getScalarExample: (ref: GqlScalar) => string | number | boolean | object | null;
7
+ export declare const getGqlTypeStr: (ref: GqlScalar) => string;
8
+ export interface ConstantClassMeta {
9
+ refName: string;
10
+ modelRef: any;
11
+ type: "input" | "full" | "light" | "scalar";
12
+ modelType: "data" | "ephemeral" | "summary" | "insight";
13
+ hasTextField: boolean;
14
+ }
15
+ export interface ConstantFilterMeta {
16
+ refName: string;
17
+ sort: SortType;
18
+ }
19
+ export interface FilterKeyProps {
20
+ type?: "mongo" | "meili";
21
+ }
22
+ export interface FilterKeyMeta extends FilterKeyProps {
23
+ key: string;
24
+ descriptor: PropertyDescriptor;
25
+ }
26
+ export interface FilterArgProps {
27
+ nullable?: boolean;
28
+ ref?: string;
29
+ default?: string | number | boolean | object | null | (() => string | number | boolean | object | null);
30
+ renderOption?: (value: any) => string;
31
+ enum?: Enum<string | number>;
32
+ }
33
+ export interface FilterArgMeta extends FilterArgProps {
34
+ name: string;
35
+ modelRef: Type;
36
+ arrDepth: number;
37
+ isArray: boolean;
38
+ optArrDepth: number;
39
+ }
40
+ export declare const fieldTypes: readonly ["email", "password", "url"];
41
+ export type FieldType = (typeof fieldTypes)[number];
42
+ export type ReturnType<T extends SingleFieldType = SingleFieldType> = (of?: any) => T | [T] | [[T]] | Map<string, any>;
43
+ export interface ConstantFieldProps {
44
+ nullable?: boolean;
45
+ ref?: string;
46
+ refPath?: string;
47
+ refType?: "child" | "parent" | "relation";
48
+ default?: string | number | boolean | object | null | Enum<string | number>;
49
+ type?: FieldType;
50
+ fieldType?: "property" | "hidden" | "resolve";
51
+ immutable?: boolean;
52
+ min?: number;
53
+ max?: number;
54
+ enum?: Enum<string | number>;
55
+ select?: boolean;
56
+ minlength?: number;
57
+ maxlength?: number;
58
+ query?: QueryOf<any> | (() => QueryOf<any>);
59
+ accumulate?: AccumulatorOperator;
60
+ example?: string | number | boolean | Dayjs | string[] | number[] | boolean[] | Dayjs[];
61
+ of?: GqlScalar;
62
+ validate?: (value: any, model: any) => boolean;
63
+ text?: "search" | "filter";
64
+ }
65
+ export type ConstantFieldMeta = ConstantFieldProps & {
66
+ nullable: boolean;
67
+ default: any;
68
+ fieldType: "property" | "hidden" | "resolve";
69
+ immutable: boolean;
70
+ select: boolean;
71
+ } & {
72
+ key: string;
73
+ name: string;
74
+ isClass: boolean;
75
+ isScalar: boolean;
76
+ modelRef: Type;
77
+ arrDepth: number;
78
+ isArray: boolean;
79
+ optArrDepth: number;
80
+ isMap: boolean;
81
+ };
82
+ export declare const getClassMeta: (modelRef: Type) => ConstantClassMeta;
83
+ export declare const getFieldMetas: (modelRef: Type) => ConstantFieldMeta[];
84
+ export declare const isConstantModel: (modelRef: Type) => boolean;
85
+ export declare const getFieldMetaMap: (modelRef: Type) => Map<string, ConstantFieldMeta>;
86
+ export declare const setFieldMetaMap: (modelRef: Type, metadataMap: Map<string, ConstantFieldMeta>) => void;
87
+ export declare const getFieldMetaMapOnPrototype: (prototype: object) => Map<string, ConstantFieldMeta>;
88
+ export declare const setFieldMetaMapOnPrototype: (prototype: object, metadataMap: Map<string, ConstantFieldMeta>) => void;
89
+ export declare const getQueryMap: (modelRef: Type) => {
90
+ [key: string]: QueryOf<any> | undefined | (() => QueryOf<any>);
91
+ };
package/src/types.d.ts ADDED
@@ -0,0 +1,92 @@
1
+ import { type BaseObject, Dayjs } from "@akanjs/base";
2
+ import type { FilterQuery, HydratedDocument, ProjectionType } from "mongoose";
3
+ export type { FilterQuery as QueryOf };
4
+ type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
5
+ type OptionalKeys<T> = T extends {
6
+ [key: string]: any;
7
+ } ? {
8
+ [K in keyof T]-?: null extends T[K] ? K : never;
9
+ }[keyof T] : never;
10
+ type ObjectToId<O, D = Dayjs> = O extends BaseObject ? string : O extends BaseObject[] ? string[] : O extends Dayjs ? D : O extends {
11
+ [key: string]: any;
12
+ } ? DocumentModel<O> : O;
13
+ export interface SortType {
14
+ [key: string]: {
15
+ [key: string]: number;
16
+ };
17
+ }
18
+ export type SortOf<Filter> = keyof GetStateObject<Filter>;
19
+ export type FilterType = Record<string, any>;
20
+ export interface ListQueryOption<Sort, Obj> {
21
+ skip?: number | null;
22
+ limit?: number | null;
23
+ sort?: Sort | null;
24
+ sample?: number;
25
+ select?: ProjectionType<Obj>;
26
+ }
27
+ export interface FindQueryOption<Sort, Obj> {
28
+ skip?: number | null;
29
+ sort?: Sort | null;
30
+ sample?: boolean;
31
+ select?: ProjectionType<Obj>;
32
+ }
33
+ export type DocumentModel<T, D = Dayjs> = T extends (infer S)[] ? DocumentModel<S>[] : T extends string ? T : T extends number ? T : T extends boolean ? T : T extends Dayjs ? T : T extends Map<infer K, infer V> ? Map<K, DocumentModel<V, D>> : Optional<{
34
+ [K in keyof GetStateObject<T>]: T[K] extends infer S ? S extends null ? undefined : ObjectToId<T[K], D> : never;
35
+ }, OptionalKeys<GetStateObject<T>>>;
36
+ export interface ListOption {
37
+ limit?: number;
38
+ skip?: number;
39
+ sort?: string;
40
+ }
41
+ export declare const defaultListOption: ListOption;
42
+ export type GetPlainObject<T, O extends string> = Omit<{
43
+ [K in keyof T as T[K] extends (...args: any) => any ? never : K extends keyof HydratedDocument<any> ? never : K]: T[K];
44
+ }, O>;
45
+ export type GetStateObject<T> = Omit<{
46
+ [K in keyof T as T[K] extends (...args: any) => any ? never : K]: T[K];
47
+ }, "prototype">;
48
+ export type GetActionObject<T> = Omit<{
49
+ [K in keyof T as T[K] extends (...args: any) => any ? K : never]: T[K];
50
+ }, "prototype">;
51
+ export interface ProtoFile {
52
+ id: string;
53
+ filename: string;
54
+ abstractData: string | null;
55
+ imageSize: [number, number];
56
+ progress: number | null;
57
+ url: string;
58
+ size: number;
59
+ status: string;
60
+ createdAt: Dayjs;
61
+ updatedAt: Dayjs;
62
+ removedAt: Dayjs | null;
63
+ mimetype: string;
64
+ encoding: string;
65
+ origin: string | null;
66
+ lastModifiedAt: Dayjs;
67
+ }
68
+ export interface ProtoAppInfo {
69
+ appId: string | null;
70
+ appName: string;
71
+ deviceId: string | null;
72
+ platform: "ios" | "android" | null;
73
+ major: number;
74
+ minor: number;
75
+ patch: number;
76
+ branch: string;
77
+ buildNum: string | null;
78
+ versionOs: string | null;
79
+ isEmulator: boolean | null;
80
+ }
81
+ export interface ProtoPatch {
82
+ source: ProtoFile;
83
+ build: ProtoFile;
84
+ appBuild: ProtoFile | null;
85
+ status: "active" | "expired";
86
+ at: Dayjs;
87
+ }
88
+ export declare const DEFAULT_PAGE_SIZE = 20;
89
+ export interface TextDoc {
90
+ [key: string]: string | TextDoc;
91
+ }
92
+ export type NonFunctionalKeys<T> = keyof T extends (...any: any[]) => any ? never : keyof T;