akanjs 2.3.5-rc.8 → 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.
- package/base/base.ts +6 -2
- package/base/primitiveRegistry.ts +50 -46
- package/base/symbols.ts +16 -11
- package/base/types.ts +12 -0
- package/constant/constantRegistry.ts +10 -9
- package/constant/deserialize.ts +7 -7
- package/constant/fieldInfo.ts +173 -31
- package/constant/getDefault.ts +2 -2
- package/constant/immerify.ts +2 -2
- package/constant/purify.ts +19 -4
- package/constant/serialize.ts +6 -5
- package/constant/types.ts +9 -1
- package/constant/via.ts +312 -57
- package/dictionary/dictInfo.ts +28 -38
- package/dictionary/locale.ts +36 -38
- package/document/by.ts +84 -21
- package/document/database.ts +53 -18
- package/document/databaseRegistry.ts +7 -3
- package/document/filterMeta.ts +26 -14
- package/document/into.ts +71 -76
- package/document/types.ts +4 -2
- package/fetch/fetchType/endpointFetch.type.ts +6 -3
- package/fetch/fetchType/sliceFetch.type.ts +24 -13
- package/package.json +1 -1
- package/service/predefinedAdaptor/compress.adaptor.ts +9 -9
- package/service/predefinedAdaptor/database.adaptor.ts +3 -7
- package/service/serve.ts +17 -52
- package/service/types.ts +61 -21
- package/signal/endpoint.ts +2 -1
- package/signal/endpointInfo.ts +53 -23
- package/signal/internal.ts +2 -1
- package/signal/internalInfo.ts +71 -23
- package/signal/serverSignal.ts +23 -57
- package/signal/slice.ts +35 -35
- package/signal/sliceInfo.ts +63 -47
- package/signal/types.ts +23 -17
- package/store/action.ts +57 -44
- package/store/state.ts +47 -36
- package/store/stateBuilder.ts +3 -3
- package/store/store.ts +61 -15
- package/store/types.ts +16 -6
- package/types/base/base.d.ts +5 -1
- package/types/base/primitiveRegistry.d.ts +43 -38
- package/types/base/symbols.d.ts +5 -0
- package/types/base/types.d.ts +1 -0
- package/types/constant/constantRegistry.d.ts +3 -8
- package/types/constant/deserialize.d.ts +2 -2
- package/types/constant/fieldInfo.d.ts +41 -20
- package/types/constant/immerify.d.ts +2 -2
- package/types/constant/purify.d.ts +3 -2
- package/types/constant/serialize.d.ts +2 -2
- package/types/constant/types.d.ts +6 -1
- package/types/constant/via.d.ts +143 -22
- package/types/dictionary/dictInfo.d.ts +18 -11
- package/types/dictionary/locale.d.ts +23 -16
- package/types/document/by.d.ts +44 -7
- package/types/document/database.d.ts +9 -7
- package/types/document/databaseRegistry.d.ts +5 -4
- package/types/document/filterMeta.d.ts +18 -11
- package/types/document/into.d.ts +46 -19
- package/types/document/types.d.ts +3 -2
- package/types/fetch/fetchType/endpointFetch.type.d.ts +2 -2
- package/types/fetch/fetchType/sliceFetch.type.d.ts +11 -11
- package/types/service/serve.d.ts +4 -5
- package/types/service/serviceModule.d.ts +5 -5
- package/types/service/types.d.ts +23 -5
- package/types/signal/endpoint.d.ts +2 -1
- package/types/signal/endpointInfo.d.ts +40 -15
- package/types/signal/internal.d.ts +2 -1
- package/types/signal/internalInfo.d.ts +46 -12
- package/types/signal/serverSignal.d.ts +15 -12
- package/types/signal/slice.d.ts +8 -6
- package/types/signal/sliceInfo.d.ts +41 -20
- package/types/signal/types.d.ts +23 -17
- package/types/store/action.d.ts +25 -22
- package/types/store/baseSt.d.ts +42 -13
- package/types/store/state.d.ts +23 -26
- package/types/store/stateBuilder.d.ts +2 -2
- package/types/store/store.d.ts +17 -5
- package/types/store/types.d.ts +9 -3
- package/ui/Signal/makeExample.ts +3 -3
package/constant/via.ts
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
CLIENT_VALUE,
|
|
3
|
+
type Cls,
|
|
4
|
+
DEFAULT_VALUE,
|
|
5
|
+
type EnumInstance,
|
|
6
|
+
FIELD_META,
|
|
7
|
+
type ObjectAssign,
|
|
8
|
+
type ObjectAssignKeyOfObjects,
|
|
9
|
+
PURIFIED_VALUE,
|
|
10
|
+
SERVER_VALUE,
|
|
11
|
+
} from "akanjs/base";
|
|
2
12
|
import { applyMixins } from "akanjs/common";
|
|
3
13
|
import { immerable } from "immer";
|
|
4
14
|
|
|
@@ -15,22 +25,44 @@ import {
|
|
|
15
25
|
field,
|
|
16
26
|
resolve,
|
|
17
27
|
} from "./fieldInfo";
|
|
18
|
-
import { makePurify, type PurifyFunc } from "./purify";
|
|
19
|
-
import type { BaseInsight, BaseObject, ConstantType, DefaultOf, NonFunctionalKeys } from "./types";
|
|
28
|
+
import { makePurify, type PurifiedModel, type PurifyFunc } from "./purify";
|
|
29
|
+
import type { BaseInsight, BaseObject, ConstantType, DefaultOf, DefaultOfSchema, NonFunctionalKeys } from "./types";
|
|
20
30
|
|
|
21
31
|
type BaseFields = "id" | "createdAt" | "updatedAt" | "removedAt";
|
|
22
32
|
type WithBase<T> = T & BaseObject;
|
|
23
33
|
type OmitBase<T> = Omit<T, BaseFields>;
|
|
24
34
|
type Merge<A, B> = B & Omit<A, keyof B>;
|
|
35
|
+
type MergeOwnSchemas<Models extends object[]> = ObjectAssignKeyOfObjects<Models, "_OwnSchema">;
|
|
36
|
+
type MergeOwnFieldObjects<Models extends object[]> = ObjectAssignKeyOfObjects<Models, "_OwnFieldObj">;
|
|
37
|
+
type MergeWithOwnSchemas<Models extends object[], OwnSchema extends object> = ObjectAssign<
|
|
38
|
+
[MergeOwnSchemas<Models>, OwnSchema]
|
|
39
|
+
>;
|
|
40
|
+
type MergeWithOwnFieldObjects<Models extends object[], OwnFieldObj extends object> = ObjectAssign<
|
|
41
|
+
[MergeOwnFieldObjects<Models>, OwnFieldObj]
|
|
42
|
+
>;
|
|
43
|
+
type BuiltSchema<BuildField extends (builder: FieldBuilder) => FieldInfoObject> = ExtractFieldInfoObject<
|
|
44
|
+
ReturnType<BuildField>
|
|
45
|
+
>;
|
|
46
|
+
type BuiltFieldObject<BuildField extends (builder: FieldBuilder) => FieldInfoObject> = FieldInfoObjectToFieldObject<
|
|
47
|
+
ReturnType<BuildField>
|
|
48
|
+
>;
|
|
49
|
+
type ResolvedSchema<ResolveField extends (resolve: FieldResolver) => FieldInfoObject> = ExtractFieldInfoObject<
|
|
50
|
+
ReturnType<ResolveField>
|
|
51
|
+
>;
|
|
52
|
+
type ResolvedFieldObject<ResolveField extends (resolve: FieldResolver) => FieldInfoObject> =
|
|
53
|
+
FieldInfoObjectToFieldObject<ReturnType<ResolveField>>;
|
|
25
54
|
|
|
26
|
-
const objectModelOf = <T>(
|
|
55
|
+
const objectModelOf = <T>(
|
|
56
|
+
inputRef: ConstantCls<T>,
|
|
57
|
+
fieldMap: FieldInfoObject,
|
|
58
|
+
): ConstantCls<WithBase<T>, FieldObject, WithBase<T>, FieldObject, "object"> => {
|
|
27
59
|
const fieldObject = Object.fromEntries(Object.entries(fieldMap).map(([key, field]) => [key, field.toField()]));
|
|
28
60
|
const applyFieldObject = { ...inputRef[FIELD_META], ...fieldObject };
|
|
29
61
|
const field = Object.assign(ConstantField.getBaseModelField(), applyFieldObject);
|
|
30
62
|
const baseObjectModelRef = getBaseConstantClass(field);
|
|
31
63
|
applyConstantStatics(baseObjectModelRef, applyFieldObject);
|
|
32
64
|
baseObjectModelRef.modelType = "object";
|
|
33
|
-
return baseObjectModelRef as unknown as
|
|
65
|
+
return baseObjectModelRef as unknown as ConstantCls<WithBase<T>, FieldObject, WithBase<T>, FieldObject, "object">;
|
|
34
66
|
};
|
|
35
67
|
|
|
36
68
|
const lightModelOf = <T, F extends keyof OmitBase<T>>(
|
|
@@ -38,7 +70,13 @@ const lightModelOf = <T, F extends keyof OmitBase<T>>(
|
|
|
38
70
|
fields: readonly F[],
|
|
39
71
|
fieldMap: FieldInfoObject,
|
|
40
72
|
...libLightModelRefs: ConstantCls[]
|
|
41
|
-
):
|
|
73
|
+
): ConstantCls<
|
|
74
|
+
Pick<OmitBase<T>, F> & BaseObject,
|
|
75
|
+
FieldObject,
|
|
76
|
+
Pick<OmitBase<T>, F> & BaseObject,
|
|
77
|
+
FieldObject,
|
|
78
|
+
"light"
|
|
79
|
+
> => {
|
|
42
80
|
const libLightModelRef = libLightModelRefs.at(0);
|
|
43
81
|
const applyFieldObject = {
|
|
44
82
|
...Object.fromEntries(Object.entries(fieldMap).map(([key, field]) => [key, field.toField()])),
|
|
@@ -49,7 +87,13 @@ const lightModelOf = <T, F extends keyof OmitBase<T>>(
|
|
|
49
87
|
applyConstantStatics(baseLightModelRef, applyFieldObject);
|
|
50
88
|
applyMixins(baseLightModelRef, libLightModelRefs);
|
|
51
89
|
baseLightModelRef.modelType = "light";
|
|
52
|
-
return baseLightModelRef as unknown as
|
|
90
|
+
return baseLightModelRef as unknown as ConstantCls<
|
|
91
|
+
Pick<OmitBase<T>, F> & BaseObject,
|
|
92
|
+
FieldObject,
|
|
93
|
+
Pick<OmitBase<T>, F> & BaseObject,
|
|
94
|
+
FieldObject,
|
|
95
|
+
"light"
|
|
96
|
+
>;
|
|
53
97
|
};
|
|
54
98
|
|
|
55
99
|
const fullModelOf = <A, B = undefined>(
|
|
@@ -57,7 +101,7 @@ const fullModelOf = <A, B = undefined>(
|
|
|
57
101
|
lightRef: ConstantCls<B>,
|
|
58
102
|
fieldMap: FieldInfoObject,
|
|
59
103
|
...libFullModelRefs: ConstantCls[]
|
|
60
|
-
):
|
|
104
|
+
): ConstantCls<Merge<A, B>, FieldObject, Merge<A, B>, FieldObject, "full"> => {
|
|
61
105
|
const fullRef = libFullModelRefs.at(0) ?? getBaseConstantClass(ConstantField.getBaseModelField());
|
|
62
106
|
const applyFieldObject = {
|
|
63
107
|
...objectRef[FIELD_META],
|
|
@@ -72,26 +116,38 @@ const fullModelOf = <A, B = undefined>(
|
|
|
72
116
|
|
|
73
117
|
applyConstantStatics(fullRef, applyFieldObject);
|
|
74
118
|
fullRef.modelType = "full";
|
|
75
|
-
return fullRef as unknown as
|
|
119
|
+
return fullRef as unknown as ConstantCls<Merge<A, B>, FieldObject, Merge<A, B>, FieldObject, "full">;
|
|
76
120
|
};
|
|
77
121
|
|
|
78
122
|
const extendModelInputs = <T extends ConstantCls[]>(
|
|
79
123
|
fieldMap: FieldInfoObject,
|
|
80
124
|
...libInputModelRefs: T
|
|
81
|
-
):
|
|
125
|
+
): ConstantCls<MergeOwnSchemas<T>, FieldObject, MergeOwnSchemas<T>, FieldObject, "input"> => {
|
|
82
126
|
const baseInputModelRef = libInputModelRefs.at(0);
|
|
83
127
|
const applyFieldObject = Object.fromEntries(Object.entries(fieldMap).map(([key, field]) => [key, field.toField()]));
|
|
84
128
|
const fieldObject = Object.assign(baseInputModelRef?.[FIELD_META] ?? {}, applyFieldObject);
|
|
85
129
|
const baseInputRef = getBaseConstantClass(fieldObject);
|
|
86
130
|
applyConstantStatics(baseInputRef, applyFieldObject);
|
|
87
|
-
return baseInputRef as unknown as
|
|
131
|
+
return baseInputRef as unknown as ConstantCls<
|
|
132
|
+
MergeOwnSchemas<T>,
|
|
133
|
+
FieldObject,
|
|
134
|
+
MergeOwnSchemas<T>,
|
|
135
|
+
FieldObject,
|
|
136
|
+
"input"
|
|
137
|
+
>;
|
|
88
138
|
};
|
|
89
139
|
|
|
90
140
|
const extendModelObjects = <Input, ObjectModels extends ConstantCls[]>(
|
|
91
141
|
inputRef: ConstantCls<Input>,
|
|
92
142
|
fieldMap: FieldInfoObject,
|
|
93
143
|
...libObjectModelRefs: ObjectModels
|
|
94
|
-
):
|
|
144
|
+
): ConstantCls<
|
|
145
|
+
MergeWithOwnSchemas<ObjectModels, Input & object>,
|
|
146
|
+
FieldObject,
|
|
147
|
+
MergeWithOwnSchemas<ObjectModels, Input & object>,
|
|
148
|
+
FieldObject,
|
|
149
|
+
"object"
|
|
150
|
+
> => {
|
|
95
151
|
const baseObjectModelRef = libObjectModelRefs.at(0);
|
|
96
152
|
const applyFieldObject = {
|
|
97
153
|
...inputRef[FIELD_META],
|
|
@@ -100,13 +156,19 @@ const extendModelObjects = <Input, ObjectModels extends ConstantCls[]>(
|
|
|
100
156
|
const field = Object.assign(baseObjectModelRef?.[FIELD_META] ?? {}, applyFieldObject);
|
|
101
157
|
const baseInputRef = getBaseConstantClass(field, "object");
|
|
102
158
|
applyConstantStatics(baseInputRef, applyFieldObject);
|
|
103
|
-
return baseInputRef as unknown as
|
|
159
|
+
return baseInputRef as unknown as ConstantCls<
|
|
160
|
+
MergeWithOwnSchemas<ObjectModels, Input & object>,
|
|
161
|
+
FieldObject,
|
|
162
|
+
MergeWithOwnSchemas<ObjectModels, Input & object>,
|
|
163
|
+
FieldObject,
|
|
164
|
+
"object"
|
|
165
|
+
>;
|
|
104
166
|
};
|
|
105
167
|
|
|
106
168
|
const extendModelInsights = <InsightModels extends ConstantCls[]>(
|
|
107
169
|
fieldMap: FieldInfoObject,
|
|
108
170
|
...insightModelRefs: InsightModels
|
|
109
|
-
):
|
|
171
|
+
): ConstantCls<MergeOwnSchemas<InsightModels>, FieldObject, MergeOwnSchemas<InsightModels>, FieldObject, "insight"> => {
|
|
110
172
|
const baseInsightModelRef = insightModelRefs.at(0);
|
|
111
173
|
const applyFieldObject = Object.fromEntries(Object.entries(fieldMap).map(([key, field]) => [key, field.toField()]));
|
|
112
174
|
const field = Object.assign(
|
|
@@ -116,7 +178,13 @@ const extendModelInsights = <InsightModels extends ConstantCls[]>(
|
|
|
116
178
|
const baseInsightRef = getBaseConstantClass(field, "insight");
|
|
117
179
|
|
|
118
180
|
applyConstantStatics(baseInsightRef, applyFieldObject);
|
|
119
|
-
return baseInsightRef as unknown as
|
|
181
|
+
return baseInsightRef as unknown as ConstantCls<
|
|
182
|
+
MergeOwnSchemas<InsightModels>,
|
|
183
|
+
FieldObject,
|
|
184
|
+
MergeOwnSchemas<InsightModels>,
|
|
185
|
+
FieldObject,
|
|
186
|
+
"insight"
|
|
187
|
+
>;
|
|
120
188
|
};
|
|
121
189
|
|
|
122
190
|
const getBaseConstantClass = (field: FieldObject, modelType: ConstantType = "scalar") => {
|
|
@@ -125,8 +193,8 @@ const getBaseConstantClass = (field: FieldObject, modelType: ConstantType = "sca
|
|
|
125
193
|
static modelType: ConstantType = modelType;
|
|
126
194
|
static text: { search: Set<string>; filter: Set<string>; children: { search: Set<string>; filter: Set<string> } } =
|
|
127
195
|
{ search: new Set(), filter: new Set(), children: { search: new Set(), filter: new Set() } };
|
|
128
|
-
static children: Set<
|
|
129
|
-
static relations: Set<
|
|
196
|
+
static children: Set<ConstantModelRef> = new Set();
|
|
197
|
+
static relations: Set<ConstantModelRef> = new Set();
|
|
130
198
|
static enums: Set<EnumInstance> = new Set();
|
|
131
199
|
[immerable] = true;
|
|
132
200
|
constructor(obj?: Partial<unknown>) {
|
|
@@ -152,47 +220,213 @@ const getBaseConstantClass = (field: FieldObject, modelType: ConstantType = "sca
|
|
|
152
220
|
|
|
153
221
|
const makeBaseScalar = <FieldMap extends FieldInfoObject>(
|
|
154
222
|
fieldMap: FieldMap,
|
|
155
|
-
):
|
|
223
|
+
): ConstantCls<
|
|
224
|
+
ExtractFieldInfoObject<FieldMap>,
|
|
225
|
+
FieldObject,
|
|
226
|
+
ExtractFieldInfoObject<FieldMap>,
|
|
227
|
+
FieldObject,
|
|
228
|
+
"scalar"
|
|
229
|
+
> => {
|
|
156
230
|
const fieldObject = Object.fromEntries(Object.entries(fieldMap).map(([key, field]) => [key, field.toField()]));
|
|
157
231
|
const baseScalarRef = getBaseConstantClass(fieldObject, "scalar");
|
|
158
232
|
applyConstantStatics(baseScalarRef, fieldObject);
|
|
159
|
-
return baseScalarRef as unknown as
|
|
233
|
+
return baseScalarRef as unknown as ConstantCls<
|
|
234
|
+
ExtractFieldInfoObject<FieldMap>,
|
|
235
|
+
FieldObject,
|
|
236
|
+
ExtractFieldInfoObject<FieldMap>,
|
|
237
|
+
FieldObject,
|
|
238
|
+
"scalar"
|
|
239
|
+
>;
|
|
160
240
|
};
|
|
161
241
|
|
|
242
|
+
type ConstantSetReturn<Self, Schema> = Self extends Schema & ConstantMethods<Schema> & infer Model
|
|
243
|
+
? unknown extends Model
|
|
244
|
+
? Self
|
|
245
|
+
: Model
|
|
246
|
+
: Self;
|
|
162
247
|
export interface ConstantMethods<Schema = any> {
|
|
163
|
-
set:
|
|
248
|
+
set<Self extends Schema & ConstantMethods<Schema>>(this: Self, obj: Partial<Schema>): ConstantSetReturn<Self, Schema>;
|
|
164
249
|
}
|
|
165
250
|
|
|
166
|
-
|
|
251
|
+
type DatabaseSchemaOf<Schema, HiddenKey> = {
|
|
252
|
+
[K in keyof Schema]: K extends HiddenKey ? NonNullable<Schema[K]> : Schema[K];
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
export interface ConstantStatics<
|
|
256
|
+
Schema = any,
|
|
257
|
+
OwnSchema = Schema,
|
|
258
|
+
OwnFieldObj extends FieldObject = FieldObject,
|
|
259
|
+
OptionalKey = never,
|
|
260
|
+
RelationKey = never,
|
|
261
|
+
PrimitiveKey = never,
|
|
262
|
+
ScalarKey = never,
|
|
263
|
+
EnumKey = never,
|
|
264
|
+
MapKey = never,
|
|
265
|
+
HiddenKey = never,
|
|
266
|
+
SecretKey = never,
|
|
267
|
+
ModelType extends ConstantType = ConstantType,
|
|
268
|
+
> {
|
|
269
|
+
[FIELD_META]: FieldObject;
|
|
270
|
+
getDefault: () => DefaultOfSchema<Schema, RelationKey>;
|
|
271
|
+
purify: PurifyFunc<Schema>;
|
|
272
|
+
modelType: ConstantType;
|
|
273
|
+
children: Set<ConstantModelRef>;
|
|
274
|
+
relations: Set<ConstantModelRef>;
|
|
275
|
+
enums: Set<EnumInstance>;
|
|
276
|
+
text: { search: Set<string>; filter: Set<string>; children: { search: Set<string>; filter: Set<string> } };
|
|
277
|
+
_OptionalKey: OptionalKey;
|
|
278
|
+
_RelationKey: RelationKey;
|
|
279
|
+
_PrimitiveKey: PrimitiveKey;
|
|
280
|
+
_ScalarKey: ScalarKey;
|
|
281
|
+
_EnumKey: EnumKey;
|
|
282
|
+
_MapKey: MapKey;
|
|
283
|
+
_HiddenKey: HiddenKey;
|
|
284
|
+
_SecretKey: SecretKey;
|
|
285
|
+
_OwnSchema: OwnSchema;
|
|
286
|
+
_OwnFieldObj: OwnFieldObj;
|
|
287
|
+
_DatabaseSchema: DatabaseSchemaOf<Schema, HiddenKey>;
|
|
288
|
+
_ModelType: ModelType;
|
|
289
|
+
[SERVER_VALUE]: Schema;
|
|
290
|
+
[CLIENT_VALUE]: Schema;
|
|
291
|
+
[DEFAULT_VALUE]: DefaultOfSchema<Schema, RelationKey>;
|
|
292
|
+
[PURIFIED_VALUE]: PurifiedModel<Schema>;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export interface DatabaseConstantStatics<Schema = any, FieldObj extends FieldObject = FieldObject> {
|
|
167
296
|
[FIELD_META]: FieldObj;
|
|
168
297
|
getDefault: () => DefaultOf<Schema>;
|
|
169
298
|
purify: PurifyFunc<Schema>;
|
|
170
299
|
modelType: ConstantType;
|
|
171
|
-
children: Set<
|
|
172
|
-
relations: Set<
|
|
300
|
+
children: Set<ConstantModelRef>;
|
|
301
|
+
relations: Set<ConstantModelRef>;
|
|
173
302
|
enums: Set<EnumInstance>;
|
|
174
303
|
text: { search: Set<string>; filter: Set<string>; children: { search: Set<string>; filter: Set<string> } };
|
|
175
304
|
_DatabaseSchema: {
|
|
176
305
|
[K in keyof Schema]: K extends keyof FieldObj
|
|
177
|
-
? FieldObj[K] extends
|
|
178
|
-
?
|
|
179
|
-
? NonNullable<Schema[K]>
|
|
180
|
-
: Schema[K]
|
|
306
|
+
? FieldObj[K]["fieldType"] extends "hidden"
|
|
307
|
+
? NonNullable<Schema[K]>
|
|
181
308
|
: Schema[K]
|
|
182
309
|
: Schema[K];
|
|
183
310
|
};
|
|
184
311
|
}
|
|
185
|
-
|
|
312
|
+
|
|
313
|
+
export type ConstantModelRef<
|
|
314
|
+
Schema = any,
|
|
315
|
+
FieldObj extends FieldObject = FieldObject,
|
|
316
|
+
ModelType extends ConstantType = ConstantType,
|
|
317
|
+
> = Cls<
|
|
318
|
+
Schema,
|
|
319
|
+
{
|
|
320
|
+
[FIELD_META]: FieldObj;
|
|
321
|
+
modelType: ModelType;
|
|
322
|
+
children: Set<ConstantModelRef>;
|
|
323
|
+
relations: Set<ConstantModelRef>;
|
|
324
|
+
enums: Set<EnumInstance>;
|
|
325
|
+
text: { search: Set<string>; filter: Set<string>; children: { search: Set<string>; filter: Set<string> } };
|
|
326
|
+
}
|
|
327
|
+
>;
|
|
328
|
+
|
|
329
|
+
export type DocumentConstantModelRef<
|
|
330
|
+
Schema = any,
|
|
331
|
+
FieldObj extends FieldObject = FieldObject,
|
|
332
|
+
ModelType extends ConstantType = ConstantType,
|
|
333
|
+
DatabaseSchema = DatabaseSchemaOf<Schema, never>,
|
|
334
|
+
> = Cls<
|
|
335
|
+
Schema,
|
|
336
|
+
{
|
|
337
|
+
[FIELD_META]: FieldObj;
|
|
338
|
+
modelType: ModelType;
|
|
339
|
+
_DatabaseSchema: DatabaseSchema;
|
|
340
|
+
_ModelType: ModelType;
|
|
341
|
+
}
|
|
342
|
+
>;
|
|
343
|
+
|
|
344
|
+
type FieldFlag =
|
|
345
|
+
| "nullable"
|
|
346
|
+
| "_isRelation"
|
|
347
|
+
| "_isPrimitive"
|
|
348
|
+
| "_isScalar"
|
|
349
|
+
| "_isEnum"
|
|
350
|
+
| "_isHidden"
|
|
351
|
+
| "_isSecret"
|
|
352
|
+
| "_isMap";
|
|
353
|
+
type TrueFieldFlag<Flag extends FieldFlag> = { readonly [K in Flag]: true };
|
|
354
|
+
type KeysByFlag<FieldObj extends FieldObject, Flag extends FieldFlag> = {
|
|
355
|
+
[K in keyof FieldObj]: FieldObj[K] extends TrueFieldFlag<Flag> ? K : never;
|
|
356
|
+
}[keyof FieldObj];
|
|
357
|
+
type OptionalKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "nullable">;
|
|
358
|
+
type RelationKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isRelation">;
|
|
359
|
+
type PrimitiveKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isPrimitive">;
|
|
360
|
+
type ScalarKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isScalar">;
|
|
361
|
+
type EnumKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isEnum">;
|
|
362
|
+
type HiddenKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isHidden">;
|
|
363
|
+
type SecretKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isSecret">;
|
|
364
|
+
type MapKeys<FieldObj extends FieldObject> = KeysByFlag<FieldObj, "_isMap">;
|
|
365
|
+
type ConstantKeyChannelMap = {
|
|
366
|
+
optional: unknown;
|
|
367
|
+
relation: unknown;
|
|
368
|
+
primitive: unknown;
|
|
369
|
+
scalar: unknown;
|
|
370
|
+
enum: unknown;
|
|
371
|
+
map: unknown;
|
|
372
|
+
hidden: unknown;
|
|
373
|
+
secret: unknown;
|
|
374
|
+
};
|
|
375
|
+
type IsBroadFieldObject<FieldObj extends FieldObject> = string extends keyof FieldObj ? true : false;
|
|
376
|
+
type ConstantKeyChannels<FieldObj extends FieldObject> =
|
|
377
|
+
IsBroadFieldObject<FieldObj> extends true
|
|
378
|
+
? {
|
|
379
|
+
optional: never;
|
|
380
|
+
relation: never;
|
|
381
|
+
primitive: never;
|
|
382
|
+
scalar: never;
|
|
383
|
+
enum: never;
|
|
384
|
+
map: never;
|
|
385
|
+
hidden: never;
|
|
386
|
+
secret: never;
|
|
387
|
+
}
|
|
388
|
+
: {
|
|
389
|
+
optional: OptionalKeys<FieldObj>;
|
|
390
|
+
relation: RelationKeys<FieldObj>;
|
|
391
|
+
primitive: PrimitiveKeys<FieldObj>;
|
|
392
|
+
scalar: ScalarKeys<FieldObj>;
|
|
393
|
+
enum: EnumKeys<FieldObj>;
|
|
394
|
+
map: MapKeys<FieldObj>;
|
|
395
|
+
hidden: HiddenKeys<FieldObj>;
|
|
396
|
+
secret: SecretKeys<FieldObj>;
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
export type ConstantCls<
|
|
400
|
+
Schema = any,
|
|
401
|
+
FieldObj extends FieldObject = FieldObject,
|
|
402
|
+
OwnSchema = Schema,
|
|
403
|
+
OwnFieldObj extends FieldObject = FieldObj,
|
|
404
|
+
ModelType extends ConstantType = ConstantType,
|
|
405
|
+
_Channels extends ConstantKeyChannelMap = ConstantKeyChannels<FieldObj>,
|
|
406
|
+
> = (new (
|
|
186
407
|
obj?: Partial<Schema>,
|
|
187
408
|
) => Schema & ConstantMethods<Schema>) &
|
|
188
|
-
ConstantStatics<
|
|
409
|
+
ConstantStatics<
|
|
410
|
+
Schema,
|
|
411
|
+
OwnSchema,
|
|
412
|
+
OwnFieldObj,
|
|
413
|
+
_Channels["optional"],
|
|
414
|
+
_Channels["relation"],
|
|
415
|
+
_Channels["primitive"],
|
|
416
|
+
_Channels["scalar"],
|
|
417
|
+
_Channels["enum"],
|
|
418
|
+
_Channels["map"],
|
|
419
|
+
_Channels["hidden"],
|
|
420
|
+
_Channels["secret"],
|
|
421
|
+
ModelType
|
|
422
|
+
>;
|
|
189
423
|
|
|
190
424
|
declare global {
|
|
191
425
|
|
|
192
|
-
interface DateConstructor extends
|
|
193
|
-
interface StringConstructor extends
|
|
194
|
-
interface BooleanConstructor extends
|
|
195
|
-
interface MapConstructor extends
|
|
426
|
+
interface DateConstructor extends DatabaseConstantStatics<unknown> {}
|
|
427
|
+
interface StringConstructor extends DatabaseConstantStatics<unknown> {}
|
|
428
|
+
interface BooleanConstructor extends DatabaseConstantStatics<unknown> {}
|
|
429
|
+
interface MapConstructor extends DatabaseConstantStatics<unknown> {}
|
|
196
430
|
}
|
|
197
431
|
|
|
198
432
|
const applyConstantStatics = <Model>(model: ConstantCls<Model>, fieldMap: FieldObject): ConstantCls<Model> => {
|
|
@@ -236,48 +470,70 @@ export function via<
|
|
|
236
470
|
K extends NonFunctionalKeys<OmitBase<Obj>>,
|
|
237
471
|
ResolveField extends (resolve: FieldResolver) => FieldInfoObject,
|
|
238
472
|
LightModels extends Cls[],
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
473
|
+
_DirectSchema extends object = ObjectAssign<[Pick<Obj, K> & BaseObject, ResolvedSchema<ResolveField>]>,
|
|
474
|
+
_Schema extends object = MergeWithOwnSchemas<LightModels, _DirectSchema>,
|
|
475
|
+
_DirectFieldObj extends FieldObject = ObjectAssign<
|
|
476
|
+
[Pick<ObjFieldObj, K & keyof ObjFieldObj>, ResolvedFieldObject<ResolveField>]
|
|
477
|
+
>,
|
|
478
|
+
_FieldObj extends FieldObject = MergeWithOwnFieldObjects<LightModels, _DirectFieldObj> & FieldObject,
|
|
243
479
|
>(
|
|
244
480
|
modelRef: Cls<Obj, { [FIELD_META]: ObjFieldObj }>,
|
|
245
481
|
fields: readonly K[],
|
|
246
482
|
resolveField: ResolveField,
|
|
247
483
|
...lightModelRefs: LightModels
|
|
248
|
-
): ConstantCls<_Schema, _FieldObj>;
|
|
484
|
+
): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "light">;
|
|
249
485
|
|
|
250
486
|
export function via<
|
|
251
487
|
BuildField extends (builder: FieldBuilder) => FieldInfoObject,
|
|
488
|
+
_DirectSchema extends object = BuiltSchema<BuildField>,
|
|
489
|
+
_DirectFieldObj extends FieldObject = BuiltFieldObject<BuildField>,
|
|
490
|
+
>(
|
|
491
|
+
buildField: BuildField,
|
|
492
|
+
): ConstantCls<_DirectSchema, _DirectFieldObj, _DirectSchema, _DirectFieldObj, "input" | "scalar">;
|
|
493
|
+
|
|
494
|
+
export function via<
|
|
495
|
+
BuildField extends (builder: FieldBuilder) => FieldInfoObject,
|
|
496
|
+
FirstInput extends Cls,
|
|
252
497
|
Inputs extends Cls[],
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
498
|
+
_DirectSchema extends object = BuiltSchema<BuildField>,
|
|
499
|
+
_InputRefs extends Cls[] = [FirstInput, ...Inputs],
|
|
500
|
+
_Schema extends object = MergeWithOwnSchemas<_InputRefs, _DirectSchema>,
|
|
501
|
+
_DirectFieldObj extends FieldObject = BuiltFieldObject<BuildField>,
|
|
502
|
+
_FieldObj extends FieldObject = MergeWithOwnFieldObjects<_InputRefs, _DirectFieldObj> & FieldObject,
|
|
503
|
+
>(
|
|
504
|
+
buildField: BuildField,
|
|
505
|
+
firstExtendInputRef: FirstInput,
|
|
506
|
+
...extendInputRefs: Inputs
|
|
507
|
+
): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "input">;
|
|
257
508
|
|
|
258
509
|
export function via<
|
|
259
510
|
Full extends BaseObject,
|
|
260
511
|
BuildField extends (builder: FieldBuilder) => FieldInfoObject,
|
|
261
512
|
Insights extends Cls[],
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
513
|
+
_DirectSchema extends object = ObjectAssign<[BaseInsight, BuiltSchema<BuildField>]>,
|
|
514
|
+
_Schema extends object = MergeWithOwnSchemas<Insights, _DirectSchema>,
|
|
515
|
+
_DirectFieldObj extends FieldObject = BuiltFieldObject<BuildField>,
|
|
516
|
+
_FieldObj extends FieldObject = MergeWithOwnFieldObjects<Insights, _DirectFieldObj> & FieldObject,
|
|
517
|
+
>(
|
|
518
|
+
modelRef: Cls<Full>,
|
|
519
|
+
buildField: BuildField,
|
|
520
|
+
...extendInsightRefs: Insights
|
|
521
|
+
): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "insight">;
|
|
266
522
|
|
|
267
523
|
export function via<
|
|
268
524
|
Input,
|
|
269
525
|
InputFieldObj extends FieldObject,
|
|
270
526
|
BuildField extends (builder: FieldBuilder) => FieldInfoObject,
|
|
271
527
|
ObjectModels extends Cls[],
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
528
|
+
_DirectSchema extends object = ObjectAssign<[Input & object, BaseObject, BuiltSchema<BuildField>]>,
|
|
529
|
+
_Schema extends object = MergeWithOwnSchemas<ObjectModels, _DirectSchema>,
|
|
530
|
+
_DirectFieldObj extends FieldObject = ObjectAssign<[InputFieldObj, BuiltFieldObject<BuildField>]>,
|
|
531
|
+
_FieldObj extends FieldObject = MergeWithOwnFieldObjects<ObjectModels, _DirectFieldObj> & FieldObject,
|
|
276
532
|
>(
|
|
277
533
|
inputRef: Cls<Input, { [FIELD_META]: InputFieldObj }>,
|
|
278
534
|
buildField: BuildField,
|
|
279
535
|
...extendObjectRefs: ObjectModels
|
|
280
|
-
): ConstantCls<_Schema, _FieldObj>;
|
|
536
|
+
): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "object">;
|
|
281
537
|
|
|
282
538
|
export function via<
|
|
283
539
|
Obj,
|
|
@@ -286,17 +542,16 @@ export function via<
|
|
|
286
542
|
LightFieldObj extends FieldObject,
|
|
287
543
|
ResolveField extends (resolve: FieldResolver) => FieldInfoObject,
|
|
288
544
|
FullModels extends Cls[],
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
FieldInfoObjectToFieldObject<ReturnType<ResolveField>>,
|
|
545
|
+
_DirectSchema extends object = ObjectAssign<[Obj & object, Light & object, ResolvedSchema<ResolveField>]>,
|
|
546
|
+
_Schema extends object = MergeWithOwnSchemas<FullModels, _DirectSchema>,
|
|
547
|
+
_DirectFieldObj extends FieldObject = ObjectAssign<[ObjFieldObj, LightFieldObj, ResolvedFieldObject<ResolveField>]>,
|
|
548
|
+
_FieldObj extends FieldObject = MergeWithOwnFieldObjects<FullModels, _DirectFieldObj> & FieldObject,
|
|
294
549
|
>(
|
|
295
550
|
objectRef: Cls<Obj, { [FIELD_META]: ObjFieldObj }>,
|
|
296
551
|
lightModelRef: Cls<Light, { [FIELD_META]: LightFieldObj }>,
|
|
297
552
|
resolveField: ResolveField,
|
|
298
553
|
...fullModelRefs: FullModels
|
|
299
|
-
): ConstantCls<_Schema, _FieldObj>;
|
|
554
|
+
): ConstantCls<_Schema, _FieldObj, _Schema, _FieldObj, "full">;
|
|
300
555
|
|
|
301
556
|
export function via(
|
|
302
557
|
firstRefOrBuildField: Cls | ((builder: FieldBuilder) => FieldInfoObject),
|
package/dictionary/dictInfo.ts
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import type { GetStateObject } from "akanjs/base";
|
|
2
2
|
import { capitalize } from "akanjs/common";
|
|
3
3
|
import type { BaseInsight, BaseObject } from "akanjs/constant";
|
|
4
|
-
import type { BaseFilterQueryKey, BaseFilterSortKey, FilterInfo, FilterInstance } from "akanjs/document";
|
|
5
|
-
import type { EndpointInfo, SliceInfo } from "akanjs/signal";
|
|
4
|
+
import type { BaseFilterQueryKey, BaseFilterSortKey, FilterCls, FilterInfo, FilterInstance } from "akanjs/document";
|
|
5
|
+
import type { EndpInfoArgNames, EndpointInfo, SliceInfo, SliceInfoArgNames } from "akanjs/signal";
|
|
6
6
|
import type { DictionaryNode, RootDictionary } from "./trans";
|
|
7
7
|
|
|
8
8
|
type MutableDictionaryNode = DictionaryNode & { t?: string; desc?: DictionaryNode };
|
|
9
9
|
type EnumValueKey = string | number;
|
|
10
|
+
type AnyFilterShape = FilterInstance<Record<string, FilterInfo>, Record<string, unknown>>;
|
|
11
|
+
type DictFilterShape<Filter> = Filter extends FilterInstance
|
|
12
|
+
? Filter
|
|
13
|
+
: Filter extends FilterCls<infer FilterShape>
|
|
14
|
+
? FilterShape
|
|
15
|
+
: Filter extends { query: Record<string, FilterInfo>; sort: Record<string, unknown> }
|
|
16
|
+
? Filter
|
|
17
|
+
: AnyFilterShape;
|
|
18
|
+
type DictFilterQuery<Filter> = DictFilterShape<Filter>["query"];
|
|
19
|
+
type DictFilterSort<Filter> = DictFilterShape<Filter>["sort"];
|
|
10
20
|
|
|
11
21
|
const ensureNode = (target: DictionaryNode, key: string): MutableDictionaryNode => {
|
|
12
22
|
target[key] ??= {};
|
|
@@ -250,24 +260,27 @@ export class ModelDictInfo<
|
|
|
250
260
|
EtcKey
|
|
251
261
|
>;
|
|
252
262
|
}
|
|
253
|
-
query<Filter
|
|
263
|
+
query<Filter>(
|
|
254
264
|
translate: (fn: (trans: Languages) => FunctionTranslation<Languages>) => {
|
|
255
|
-
[K in Exclude<keyof Filter
|
|
265
|
+
[K in Exclude<keyof DictFilterQuery<Filter>, QueryKey>]: DictFilterQuery<Filter>[K] extends FilterInfo<
|
|
266
|
+
infer ArgNames,
|
|
267
|
+
any
|
|
268
|
+
>
|
|
256
269
|
? FunctionTranslation<Languages, ArgNames[number]>
|
|
257
270
|
: never;
|
|
258
271
|
},
|
|
259
272
|
) {
|
|
260
273
|
Object.assign(this.queryDictionary, translate(fn), ModelDictInfo.baseQueryDictionary) as unknown as {
|
|
261
|
-
[K in keyof Filter
|
|
274
|
+
[K in keyof DictFilterQuery<Filter>]: FunctionTranslation<
|
|
262
275
|
Languages,
|
|
263
|
-
Filter[
|
|
276
|
+
DictFilterQuery<Filter>[K] extends FilterInfo<infer ArgNames, any> ? ArgNames[number] : never
|
|
264
277
|
>;
|
|
265
278
|
};
|
|
266
279
|
return this as unknown as ModelDictInfo<
|
|
267
280
|
Languages,
|
|
268
281
|
ModelKey,
|
|
269
282
|
InsightKey,
|
|
270
|
-
keyof Filter
|
|
283
|
+
keyof DictFilterQuery<Filter> & string,
|
|
271
284
|
SortKey,
|
|
272
285
|
EnumKey,
|
|
273
286
|
BaseSignalKey,
|
|
@@ -277,9 +290,9 @@ export class ModelDictInfo<
|
|
|
277
290
|
EtcKey
|
|
278
291
|
>;
|
|
279
292
|
}
|
|
280
|
-
sort<Filter
|
|
293
|
+
sort<Filter>(
|
|
281
294
|
translate: (t: (trans: Languages) => FieldTranslation<Languages>) => {
|
|
282
|
-
[K in Exclude<keyof Filter
|
|
295
|
+
[K in Exclude<keyof DictFilterSort<Filter>, SortKey>]: FieldTranslation<Languages>;
|
|
283
296
|
},
|
|
284
297
|
) {
|
|
285
298
|
Object.assign(
|
|
@@ -292,7 +305,7 @@ export class ModelDictInfo<
|
|
|
292
305
|
ModelKey,
|
|
293
306
|
InsightKey,
|
|
294
307
|
QueryKey,
|
|
295
|
-
keyof Filter
|
|
308
|
+
keyof DictFilterSort<Filter> & string,
|
|
296
309
|
EnumKey,
|
|
297
310
|
BaseSignalKey,
|
|
298
311
|
SliceKey,
|
|
@@ -327,20 +340,8 @@ export class ModelDictInfo<
|
|
|
327
340
|
}
|
|
328
341
|
slice<Slice>(
|
|
329
342
|
translate: (fn: (trans: Languages) => FunctionTranslation<Languages>) => {
|
|
330
|
-
[K in Exclude<keyof Slice, SliceKey>]: Slice[K] extends SliceInfo
|
|
331
|
-
|
|
332
|
-
any,
|
|
333
|
-
any,
|
|
334
|
-
any,
|
|
335
|
-
any,
|
|
336
|
-
any,
|
|
337
|
-
any,
|
|
338
|
-
infer ArgNames,
|
|
339
|
-
any,
|
|
340
|
-
any,
|
|
341
|
-
any
|
|
342
|
-
>
|
|
343
|
-
? FunctionTranslation<Languages, ArgNames[number]>
|
|
343
|
+
[K in Exclude<keyof Slice, SliceKey>]: Slice[K] extends infer Info extends SliceInfo
|
|
344
|
+
? FunctionTranslation<Languages, SliceInfoArgNames<Info>[number]>
|
|
344
345
|
: never;
|
|
345
346
|
},
|
|
346
347
|
) {
|
|
@@ -363,19 +364,8 @@ export class ModelDictInfo<
|
|
|
363
364
|
}
|
|
364
365
|
endpoint<Endpoint>(
|
|
365
366
|
translate: (fn: (trans: Languages) => FunctionTranslation<Languages>) => {
|
|
366
|
-
[K in Exclude<keyof Endpoint, EndpointKey>]: Endpoint[K] extends EndpointInfo
|
|
367
|
-
|
|
368
|
-
any,
|
|
369
|
-
infer ArgNames,
|
|
370
|
-
any,
|
|
371
|
-
any,
|
|
372
|
-
any,
|
|
373
|
-
any,
|
|
374
|
-
any,
|
|
375
|
-
any,
|
|
376
|
-
any
|
|
377
|
-
>
|
|
378
|
-
? FunctionTranslation<Languages, ArgNames[number]>
|
|
367
|
+
[K in Exclude<keyof Endpoint, EndpointKey>]: Endpoint[K] extends infer Info extends EndpointInfo
|
|
368
|
+
? FunctionTranslation<Languages, EndpInfoArgNames<Info>[number]>
|
|
379
369
|
: never;
|
|
380
370
|
},
|
|
381
371
|
) {
|
|
@@ -992,7 +982,7 @@ export class ServiceDictInfo<
|
|
|
992
982
|
}
|
|
993
983
|
endpoint<Endpoint extends { [key: string]: EndpointInfo }>(
|
|
994
984
|
translate: (fn: (trans: Languages) => FunctionTranslation<Languages>) => {
|
|
995
|
-
[K in keyof Endpoint]: FunctionTranslation<Languages, Endpoint[K][
|
|
985
|
+
[K in keyof Endpoint]: FunctionTranslation<Languages, EndpInfoArgNames<Endpoint[K]>[number]>;
|
|
996
986
|
},
|
|
997
987
|
) {
|
|
998
988
|
Object.assign(this.endpointDictionary, translate(fn)) as unknown as {
|