akanjs 2.3.5-rc.9 → 2.3.5

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.
Files changed (81) hide show
  1. package/base/base.ts +6 -2
  2. package/base/primitiveRegistry.ts +50 -46
  3. package/base/symbols.ts +16 -11
  4. package/base/types.ts +12 -0
  5. package/constant/constantRegistry.ts +10 -9
  6. package/constant/deserialize.ts +7 -7
  7. package/constant/fieldInfo.ts +173 -31
  8. package/constant/getDefault.ts +2 -2
  9. package/constant/immerify.ts +2 -2
  10. package/constant/purify.ts +19 -4
  11. package/constant/serialize.ts +6 -5
  12. package/constant/types.ts +9 -1
  13. package/constant/via.ts +312 -57
  14. package/dictionary/dictInfo.ts +28 -38
  15. package/dictionary/locale.ts +36 -38
  16. package/document/by.ts +84 -21
  17. package/document/database.ts +53 -18
  18. package/document/databaseRegistry.ts +7 -3
  19. package/document/filterMeta.ts +26 -14
  20. package/document/into.ts +71 -76
  21. package/document/types.ts +4 -2
  22. package/fetch/fetchType/endpointFetch.type.ts +6 -3
  23. package/fetch/fetchType/sliceFetch.type.ts +24 -13
  24. package/package.json +1 -1
  25. package/service/predefinedAdaptor/compress.adaptor.ts +9 -9
  26. package/service/predefinedAdaptor/database.adaptor.ts +3 -7
  27. package/service/serve.ts +17 -52
  28. package/service/types.ts +61 -21
  29. package/signal/endpoint.ts +2 -1
  30. package/signal/endpointInfo.ts +53 -23
  31. package/signal/internal.ts +2 -1
  32. package/signal/internalInfo.ts +71 -23
  33. package/signal/serverSignal.ts +23 -57
  34. package/signal/slice.ts +35 -35
  35. package/signal/sliceInfo.ts +63 -47
  36. package/signal/types.ts +23 -17
  37. package/store/action.ts +57 -44
  38. package/store/state.ts +47 -36
  39. package/store/stateBuilder.ts +3 -3
  40. package/store/store.ts +61 -15
  41. package/store/types.ts +16 -6
  42. package/types/base/base.d.ts +5 -1
  43. package/types/base/primitiveRegistry.d.ts +43 -38
  44. package/types/base/symbols.d.ts +5 -0
  45. package/types/base/types.d.ts +1 -0
  46. package/types/constant/constantRegistry.d.ts +3 -8
  47. package/types/constant/deserialize.d.ts +2 -2
  48. package/types/constant/fieldInfo.d.ts +41 -20
  49. package/types/constant/immerify.d.ts +2 -2
  50. package/types/constant/purify.d.ts +3 -2
  51. package/types/constant/serialize.d.ts +2 -2
  52. package/types/constant/types.d.ts +6 -1
  53. package/types/constant/via.d.ts +143 -22
  54. package/types/dictionary/dictInfo.d.ts +18 -11
  55. package/types/dictionary/locale.d.ts +23 -16
  56. package/types/document/by.d.ts +44 -7
  57. package/types/document/database.d.ts +9 -7
  58. package/types/document/databaseRegistry.d.ts +5 -4
  59. package/types/document/filterMeta.d.ts +18 -11
  60. package/types/document/into.d.ts +46 -19
  61. package/types/document/types.d.ts +3 -2
  62. package/types/fetch/fetchType/endpointFetch.type.d.ts +2 -2
  63. package/types/fetch/fetchType/sliceFetch.type.d.ts +11 -11
  64. package/types/service/serve.d.ts +4 -5
  65. package/types/service/serviceModule.d.ts +5 -5
  66. package/types/service/types.d.ts +23 -5
  67. package/types/signal/endpoint.d.ts +2 -1
  68. package/types/signal/endpointInfo.d.ts +40 -15
  69. package/types/signal/internal.d.ts +2 -1
  70. package/types/signal/internalInfo.d.ts +46 -12
  71. package/types/signal/serverSignal.d.ts +15 -12
  72. package/types/signal/slice.d.ts +8 -6
  73. package/types/signal/sliceInfo.d.ts +41 -20
  74. package/types/signal/types.d.ts +23 -17
  75. package/types/store/action.d.ts +25 -22
  76. package/types/store/baseSt.d.ts +42 -13
  77. package/types/store/state.d.ts +23 -26
  78. package/types/store/stateBuilder.d.ts +2 -2
  79. package/types/store/store.d.ts +17 -5
  80. package/types/store/types.d.ts +9 -3
  81. package/ui/Signal/makeExample.ts +3 -3
@@ -1,4 +1,5 @@
1
1
  import dayjsLib, { type Dayjs } from "dayjs";
2
+ import { CLIENT_VALUE, DEFAULT_VALUE, EXAMPLE_VALUE, PURIFIED_VALUE, SERVER_VALUE } from "./symbols.d.ts";
2
3
  import type { Cls } from "./types.d.ts";
3
4
  export type { Dayjs };
4
5
  /** Shared dayjs factory re-export used by Akan documents, services, stores, and UI. */
@@ -16,17 +17,14 @@ export declare class PrimitiveRegistry {
16
17
  static getNames(): string[];
17
18
  static getAll(): (typeof PrimitiveScalar)[];
18
19
  }
19
- export declare const PRIMITIVE_SERVER_VALUE: unique symbol;
20
- export declare const PRIMITIVE_CLIENT_VALUE: unique symbol;
21
- export declare const PRIMITIVE_DEFAULT_VALUE: unique symbol;
22
- export declare const PRIMITIVE_EXAMPLE_VALUE: unique symbol;
23
20
  export type PrimitiveValue = string | number | boolean | Dayjs | Date | null | undefined;
24
21
  export declare class PrimitiveScalar {
25
22
  static refName: string;
26
- static [PRIMITIVE_SERVER_VALUE]: unknown;
27
- static [PRIMITIVE_CLIENT_VALUE]: unknown;
28
- static [PRIMITIVE_DEFAULT_VALUE]: unknown;
29
- static [PRIMITIVE_EXAMPLE_VALUE]: unknown;
23
+ static [SERVER_VALUE]: unknown;
24
+ static [CLIENT_VALUE]: unknown;
25
+ static [DEFAULT_VALUE]: unknown;
26
+ static [PURIFIED_VALUE]: unknown;
27
+ static [EXAMPLE_VALUE]: unknown;
30
28
  static validate(value: PrimitiveValue): boolean;
31
29
  static parseValue(value: PrimitiveValue): PrimitiveValue;
32
30
  static serializeValue(value: PrimitiveValue): PrimitiveValue;
@@ -43,10 +41,11 @@ export declare class PrimitiveScalar {
43
41
  /** Integer primitive scalar. Accepts safe integer numbers after parsing. */
44
42
  export declare class Int extends PrimitiveScalar {
45
43
  static refName: "Int";
46
- static [PRIMITIVE_SERVER_VALUE]: number;
47
- static [PRIMITIVE_CLIENT_VALUE]: number;
48
- static [PRIMITIVE_DEFAULT_VALUE]: number;
49
- static [PRIMITIVE_EXAMPLE_VALUE]: number;
44
+ static [SERVER_VALUE]: number;
45
+ static [CLIENT_VALUE]: number;
46
+ static [DEFAULT_VALUE]: number;
47
+ static [PURIFIED_VALUE]: number;
48
+ static [EXAMPLE_VALUE]: number;
50
49
  static validate(value: string | number): boolean;
51
50
  static parseValue(input: string | number): number;
52
51
  static serializeValue(value: number): number;
@@ -54,10 +53,11 @@ export declare class Int extends PrimitiveScalar {
54
53
  /** Floating point primitive scalar. Accepts finite numbers after parsing. */
55
54
  export declare class Float extends PrimitiveScalar {
56
55
  static refName: "Float";
57
- static [PRIMITIVE_SERVER_VALUE]: number;
58
- static [PRIMITIVE_CLIENT_VALUE]: number;
59
- static [PRIMITIVE_DEFAULT_VALUE]: number;
60
- static [PRIMITIVE_EXAMPLE_VALUE]: number;
56
+ static [SERVER_VALUE]: number;
57
+ static [CLIENT_VALUE]: number;
58
+ static [DEFAULT_VALUE]: number;
59
+ static [PURIFIED_VALUE]: number;
60
+ static [EXAMPLE_VALUE]: number;
61
61
  static validate(value: string | number): boolean;
62
62
  static parseValue(input: string | number): number;
63
63
  static serializeValue(value: number): number;
@@ -65,10 +65,11 @@ export declare class Float extends PrimitiveScalar {
65
65
  /** 24-character hexadecimal id primitive used by Akan document and signal models. */
66
66
  export declare class ID extends PrimitiveScalar {
67
67
  static refName: "ID";
68
- static [PRIMITIVE_SERVER_VALUE]: string;
69
- static [PRIMITIVE_CLIENT_VALUE]: string;
70
- static [PRIMITIVE_DEFAULT_VALUE]: string;
71
- static [PRIMITIVE_EXAMPLE_VALUE]: string;
68
+ static [SERVER_VALUE]: string;
69
+ static [CLIENT_VALUE]: string;
70
+ static [DEFAULT_VALUE]: string;
71
+ static [PURIFIED_VALUE]: string;
72
+ static [EXAMPLE_VALUE]: string;
72
73
  static validate(value: string): boolean;
73
74
  static parseValue(input: string): string;
74
75
  static serializeValue(value: string): string;
@@ -79,24 +80,26 @@ export declare class ID extends PrimitiveScalar {
79
80
  /** Open object primitive for intentionally flexible payloads or metadata blobs. */
80
81
  export declare class Any extends PrimitiveScalar {
81
82
  static refName: "Any";
82
- static [PRIMITIVE_DEFAULT_VALUE]: object | null;
83
- static [PRIMITIVE_EXAMPLE_VALUE]: object;
83
+ static [DEFAULT_VALUE]: object | null;
84
+ static [EXAMPLE_VALUE]: object;
84
85
  }
85
86
  export declare class Upload extends PrimitiveScalar {
86
87
  static refName: "Upload";
87
- static [PRIMITIVE_SERVER_VALUE]: File;
88
- static [PRIMITIVE_CLIENT_VALUE]: File;
89
- static [PRIMITIVE_DEFAULT_VALUE]: File | null;
90
- static [PRIMITIVE_EXAMPLE_VALUE]: string;
88
+ static [SERVER_VALUE]: File;
89
+ static [CLIENT_VALUE]: File;
90
+ static [DEFAULT_VALUE]: File | null;
91
+ static [PURIFIED_VALUE]: File;
92
+ static [EXAMPLE_VALUE]: string;
91
93
  __TEMP_TYPE__: "Upload";
92
94
  }
93
95
  declare global {
94
96
  interface StringConstructor {
95
97
  refName: "String";
96
- [PRIMITIVE_SERVER_VALUE]: string;
97
- [PRIMITIVE_CLIENT_VALUE]: string;
98
- [PRIMITIVE_DEFAULT_VALUE]: string;
99
- [PRIMITIVE_EXAMPLE_VALUE]: string;
98
+ [SERVER_VALUE]: string;
99
+ [CLIENT_VALUE]: string;
100
+ [DEFAULT_VALUE]: string;
101
+ [PURIFIED_VALUE]: string;
102
+ [EXAMPLE_VALUE]: string;
100
103
  validate(value: string): boolean;
101
104
  parseValue(input: string): string;
102
105
  serializeValue(value: string): string;
@@ -106,10 +109,11 @@ declare global {
106
109
  }
107
110
  interface BooleanConstructor {
108
111
  refName: "Boolean";
109
- [PRIMITIVE_SERVER_VALUE]: boolean;
110
- [PRIMITIVE_CLIENT_VALUE]: boolean;
111
- [PRIMITIVE_DEFAULT_VALUE]: boolean;
112
- [PRIMITIVE_EXAMPLE_VALUE]: boolean;
112
+ [SERVER_VALUE]: boolean;
113
+ [CLIENT_VALUE]: boolean;
114
+ [DEFAULT_VALUE]: boolean;
115
+ [PURIFIED_VALUE]: boolean;
116
+ [EXAMPLE_VALUE]: boolean;
113
117
  validate(value: boolean | number): boolean;
114
118
  parseValue(input: boolean | number): boolean | number;
115
119
  serializeValue(value: boolean | number): boolean | number;
@@ -119,10 +123,11 @@ declare global {
119
123
  }
120
124
  interface DateConstructor {
121
125
  refName: "Date";
122
- [PRIMITIVE_SERVER_VALUE]: Dayjs;
123
- [PRIMITIVE_CLIENT_VALUE]: Dayjs;
124
- [PRIMITIVE_DEFAULT_VALUE]: Dayjs;
125
- [PRIMITIVE_EXAMPLE_VALUE]: string;
126
+ [SERVER_VALUE]: Dayjs;
127
+ [CLIENT_VALUE]: Dayjs;
128
+ [DEFAULT_VALUE]: Dayjs;
129
+ [PURIFIED_VALUE]: Dayjs;
130
+ [EXAMPLE_VALUE]: string;
126
131
  validate(value: Date): boolean;
127
132
  parseValue(input: Date): Dayjs;
128
133
  serializeValue(value: Dayjs | Date): Date;
@@ -9,3 +9,8 @@ export declare const STATE_META: unique symbol;
9
9
  export declare const STATE_INIT_META: unique symbol;
10
10
  export declare const STATE_DERIVED_META: unique symbol;
11
11
  export declare const ACTION_META: unique symbol;
12
+ export declare const SERVER_VALUE: unique symbol;
13
+ export declare const CLIENT_VALUE: unique symbol;
14
+ export declare const DEFAULT_VALUE: unique symbol;
15
+ export declare const EXAMPLE_VALUE: unique symbol;
16
+ export declare const PURIFIED_VALUE: unique symbol;
@@ -33,6 +33,7 @@ export type ObjectAssign<Objects extends object[], Acc = unknown> = Objects exte
33
33
  infer First extends object,
34
34
  ...infer Rest extends object[]
35
35
  ] ? ObjectAssign<Rest, Assign<Acc, First>> : Acc;
36
+ export type ObjectAssignKeyOfObjects<T extends object[], Key extends PropertyKey, Acc = Record<never, never>> = T extends [infer First extends object, ...infer Rest extends object[]] ? Key extends keyof First ? First[Key] extends object ? ObjectAssignKeyOfObjects<Rest, Key, Assign<Acc, First[Key]>> : ObjectAssignKeyOfObjects<Rest, Key, Acc> : ObjectAssignKeyOfObjects<Rest, Key, Acc> : Acc;
36
37
  export type MergeAll<T extends object[], Acc = unknown> = T extends [
37
38
  infer First extends object,
38
39
  ...infer Rest extends object[]
@@ -1,10 +1,6 @@
1
- import { type Cls, type EnumInstance, FIELD_META, type GetStateObject, type PrimitiveScalar } from "akanjs/base";
2
- import { type ConstantCls, type FieldObject, type PurifiedModel } from ".";
1
+ import { type Cls, type EnumInstance, type GetStateObject, type PrimitiveScalar } from "akanjs/base";
2
+ import { type ConstantCls, type ConstantModelRef, type FieldObject, type PurifiedModel } from ".";
3
3
  import type { ConstantType, DefaultOf, DocumentModel, QueryOf } from "./types.d.ts";
4
- type ConstantModelRef<FieldObj extends FieldObject = FieldObject> = Cls<unknown, {
5
- [FIELD_META]: FieldObj;
6
- modelType: ConstantType;
7
- }>;
8
4
  /** Runtime registry for Akan constant model metadata, refs, enums, and generated model contracts. */
9
5
  export declare class ConstantRegistry {
10
6
  static database: Map<string, ConstantModel<string, any, any, any, any, any, FieldObject, Capitalize<string>, GetStateObject<{
@@ -49,7 +45,7 @@ export declare class ConstantRegistry {
49
45
  allowEmpty?: AllowEmpty;
50
46
  }): AllowEmpty extends true ? ScalarConstantModel | undefined : ScalarConstantModel;
51
47
  static getModelRef(refName: string, modelType?: ConstantType): Cls | typeof PrimitiveScalar;
52
- static buildModel<T extends string, InputRef extends ConstantModelRef, ObjectRef extends ConstantModelRef, FullFieldObj extends FieldObject, FullRef extends ConstantModelRef<FullFieldObj>, LightRef extends ConstantModelRef, InsightRef extends ConstantModelRef, Input = InstanceType<InputRef>, Obj = InstanceType<ObjectRef>, Full = InstanceType<FullRef>, Light = InstanceType<LightRef>, Insight = InstanceType<InsightRef>>(refName: T, inputRef: InputRef, objectRef: ObjectRef, fullRef: FullRef, lightRef: LightRef, insightRef: InsightRef, constExports: Record<string, unknown>): ConstantModel<T, Input, Obj, Full, Light, Insight, FullFieldObj, Capitalize<T>, DefaultOf<Full>, DefaultOf<Input>, GetStateObject<Full>, GetStateObject<Input>, DefaultOf<Insight>, PurifiedModel<Input>, DocumentModel<Full>, DocumentModel<Input>, QueryOf<DocumentModel<Full>>, GetStateObject<Light>, GetStateObject<Insight>>;
48
+ static buildModel<T extends string, InputRef extends ConstantModelRef, ObjectRef extends ConstantModelRef, FullFieldObj extends FieldObject, FullRef extends ConstantModelRef<any, FullFieldObj>, LightRef extends ConstantModelRef, InsightRef extends ConstantModelRef, Input = InstanceType<InputRef>, Obj = InstanceType<ObjectRef>, Full = InstanceType<FullRef>, Light = InstanceType<LightRef>, Insight = InstanceType<InsightRef>>(refName: T, inputRef: InputRef, objectRef: ObjectRef, fullRef: FullRef, lightRef: LightRef, insightRef: InsightRef, constExports: Record<string, unknown>): ConstantModel<T, Input, Obj, Full, Light, Insight, FullFieldObj, Capitalize<T>, DefaultOf<Full>, DefaultOf<Input>, GetStateObject<Full>, GetStateObject<Input>, DefaultOf<Insight>, PurifiedModel<Input>, DocumentModel<Full>, DocumentModel<Input>, QueryOf<DocumentModel<Full>>, GetStateObject<Light>, GetStateObject<Insight>>;
53
49
  static buildScalar<T extends string, Model>(refName: T, Model: Cls<Model>, constExports: Record<string, unknown>): ScalarConstantModel<T, Model, DefaultOf<Model>, DocumentModel<Model>, PurifiedModel<Model>>;
54
50
  static serialize<Value>(modelRef: Cls | Cls[], value: Value, nullable?: boolean): Value;
55
51
  static deserialize<Value>(modelRef: Cls | Cls[], value: Value, nullable?: boolean): Value;
@@ -86,4 +82,3 @@ export interface ScalarConstantModel<T extends string = string, Model = any, _De
86
82
  _Doc: _Doc;
87
83
  _PurifiedInput: _PurifiedInput;
88
84
  }
89
- export {};
@@ -1,6 +1,6 @@
1
1
  import { type PrimitiveScalar } from "akanjs/base";
2
- import { type ConstantCls } from ".";
3
- export declare const deserialize: (argRef: ConstantCls | PrimitiveScalar, arrDepth: number, value: unknown, { key, nullable, convertFn }: {
2
+ import { type ConstantModelRef } from ".";
3
+ export declare const deserialize: (argRef: ConstantModelRef | PrimitiveScalar, arrDepth: number, value: unknown, { key, nullable, convertFn }: {
4
4
  key?: string;
5
5
  nullable?: boolean;
6
6
  convertFn?: (value: unknown) => unknown;
@@ -1,19 +1,23 @@
1
- import { type Any, type Cls, type Dayjs, type EnumInstance, type Float, Int, PRIMITIVE_CLIENT_VALUE, PRIMITIVE_SERVER_VALUE, type PrimitiveScalar, type SingleValue, type UnCls } from "akanjs/base";
2
- import type { ConstantCls } from "./via.d.ts";
1
+ import { type Any, CLIENT_VALUE, type Cls, type Dayjs, type EnumInstance, type Float, Int, type PrimitiveScalar, SERVER_VALUE, type SingleValue, type UnCls } from "akanjs/base";
2
+ import type { BaseObject } from "./types.d.ts";
3
+ import type { ConstantModelRef } from "./via.d.ts";
3
4
  export type ParamFieldType = (typeof PrimitiveScalar & {
4
- [PRIMITIVE_CLIENT_VALUE]: string | number | boolean | Dayjs;
5
+ [CLIENT_VALUE]: string | number | boolean | Dayjs;
5
6
  }) | EnumInstance<string, any>;
6
7
  export type ConstantFieldType = typeof PrimitiveScalar | Cls | MapConstructor | EnumInstance<string, number>;
7
8
  export type ConstantFieldTypeInput = ConstantFieldType | ConstantFieldType[] | ConstantFieldType[][] | ConstantFieldType[][][];
8
- export type FieldToValue<Field, MapValue = any> = Field extends null ? FieldToValue<Exclude<Field, null>> | null : Field extends MapConstructor ? Map<string, FieldToValue<MapValue>> : Field extends (infer F)[] ? FieldToValue<F>[] : Field extends {
9
- [PRIMITIVE_SERVER_VALUE]: infer V;
10
- } ? V : Field extends EnumInstance<string, infer V> ? V : Field extends Cls ? UnCls<Field> : never;
9
+ export type FieldToValue<Field, MapValue = any> = Field extends null ? FieldToValue<Exclude<Field, null>> | null : Field extends MapConstructor ? Map<string, FieldToValue<MapValue>> : Field extends (infer F)[] ? FieldToValue<F>[] : Field extends typeof PrimitiveScalar | StringConstructor | BooleanConstructor | DateConstructor ? Field[typeof SERVER_VALUE] : Field extends ConstantModelRef ? UnCls<Field> : Field extends {
10
+ [SERVER_VALUE]: infer V;
11
+ } ? V : Field extends Cls ? UnCls<Field> : never;
11
12
  export interface FieldInfoObject {
12
- [key: string]: FieldInfo<any, ConstantFieldTypeInput | null, any>;
13
+ [key: string]: FieldInfo<any, ConstantFieldTypeInput | null, any, any, any, boolean, boolean, boolean, boolean, boolean, boolean, boolean>;
13
14
  }
14
15
  export type ExtractFieldInfoObject<Obj extends FieldInfoObject> = {
15
- [K in keyof Obj]: Obj[K] extends FieldInfo<any, infer FieldValue, infer ExplicitType, infer MapValue> ? unknown extends ExplicitType ? FieldToValue<FieldValue, MapValue> : ExplicitType : never;
16
+ [K in keyof Obj]: unknown extends Obj[K]["explicitType"] ? FieldToValue<Obj[K]["value"], Obj[K]["mapValue"]> : Obj[K]["explicitType"];
16
17
  };
18
+ type FieldKindSource<Value> = NonNullable<SingleValue<Value>>;
19
+ type IsNullableValue<Value> = null extends Value ? true : false;
20
+ type FieldInfoValue<Value, ExplicitType, MapValue> = unknown extends ExplicitType ? FieldToValue<Value, MapValue> : ExplicitType;
17
21
  export type ConstantFieldKind = "property" | "hidden" | "secret" | "resolve";
18
22
  export interface ConstantFieldProps<FieldType extends ConstantFieldKind = ConstantFieldKind, FieldValue = any, MapValue = any, Metadata = {
19
23
  [key: string]: any;
@@ -43,15 +47,23 @@ export interface ConstantFieldProps<FieldType extends ConstantFieldKind = Consta
43
47
  }
44
48
  export declare const fieldPresets: readonly ["email", "password", "url"];
45
49
  export type FieldPreset = (typeof fieldPresets)[number];
46
- declare class FieldInfo<FieldType extends ConstantFieldKind = any, Value extends ConstantFieldTypeInput | null = null, ExplicitType = unknown, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never> {
50
+ declare class FieldInfo<FieldType extends ConstantFieldKind = any, Value extends ConstantFieldTypeInput | null = null, ExplicitType = unknown, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never, KindSource = FieldKindSource<Value>, IsRelation extends boolean = UnCls<KindSource> extends BaseObject ? true : false, IsEnum extends boolean = KindSource extends EnumInstance<string, any> ? true : false, IsPrimitive extends boolean = KindSource extends typeof PrimitiveScalar ? true : false, IsMap extends boolean = KindSource extends MapConstructor ? true : false, IsScalar extends boolean = IsRelation extends true ? false : IsEnum extends true ? false : IsPrimitive extends true ? false : IsMap extends true ? false : true, IsHidden extends boolean = FieldType extends "hidden" ? true : false, IsSecret extends boolean = FieldType extends "secret" ? true : false> {
47
51
  readonly value: Value;
48
52
  readonly type: ConstantFieldTypeInput;
49
53
  readonly option: ConstantFieldProps;
50
54
  explicitType: ExplicitType;
55
+ mapValue: MapValue;
56
+ _isEnum: IsEnum;
57
+ _isPrimitive: IsPrimitive;
58
+ _isScalar: IsScalar;
59
+ _isRelation: IsRelation;
60
+ _isHidden: IsHidden;
61
+ _isSecret: IsSecret;
62
+ _isMap: IsMap;
51
63
  constructor(value: Value, option: ConstantFieldProps<FieldType, any, MapValue>);
52
64
  optional(): FieldInfo<FieldType, Value | null, ExplicitType | null, MapValue>;
53
65
  meta(meta: ConstantFieldProps["meta"]): this;
54
- toField(): ConstantField<FieldType, Value, ExplicitType, MapValue, false, {
66
+ toField(): ConstantField<FieldType, Value, ExplicitType, MapValue, IsNullableValue<FieldInfoValue<Value, ExplicitType, MapValue>>, IsRelation, IsEnum, IsPrimitive, IsScalar, IsHidden, IsSecret, IsMap, {
55
67
  [key: string]: any;
56
68
  }>;
57
69
  }
@@ -77,7 +89,7 @@ interface ConstantFieldBuildProps<FieldType extends ConstantFieldKind = any, Fie
77
89
  of?: MapValue;
78
90
  validate?: (value: FieldValue, model: any) => boolean;
79
91
  text?: "search" | "filter";
80
- modelRef: ConstantCls;
92
+ modelRef: ConstantModelRef;
81
93
  arrDepth: number;
82
94
  optArrDepth: number;
83
95
  meta: Metadata;
@@ -88,11 +100,13 @@ export interface FieldProps extends ConstantFieldBuildProps {
88
100
  isArray: boolean;
89
101
  isMap: boolean;
90
102
  }
103
+ type ConstantFieldFromInfoParts<FieldType extends ConstantFieldKind, Value extends ConstantFieldTypeInput | null, ExplicitType, MapValue, IsRelation extends boolean, IsEnum extends boolean, IsPrimitive extends boolean, IsMap extends boolean, IsScalar extends boolean, IsHidden extends boolean, IsSecret extends boolean, _FieldValue = FieldInfoValue<Value, ExplicitType, MapValue>> = ConstantField<FieldType, Value, _FieldValue, MapValue, IsNullableValue<_FieldValue>, IsRelation, IsEnum, IsPrimitive, IsScalar, IsHidden, IsSecret, IsMap>;
104
+ type ConstantFieldFromInfo<Info> = Info extends FieldInfo<infer FieldType, infer Value, infer ExplicitType, infer MapValue, infer _KindSource, infer IsRelation, infer IsEnum, infer IsPrimitive, infer IsMap, infer IsScalar, infer IsHidden, infer IsSecret> ? ConstantFieldFromInfoParts<FieldType, Value, ExplicitType, MapValue, IsRelation, IsEnum, IsPrimitive, IsMap, IsScalar, IsHidden, IsSecret> : never;
91
105
  export type FieldInfoObjectToFieldObject<Obj extends FieldInfoObject> = {
92
- [K in keyof Obj]: Obj[K] extends FieldInfo<infer FieldType, infer Value, infer ExplicitType, infer MapValue> ? ConstantField<FieldType, Value, unknown extends ExplicitType ? FieldToValue<Value, MapValue> : ExplicitType, MapValue> : never;
106
+ [K in keyof Obj]: ConstantFieldFromInfo<Obj[K]>;
93
107
  };
94
108
  /** Runtime metadata for a single Akan constant field. */
95
- export declare class ConstantField<FieldType extends ConstantFieldKind = ConstantFieldKind, Value extends ConstantFieldTypeInput | null = any, FieldValue = any, MapValue = any, Nullable extends boolean = false, Metadata = {
109
+ export declare class ConstantField<FieldType extends ConstantFieldKind = ConstantFieldKind, Value extends ConstantFieldTypeInput | null = any, FieldValue = any, MapValue = any, Nullable extends boolean = boolean, IsRelation extends boolean = boolean, IsEnum extends boolean = boolean, IsPrimitive extends boolean = boolean, IsScalar extends boolean = boolean, IsHidden extends boolean = boolean, IsSecret extends boolean = boolean, IsMap extends boolean = boolean, Metadata = {
96
110
  [key: string]: any;
97
111
  }> implements ConstantFieldBuildProps<FieldType, FieldValue, MapValue, Metadata> {
98
112
  static getBaseModelField(): FieldObject;
@@ -118,14 +132,21 @@ export declare class ConstantField<FieldType extends ConstantFieldKind = Constan
118
132
  readonly of?: MapValue;
119
133
  readonly validate?: (value: FieldValue, model: any) => boolean;
120
134
  readonly text?: "search" | "filter";
121
- readonly modelRef: ConstantCls;
135
+ readonly modelRef: ConstantModelRef;
122
136
  readonly arrDepth: number;
123
137
  readonly optArrDepth: number;
124
138
  readonly meta: Metadata;
139
+ _isScalar: IsScalar;
140
+ _isRelation: IsRelation;
141
+ _isEnum: IsEnum;
142
+ _isPrimitive: IsPrimitive;
143
+ _isHidden: IsHidden;
144
+ _isSecret: IsSecret;
145
+ _isMap: IsMap;
125
146
  constructor(props: ConstantFieldBuildProps<FieldType, FieldValue, MapValue, Metadata>);
126
- static fromFieldInfo<FieldType extends ConstantFieldKind = any, Value extends ConstantFieldTypeInput | null = null, FieldValue = any, MapValue = any, Nullable extends boolean = false, Metadata = {
147
+ static fromFieldInfo<FieldType extends ConstantFieldKind = any, Value extends ConstantFieldTypeInput | null = null, FieldValue = any, MapValue = any, Nullable extends boolean = IsNullableValue<FieldInfoValue<Value, FieldValue, MapValue>>, KindSource = FieldKindSource<Value>, IsRelation extends boolean = false, IsEnum extends boolean = false, IsPrimitive extends boolean = false, IsMap extends boolean = false, IsScalar extends boolean = false, IsHidden extends boolean = false, IsSecret extends boolean = false, Metadata = {
127
148
  [key: string]: any;
128
- }>(fieldInfo: FieldInfo<FieldType, Value, FieldValue, MapValue>): ConstantField<FieldType, Value, FieldValue, MapValue, Nullable, Metadata>;
149
+ }>(fieldInfo: FieldInfo<FieldType, Value, FieldValue, MapValue, KindSource, IsRelation, IsEnum, IsPrimitive, IsMap, IsScalar, IsHidden, IsSecret>): ConstantField<FieldType, Value, FieldValue, MapValue, Nullable, IsRelation, IsEnum, IsPrimitive, IsScalar, IsHidden, IsSecret, IsMap, Metadata>;
129
150
  get isClass(): boolean;
130
151
  get isScalar(): boolean;
131
152
  get isArray(): boolean;
@@ -143,12 +164,12 @@ type FieldOption<Value extends ConstantFieldTypeInput, MapValue = Value extends
143
164
  export type PlainTypeToFieldType<PlainType> = PlainType extends [infer First, ...infer Rest] ? PlainTypeToFieldType<First>[] : PlainType extends number ? typeof Int | typeof Float : PlainType extends string ? StringConstructor : typeof Any;
144
165
  /** Builds a stored property field with optional validation, default, ref, text, and metadata options. */
145
166
  export declare const field: {
146
- <ExplicitType, Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never>(value: Value, option?: FieldOption<Value, MapValue>): FieldInfo<"property", Value, ExplicitType, MapValue>;
147
- hidden<ExplicitType, Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never>(value: Value, option?: FieldOption<Value, MapValue>): FieldInfo<"hidden", Value | null, ExplicitType | null, MapValue>;
148
- secret<ExplicitType, Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never>(value: Value, option?: FieldOption<Value, MapValue>): FieldInfo<"secret", Value | null, ExplicitType | null, MapValue>;
167
+ <ExplicitType, Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never>(value: Value, option?: FieldOption<Value, MapValue>): FieldInfo<"property", Value, ExplicitType, MapValue, FieldKindSource<Value>, UnCls<FieldKindSource<Value>> extends BaseObject ? true : false, FieldKindSource<Value> extends infer T ? T extends FieldKindSource<Value> ? T extends EnumInstance<string, any> ? true : false : never : never, FieldKindSource<Value> extends infer T_1 ? T_1 extends FieldKindSource<Value> ? T_1 extends typeof PrimitiveScalar ? true : false : never : never, FieldKindSource<Value> extends infer T_2 ? T_2 extends FieldKindSource<Value> ? T_2 extends MapConstructor ? true : false : never : never, (UnCls<FieldKindSource<Value>> extends BaseObject ? true : false) extends infer T_3 ? T_3 extends (UnCls<FieldKindSource<Value>> extends BaseObject ? true : false) ? T_3 extends true ? false : (FieldKindSource<Value> extends infer T_4 ? T_4 extends FieldKindSource<Value> ? T_4 extends EnumInstance<string, any> ? true : false : never : never) extends infer T_5 ? T_5 extends (FieldKindSource<Value> extends infer T_12 ? T_12 extends FieldKindSource<Value> ? T_12 extends EnumInstance<string, any> ? true : false : never : never) ? T_5 extends true ? false : (FieldKindSource<Value> extends infer T_6 ? T_6 extends FieldKindSource<Value> ? T_6 extends typeof PrimitiveScalar ? true : false : never : never) extends infer T_7 ? T_7 extends (FieldKindSource<Value> extends infer T_11 ? T_11 extends FieldKindSource<Value> ? T_11 extends typeof PrimitiveScalar ? true : false : never : never) ? T_7 extends true ? false : (FieldKindSource<Value> extends infer T_8 ? T_8 extends FieldKindSource<Value> ? T_8 extends MapConstructor ? true : false : never : never) extends infer T_9 ? T_9 extends (FieldKindSource<Value> extends infer T_10 ? T_10 extends FieldKindSource<Value> ? T_10 extends MapConstructor ? true : false : never : never) ? T_9 extends true ? false : true : never : never : never : never : never : never : never : never, false, false>;
168
+ hidden<ExplicitType, Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never>(value: Value, option?: FieldOption<Value, MapValue>): FieldInfo<"hidden", Value | null, ExplicitType | null, MapValue, SingleValue<Value> & {}, UnCls<SingleValue<Value> & {}> extends BaseObject ? true : false, SingleValue<Value> & {} extends infer T ? T extends SingleValue<Value> & {} ? T extends EnumInstance<string, any> ? true : false : never : never, SingleValue<Value> & {} extends infer T_1 ? T_1 extends SingleValue<Value> & {} ? T_1 extends typeof PrimitiveScalar ? true : false : never : never, SingleValue<Value> & {} extends infer T_2 ? T_2 extends SingleValue<Value> & {} ? T_2 extends MapConstructor ? true : false : never : never, (UnCls<SingleValue<Value> & {}> extends BaseObject ? true : false) extends infer T_3 ? T_3 extends (UnCls<SingleValue<Value> & {}> extends BaseObject ? true : false) ? T_3 extends true ? false : (SingleValue<Value> & {} extends infer T_4 ? T_4 extends SingleValue<Value> & {} ? T_4 extends EnumInstance<string, any> ? true : false : never : never) extends infer T_5 ? T_5 extends (SingleValue<Value> & {} extends infer T_12 ? T_12 extends SingleValue<Value> & {} ? T_12 extends EnumInstance<string, any> ? true : false : never : never) ? T_5 extends true ? false : (SingleValue<Value> & {} extends infer T_6 ? T_6 extends SingleValue<Value> & {} ? T_6 extends typeof PrimitiveScalar ? true : false : never : never) extends infer T_7 ? T_7 extends (SingleValue<Value> & {} extends infer T_11 ? T_11 extends SingleValue<Value> & {} ? T_11 extends typeof PrimitiveScalar ? true : false : never : never) ? T_7 extends true ? false : (SingleValue<Value> & {} extends infer T_8 ? T_8 extends SingleValue<Value> & {} ? T_8 extends MapConstructor ? true : false : never : never) extends infer T_9 ? T_9 extends (SingleValue<Value> & {} extends infer T_10 ? T_10 extends SingleValue<Value> & {} ? T_10 extends MapConstructor ? true : false : never : never) ? T_9 extends true ? false : true : never : never : never : never : never : never : never : never, true, false>;
169
+ secret<ExplicitType, Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never>(value: Value, option?: FieldOption<Value, MapValue>): FieldInfo<"secret", Value | null, ExplicitType | null, MapValue, SingleValue<Value> & {}, UnCls<SingleValue<Value> & {}> extends BaseObject ? true : false, SingleValue<Value> & {} extends infer T ? T extends SingleValue<Value> & {} ? T extends EnumInstance<string, any> ? true : false : never : never, SingleValue<Value> & {} extends infer T_1 ? T_1 extends SingleValue<Value> & {} ? T_1 extends typeof PrimitiveScalar ? true : false : never : never, SingleValue<Value> & {} extends infer T_2 ? T_2 extends SingleValue<Value> & {} ? T_2 extends MapConstructor ? true : false : never : never, (UnCls<SingleValue<Value> & {}> extends BaseObject ? true : false) extends infer T_3 ? T_3 extends (UnCls<SingleValue<Value> & {}> extends BaseObject ? true : false) ? T_3 extends true ? false : (SingleValue<Value> & {} extends infer T_4 ? T_4 extends SingleValue<Value> & {} ? T_4 extends EnumInstance<string, any> ? true : false : never : never) extends infer T_5 ? T_5 extends (SingleValue<Value> & {} extends infer T_12 ? T_12 extends SingleValue<Value> & {} ? T_12 extends EnumInstance<string, any> ? true : false : never : never) ? T_5 extends true ? false : (SingleValue<Value> & {} extends infer T_6 ? T_6 extends SingleValue<Value> & {} ? T_6 extends typeof PrimitiveScalar ? true : false : never : never) extends infer T_7 ? T_7 extends (SingleValue<Value> & {} extends infer T_11 ? T_11 extends SingleValue<Value> & {} ? T_11 extends typeof PrimitiveScalar ? true : false : never : never) ? T_7 extends true ? false : (SingleValue<Value> & {} extends infer T_8 ? T_8 extends SingleValue<Value> & {} ? T_8 extends MapConstructor ? true : false : never : never) extends infer T_9 ? T_9 extends (SingleValue<Value> & {} extends infer T_10 ? T_10 extends SingleValue<Value> & {} ? T_10 extends MapConstructor ? true : false : never : never) ? T_9 extends true ? false : true : never : never : never : never : never : never : never : never, false, true>;
149
170
  };
150
171
  /** Builds a resolved field that is derived rather than treated as a stored property. */
151
- export declare const resolve: <ExplicitType, Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never>(value: Value, option?: FieldOption<Value, MapValue>) => FieldInfo<"resolve", Value, ExplicitType, MapValue>;
172
+ export declare const resolve: <ExplicitType, Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never>(value: Value, option?: FieldOption<Value, MapValue>) => FieldInfo<"resolve", Value, ExplicitType, MapValue, FieldKindSource<Value>, UnCls<FieldKindSource<Value>> extends BaseObject ? true : false, FieldKindSource<Value> extends infer T ? T extends FieldKindSource<Value> ? T extends EnumInstance<string, any> ? true : false : never : never, FieldKindSource<Value> extends infer T_1 ? T_1 extends FieldKindSource<Value> ? T_1 extends typeof PrimitiveScalar ? true : false : never : never, FieldKindSource<Value> extends infer T_2 ? T_2 extends FieldKindSource<Value> ? T_2 extends MapConstructor ? true : false : never : never, (UnCls<FieldKindSource<Value>> extends BaseObject ? true : false) extends infer T_3 ? T_3 extends (UnCls<FieldKindSource<Value>> extends BaseObject ? true : false) ? T_3 extends true ? false : (FieldKindSource<Value> extends infer T_4 ? T_4 extends FieldKindSource<Value> ? T_4 extends EnumInstance<string, any> ? true : false : never : never) extends infer T_5 ? T_5 extends (FieldKindSource<Value> extends infer T_12 ? T_12 extends FieldKindSource<Value> ? T_12 extends EnumInstance<string, any> ? true : false : never : never) ? T_5 extends true ? false : (FieldKindSource<Value> extends infer T_6 ? T_6 extends FieldKindSource<Value> ? T_6 extends typeof PrimitiveScalar ? true : false : never : never) extends infer T_7 ? T_7 extends (FieldKindSource<Value> extends infer T_11 ? T_11 extends FieldKindSource<Value> ? T_11 extends typeof PrimitiveScalar ? true : false : never : never) ? T_7 extends true ? false : (FieldKindSource<Value> extends infer T_8 ? T_8 extends FieldKindSource<Value> ? T_8 extends MapConstructor ? true : false : never : never) extends infer T_9 ? T_9 extends (FieldKindSource<Value> extends infer T_10 ? T_10 extends FieldKindSource<Value> ? T_10 extends MapConstructor ? true : false : never : never) ? T_9 extends true ? false : true : never : never : never : never : never : never : never : never, false, false>;
152
173
  export type FieldBuilder = typeof field;
153
174
  export type FieldResolver = typeof resolve;
154
175
  export {};
@@ -1,2 +1,2 @@
1
- import type { ConstantCls } from ".";
2
- export declare const immerify: <T extends object>(modelRef: ConstantCls, objOrArr: T) => T;
1
+ import type { ConstantModelRef } from ".";
2
+ export declare const immerify: <T extends object>(modelRef: ConstantModelRef, objOrArr: T) => T;
@@ -1,5 +1,5 @@
1
1
  import { type Dayjs, type GetStateObject, type Upload } from "akanjs/base";
2
- import { type BaseObject, type ConstantCls, type DefaultOf } from ".";
2
+ import { type BaseObject, type ConstantModelRef, type DefaultOf, type DefaultOfSchema } from ".";
3
3
  type Purified<O> = O extends BaseObject ? string : O extends BaseObject[] ? string[] : O extends Dayjs ? Dayjs : O extends object ? PurifiedModel<O> : O;
4
4
  type PurifiedWithObjectToId<T, StateKeys extends keyof GetStateObject<T> = keyof GetStateObject<T>> = {
5
5
  [K in StateKeys as null extends T[K] ? never : K]: Purified<T[K]>;
@@ -8,5 +8,6 @@ type PurifiedWithObjectToId<T, StateKeys extends keyof GetStateObject<T> = keyof
8
8
  };
9
9
  export type PurifiedModel<T> = T extends Upload[] ? FileList : T extends (infer S)[] ? PurifiedModel<S>[] : T extends string | number | boolean | Dayjs | File ? T : T extends Map<infer K, infer V> ? Map<K, PurifiedModel<V>> : PurifiedWithObjectToId<T>;
10
10
  export type PurifyFunc<Input, _DefaultInput = DefaultOf<Input>, _PurifiedInput = PurifiedModel<Input>> = (self: _DefaultInput, isChild?: boolean) => _PurifiedInput | null;
11
- export declare const makePurify: <I>(modelRef: ConstantCls<I>) => PurifyFunc<I>;
11
+ export type PurifyFuncV2<Input, RelationKey extends string = never, _DefaultInput = DefaultOfSchema<Input, RelationKey>, _PurifiedInput = PurifiedModel<Input>> = (self: _DefaultInput, isChild?: boolean) => _PurifiedInput | null;
12
+ export declare const makePurify: <I>(modelRef: ConstantModelRef<I>) => PurifyFunc<I>;
12
13
  export {};
@@ -1,11 +1,11 @@
1
1
  import { type Dayjs, type PrimitiveScalar } from "akanjs/base";
2
- import type { ConstantCls } from ".";
2
+ import type { ConstantModelRef } from ".";
3
3
  export type Serialized<O> = O extends (infer V)[] ? Serialized<V>[] : O extends Dayjs ? Date : O extends Map<infer K, infer V> ? {
4
4
  [key in K & string]: Serialized<V>;
5
5
  } : O extends object ? {
6
6
  [K in keyof O]: Serialized<O[K]>;
7
7
  } : O;
8
- export declare const serialize: (argRef: ConstantCls | PrimitiveScalar, arrDepth: number, value: unknown, serializeType: "input" | "object" | undefined, { nullable, key }: {
8
+ export declare const serialize: (argRef: ConstantModelRef | PrimitiveScalar, arrDepth: number, value: unknown, serializeType: "input" | "object" | undefined, { nullable, key }: {
9
9
  nullable?: boolean;
10
10
  key?: string;
11
11
  }) => object[] | null;
@@ -14,6 +14,9 @@ export type FieldState<T> = T extends {
14
14
  export type DefaultOf<S> = GetStateObject<{
15
15
  [K in keyof S]: FieldState<S[K]>;
16
16
  }>;
17
+ export type DefaultOfSchema<Schema, RelationKey = never> = [RelationKey] extends [never] ? Schema : {
18
+ [K in keyof Schema]: Schema[K] | (K extends RelationKey ? null : never);
19
+ };
17
20
  export type GetPlainObject<T, O extends string> = Omit<{
18
21
  [K in keyof T as T[K] extends (...args: never[]) => unknown ? never : K extends "set" | "save" | "refresh" ? never : K]: T[K];
19
22
  }, O>;
@@ -67,7 +70,9 @@ export declare const DEFAULT_PAGE_SIZE = 20;
67
70
  export interface TextDoc {
68
71
  [key: string]: string | TextDoc;
69
72
  }
70
- export type NonFunctionalKeys<T> = keyof T extends (...args: never[]) => unknown ? never : keyof T;
73
+ export type NonFunctionalKeys<T> = {
74
+ [K in keyof T]: T[K] extends (...args: never[]) => unknown ? never : K;
75
+ }[keyof T];
71
76
  export declare const unsetDate: Dayjs;
72
77
  export declare const MAX_INT = 2147483647;
73
78
  declare const Responsive_base: import("akanjs/base").EnumInstance<"responsive", "xl" | "lg" | "md" | "sm" | "xs">;
@@ -1,19 +1,70 @@
1
- import { type Cls, type EnumInstance, FIELD_META, type MergeAllKeyOfObjects, type MergeAllTypes } from "akanjs/base";
2
- import { ConstantField, type ExtractFieldInfoObject, type FieldBuilder, type FieldInfoObject, type FieldInfoObjectToFieldObject, type FieldObject, type FieldResolver } from "./fieldInfo.d.ts";
3
- import { type PurifyFunc } from "./purify.d.ts";
4
- import type { BaseInsight, BaseObject, ConstantType, DefaultOf, NonFunctionalKeys } from "./types.d.ts";
1
+ import { CLIENT_VALUE, type Cls, DEFAULT_VALUE, type EnumInstance, FIELD_META, type ObjectAssign, type ObjectAssignKeyOfObjects, PURIFIED_VALUE, SERVER_VALUE } from "akanjs/base";
2
+ import { type ExtractFieldInfoObject, type FieldBuilder, type FieldInfoObject, type FieldInfoObjectToFieldObject, type FieldObject, type FieldResolver } from "./fieldInfo.d.ts";
3
+ import { type PurifiedModel, type PurifyFunc } from "./purify.d.ts";
4
+ import type { BaseInsight, BaseObject, ConstantType, DefaultOf, DefaultOfSchema, NonFunctionalKeys } from "./types.d.ts";
5
5
  type BaseFields = "id" | "createdAt" | "updatedAt" | "removedAt";
6
6
  type OmitBase<T> = Omit<T, BaseFields>;
7
+ type MergeOwnSchemas<Models extends object[]> = ObjectAssignKeyOfObjects<Models, "_OwnSchema">;
8
+ type MergeOwnFieldObjects<Models extends object[]> = ObjectAssignKeyOfObjects<Models, "_OwnFieldObj">;
9
+ type MergeWithOwnSchemas<Models extends object[], OwnSchema extends object> = ObjectAssign<[
10
+ MergeOwnSchemas<Models>,
11
+ OwnSchema
12
+ ]>;
13
+ type MergeWithOwnFieldObjects<Models extends object[], OwnFieldObj extends object> = ObjectAssign<[
14
+ MergeOwnFieldObjects<Models>,
15
+ OwnFieldObj
16
+ ]>;
17
+ type BuiltSchema<BuildField extends (builder: FieldBuilder) => FieldInfoObject> = ExtractFieldInfoObject<ReturnType<BuildField>>;
18
+ type BuiltFieldObject<BuildField extends (builder: FieldBuilder) => FieldInfoObject> = FieldInfoObjectToFieldObject<ReturnType<BuildField>>;
19
+ type ResolvedSchema<ResolveField extends (resolve: FieldResolver) => FieldInfoObject> = ExtractFieldInfoObject<ReturnType<ResolveField>>;
20
+ type ResolvedFieldObject<ResolveField extends (resolve: FieldResolver) => FieldInfoObject> = FieldInfoObjectToFieldObject<ReturnType<ResolveField>>;
21
+ type ConstantSetReturn<Self, Schema> = Self extends Schema & ConstantMethods<Schema> & infer Model ? unknown extends Model ? Self : Model : Self;
7
22
  export interface ConstantMethods<Schema = any> {
8
- set: (obj: Partial<Schema>) => this;
23
+ set<Self extends Schema & ConstantMethods<Schema>>(this: Self, obj: Partial<Schema>): ConstantSetReturn<Self, Schema>;
9
24
  }
10
- export interface ConstantStatics<Schema = any, FieldObj extends FieldObject = FieldObject> {
25
+ type DatabaseSchemaOf<Schema, HiddenKey> = {
26
+ [K in keyof Schema]: K extends HiddenKey ? NonNullable<Schema[K]> : Schema[K];
27
+ };
28
+ export interface ConstantStatics<Schema = any, OwnSchema = Schema, OwnFieldObj extends FieldObject = FieldObject, OptionalKey = never, RelationKey = never, PrimitiveKey = never, ScalarKey = never, EnumKey = never, MapKey = never, HiddenKey = never, SecretKey = never, ModelType extends ConstantType = ConstantType> {
29
+ [FIELD_META]: FieldObject;
30
+ getDefault: () => DefaultOfSchema<Schema, RelationKey>;
31
+ purify: PurifyFunc<Schema>;
32
+ modelType: ConstantType;
33
+ children: Set<ConstantModelRef>;
34
+ relations: Set<ConstantModelRef>;
35
+ enums: Set<EnumInstance>;
36
+ text: {
37
+ search: Set<string>;
38
+ filter: Set<string>;
39
+ children: {
40
+ search: Set<string>;
41
+ filter: Set<string>;
42
+ };
43
+ };
44
+ _OptionalKey: OptionalKey;
45
+ _RelationKey: RelationKey;
46
+ _PrimitiveKey: PrimitiveKey;
47
+ _ScalarKey: ScalarKey;
48
+ _EnumKey: EnumKey;
49
+ _MapKey: MapKey;
50
+ _HiddenKey: HiddenKey;
51
+ _SecretKey: SecretKey;
52
+ _OwnSchema: OwnSchema;
53
+ _OwnFieldObj: OwnFieldObj;
54
+ _DatabaseSchema: DatabaseSchemaOf<Schema, HiddenKey>;
55
+ _ModelType: ModelType;
56
+ [SERVER_VALUE]: Schema;
57
+ [CLIENT_VALUE]: Schema;
58
+ [DEFAULT_VALUE]: DefaultOfSchema<Schema, RelationKey>;
59
+ [PURIFIED_VALUE]: PurifiedModel<Schema>;
60
+ }
61
+ export interface DatabaseConstantStatics<Schema = any, FieldObj extends FieldObject = FieldObject> {
11
62
  [FIELD_META]: FieldObj;
12
63
  getDefault: () => DefaultOf<Schema>;
13
64
  purify: PurifyFunc<Schema>;
14
65
  modelType: ConstantType;
15
- children: Set<ConstantCls>;
16
- relations: Set<ConstantCls>;
66
+ children: Set<ConstantModelRef>;
67
+ relations: Set<ConstantModelRef>;
17
68
  enums: Set<EnumInstance>;
18
69
  text: {
19
70
  search: Set<string>;
@@ -24,32 +75,102 @@ export interface ConstantStatics<Schema = any, FieldObj extends FieldObject = Fi
24
75
  };
25
76
  };
26
77
  _DatabaseSchema: {
27
- [K in keyof Schema]: K extends keyof FieldObj ? FieldObj[K] extends ConstantField<infer FieldType, any, any, any, any, any> ? FieldType extends "hidden" ? NonNullable<Schema[K]> : Schema[K] : Schema[K] : Schema[K];
78
+ [K in keyof Schema]: K extends keyof FieldObj ? FieldObj[K]["fieldType"] extends "hidden" ? NonNullable<Schema[K]> : Schema[K] : Schema[K];
28
79
  };
29
80
  }
30
- export type ConstantCls<Schema = any, FieldObj extends FieldObject = FieldObject> = (new (obj?: Partial<Schema>) => Schema & ConstantMethods<Schema>) & ConstantStatics<Schema, FieldObj>;
81
+ export type ConstantModelRef<Schema = any, FieldObj extends FieldObject = FieldObject, ModelType extends ConstantType = ConstantType> = Cls<Schema, {
82
+ [FIELD_META]: FieldObj;
83
+ modelType: ModelType;
84
+ children: Set<ConstantModelRef>;
85
+ relations: Set<ConstantModelRef>;
86
+ enums: Set<EnumInstance>;
87
+ text: {
88
+ search: Set<string>;
89
+ filter: Set<string>;
90
+ children: {
91
+ search: Set<string>;
92
+ filter: Set<string>;
93
+ };
94
+ };
95
+ }>;
96
+ export type DocumentConstantModelRef<Schema = any, FieldObj extends FieldObject = FieldObject, ModelType extends ConstantType = ConstantType, DatabaseSchema = DatabaseSchemaOf<Schema, never>> = Cls<Schema, {
97
+ [FIELD_META]: FieldObj;
98
+ modelType: ModelType;
99
+ _DatabaseSchema: DatabaseSchema;
100
+ _ModelType: ModelType;
101
+ }>;
102
+ type FieldFlag = "nullable" | "_isRelation" | "_isPrimitive" | "_isScalar" | "_isEnum" | "_isHidden" | "_isSecret" | "_isMap";
103
+ type TrueFieldFlag<Flag extends FieldFlag> = {
104
+ readonly [K in Flag]: true;
105
+ };
106
+ type KeysByFlag<FieldObj extends FieldObject, Flag extends FieldFlag> = {
107
+ [K in keyof FieldObj]: FieldObj[K] extends TrueFieldFlag<Flag> ? K : never;
108
+ }[keyof FieldObj];
109
+ type OptionalKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "nullable">;
110
+ type RelationKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isRelation">;
111
+ type PrimitiveKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isPrimitive">;
112
+ type ScalarKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isScalar">;
113
+ type EnumKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isEnum">;
114
+ type HiddenKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isHidden">;
115
+ type SecretKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isSecret">;
116
+ type MapKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isMap">;
117
+ type ConstantKeyChannelMap = {
118
+ optional: unknown;
119
+ relation: unknown;
120
+ primitive: unknown;
121
+ scalar: unknown;
122
+ enum: unknown;
123
+ map: unknown;
124
+ hidden: unknown;
125
+ secret: unknown;
126
+ };
127
+ type IsBroadFieldObject<FieldObj extends FieldObject> = string extends keyof FieldObj ? true : false;
128
+ type ConstantKeyChannels<FieldObj extends FieldObject> = IsBroadFieldObject<FieldObj> extends true ? {
129
+ optional: never;
130
+ relation: never;
131
+ primitive: never;
132
+ scalar: never;
133
+ enum: never;
134
+ map: never;
135
+ hidden: never;
136
+ secret: never;
137
+ } : {
138
+ optional: OptionalKeys<FieldObj>;
139
+ relation: RelationKeys<FieldObj>;
140
+ primitive: PrimitiveKeys<FieldObj>;
141
+ scalar: ScalarKeys<FieldObj>;
142
+ enum: EnumKeys<FieldObj>;
143
+ map: MapKeys<FieldObj>;
144
+ hidden: HiddenKeys<FieldObj>;
145
+ secret: SecretKeys<FieldObj>;
146
+ };
147
+ export type ConstantCls<Schema = any, FieldObj extends FieldObject = FieldObject, OwnSchema = Schema, OwnFieldObj extends FieldObject = FieldObj, ModelType extends ConstantType = ConstantType, _Channels extends ConstantKeyChannelMap = ConstantKeyChannels<FieldObj>> = (new (obj?: Partial<Schema>) => Schema & ConstantMethods<Schema>) & ConstantStatics<Schema, OwnSchema, OwnFieldObj, _Channels["optional"], _Channels["relation"], _Channels["primitive"], _Channels["scalar"], _Channels["enum"], _Channels["map"], _Channels["hidden"], _Channels["secret"], ModelType>;
31
148
  declare global {
32
- interface DateConstructor extends ConstantStatics<unknown> {
149
+ interface DateConstructor extends DatabaseConstantStatics<unknown> {
33
150
  }
34
- interface StringConstructor extends ConstantStatics<unknown> {
151
+ interface StringConstructor extends DatabaseConstantStatics<unknown> {
35
152
  }
36
- interface BooleanConstructor extends ConstantStatics<unknown> {
153
+ interface BooleanConstructor extends DatabaseConstantStatics<unknown> {
37
154
  }
38
- interface MapConstructor extends ConstantStatics<unknown> {
155
+ interface MapConstructor extends DatabaseConstantStatics<unknown> {
39
156
  }
40
157
  }
41
158
  /** Builds Akan constant models such as scalar, input, object, light, full, and insight classes. */
42
- export declare function via<Obj extends BaseObject, ObjFieldObj extends FieldObject, K extends NonFunctionalKeys<OmitBase<Obj>>, ResolveField extends (resolve: FieldResolver) => FieldInfoObject, LightModels extends Cls[], _Schema = MergeAllTypes<LightModels> & Pick<Obj, K> & BaseObject & ExtractFieldInfoObject<ReturnType<ResolveField>>, _FieldObj extends FieldObject = MergeAllKeyOfObjects<LightModels, typeof FIELD_META> & Pick<ObjFieldObj, K & keyof ObjFieldObj> & FieldInfoObjectToFieldObject<ReturnType<ResolveField>>>(modelRef: Cls<Obj, {
159
+ export declare function via<Obj extends BaseObject, ObjFieldObj extends FieldObject, K extends NonFunctionalKeys<OmitBase<Obj>>, ResolveField extends (resolve: FieldResolver) => FieldInfoObject, LightModels extends Cls[], _DirectSchema extends object = ObjectAssign<[Pick<Obj, K> & BaseObject, ResolvedSchema<ResolveField>]>, _Schema extends object = MergeWithOwnSchemas<LightModels, _DirectSchema>, _DirectFieldObj extends FieldObject = ObjectAssign<[
160
+ Pick<ObjFieldObj, K & keyof ObjFieldObj>,
161
+ ResolvedFieldObject<ResolveField>
162
+ ]>, _FieldObj extends FieldObject = MergeWithOwnFieldObjects<LightModels, _DirectFieldObj> & FieldObject>(modelRef: Cls<Obj, {
43
163
  [FIELD_META]: ObjFieldObj;
44
- }>, fields: readonly K[], resolveField: ResolveField, ...lightModelRefs: LightModels): ConstantCls<_Schema, _FieldObj>;
45
- export declare function via<BuildField extends (builder: FieldBuilder) => FieldInfoObject, Inputs extends Cls[], _Schema = MergeAllTypes<Inputs> & ExtractFieldInfoObject<ReturnType<BuildField>>, _FieldObj extends FieldObject = MergeAllKeyOfObjects<Inputs, typeof FIELD_META> & FieldInfoObjectToFieldObject<ReturnType<BuildField>>>(buildField: BuildField, ...extendInputRefs: Inputs): ConstantCls<_Schema, _FieldObj>;
46
- export declare function via<Full extends BaseObject, BuildField extends (builder: FieldBuilder) => FieldInfoObject, Insights extends Cls[], _Schema = MergeAllTypes<Insights> & BaseInsight & ExtractFieldInfoObject<ReturnType<BuildField>>, _FieldObj extends FieldObject = MergeAllKeyOfObjects<Insights, typeof FIELD_META> & FieldInfoObjectToFieldObject<ReturnType<BuildField>>>(modelRef: Cls<Full>, buildField: BuildField, ...extendInsightRefs: Insights): ConstantCls<_Schema, _FieldObj>;
47
- export declare function via<Input, InputFieldObj extends FieldObject, BuildField extends (builder: FieldBuilder) => FieldInfoObject, ObjectModels extends Cls[], _Schema = MergeAllTypes<ObjectModels> & Input & BaseObject & ExtractFieldInfoObject<ReturnType<BuildField>>, _FieldObj extends FieldObject = MergeAllKeyOfObjects<ObjectModels, typeof FIELD_META> & InputFieldObj & FieldInfoObjectToFieldObject<ReturnType<BuildField>>>(inputRef: Cls<Input, {
164
+ }>, fields: readonly K[], resolveField: ResolveField, ...lightModelRefs: LightModels): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "light">;
165
+ export declare function via<BuildField extends (builder: FieldBuilder) => FieldInfoObject, _DirectSchema extends object = BuiltSchema<BuildField>, _DirectFieldObj extends FieldObject = BuiltFieldObject<BuildField>>(buildField: BuildField): ConstantCls<_DirectSchema, _DirectFieldObj, _DirectSchema, _DirectFieldObj, "input" | "scalar">;
166
+ export declare function via<BuildField extends (builder: FieldBuilder) => FieldInfoObject, FirstInput extends Cls, Inputs extends Cls[], _DirectSchema extends object = BuiltSchema<BuildField>, _InputRefs extends Cls[] = [FirstInput, ...Inputs], _Schema extends object = MergeWithOwnSchemas<_InputRefs, _DirectSchema>, _DirectFieldObj extends FieldObject = BuiltFieldObject<BuildField>, _FieldObj extends FieldObject = MergeWithOwnFieldObjects<_InputRefs, _DirectFieldObj> & FieldObject>(buildField: BuildField, firstExtendInputRef: FirstInput, ...extendInputRefs: Inputs): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "input">;
167
+ export declare function via<Full extends BaseObject, BuildField extends (builder: FieldBuilder) => FieldInfoObject, Insights extends Cls[], _DirectSchema extends object = ObjectAssign<[BaseInsight, BuiltSchema<BuildField>]>, _Schema extends object = MergeWithOwnSchemas<Insights, _DirectSchema>, _DirectFieldObj extends FieldObject = BuiltFieldObject<BuildField>, _FieldObj extends FieldObject = MergeWithOwnFieldObjects<Insights, _DirectFieldObj> & FieldObject>(modelRef: Cls<Full>, buildField: BuildField, ...extendInsightRefs: Insights): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "insight">;
168
+ export declare function via<Input, InputFieldObj extends FieldObject, BuildField extends (builder: FieldBuilder) => FieldInfoObject, ObjectModels extends Cls[], _DirectSchema extends object = ObjectAssign<[Input & object, BaseObject, BuiltSchema<BuildField>]>, _Schema extends object = MergeWithOwnSchemas<ObjectModels, _DirectSchema>, _DirectFieldObj extends FieldObject = ObjectAssign<[InputFieldObj, BuiltFieldObject<BuildField>]>, _FieldObj extends FieldObject = MergeWithOwnFieldObjects<ObjectModels, _DirectFieldObj> & FieldObject>(inputRef: Cls<Input, {
48
169
  [FIELD_META]: InputFieldObj;
49
- }>, buildField: BuildField, ...extendObjectRefs: ObjectModels): ConstantCls<_Schema, _FieldObj>;
50
- export declare function via<Obj, ObjFieldObj extends FieldObject, Light, LightFieldObj extends FieldObject, ResolveField extends (resolve: FieldResolver) => FieldInfoObject, FullModels extends Cls[], _Schema = MergeAllTypes<FullModels> & Obj & Light & ExtractFieldInfoObject<ReturnType<ResolveField>>, _FieldObj extends FieldObject = MergeAllKeyOfObjects<FullModels, typeof FIELD_META> & ObjFieldObj & LightFieldObj & FieldInfoObjectToFieldObject<ReturnType<ResolveField>>>(objectRef: Cls<Obj, {
170
+ }>, buildField: BuildField, ...extendObjectRefs: ObjectModels): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "object">;
171
+ export declare function via<Obj, ObjFieldObj extends FieldObject, Light, LightFieldObj extends FieldObject, ResolveField extends (resolve: FieldResolver) => FieldInfoObject, FullModels extends Cls[], _DirectSchema extends object = ObjectAssign<[Obj & object, Light & object, ResolvedSchema<ResolveField>]>, _Schema extends object = MergeWithOwnSchemas<FullModels, _DirectSchema>, _DirectFieldObj extends FieldObject = ObjectAssign<[ObjFieldObj, LightFieldObj, ResolvedFieldObject<ResolveField>]>, _FieldObj extends FieldObject = MergeWithOwnFieldObjects<FullModels, _DirectFieldObj> & FieldObject>(objectRef: Cls<Obj, {
51
172
  [FIELD_META]: ObjFieldObj;
52
173
  }>, lightModelRef: Cls<Light, {
53
174
  [FIELD_META]: LightFieldObj;
54
- }>, resolveField: ResolveField, ...fullModelRefs: FullModels): ConstantCls<_Schema, _FieldObj>;
175
+ }>, resolveField: ResolveField, ...fullModelRefs: FullModels): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "full">;
55
176
  export {};