vona-module-a-orm 5.0.54 → 5.0.56
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/cli/model/metadata/generate.ts +7 -5
- package/dist/config/config.d.ts +2 -0
- package/dist/index.js +105 -159
- package/dist/lib/dto/dtoMutate.d.ts +2 -1
- package/dist/lib/relationsDynamic.d.ts +2 -2
- package/dist/lib/relationsMutate.d.ts +2 -2
- package/dist/lib/utils.d.ts +3 -0
- package/dist/main.d.ts +1 -1
- package/dist/types/dto/dtoMutate.d.ts +9 -18
- package/dist/types/model.d.ts +2 -0
- package/dist/types/relations.d.ts +3 -0
- package/dist/types/relationsDef.d.ts +7 -7
- package/dist/types/relationsDefDynamic.d.ts +4 -4
- package/package.json +1 -1
|
@@ -113,10 +113,12 @@ function __parseRelation(nodeRelation: t.ObjectProperty) {
|
|
|
113
113
|
function __parseRelationHasOne(args: t.Node[]) {
|
|
114
114
|
// classModel
|
|
115
115
|
const classModel = __parseRelation_classModel(args[0]);
|
|
116
|
+
// key
|
|
117
|
+
const key = __parseRelation_key(args[1]);
|
|
116
118
|
// options
|
|
117
119
|
const options = __parseRelation_options(args[2]);
|
|
118
120
|
// combine
|
|
119
|
-
return `IModelRelationHasOne<${classModel}, ${options.autoload}, ${options.columns}>`;
|
|
121
|
+
return `IModelRelationHasOne<${classModel}, '${key}', ${options.autoload}, ${options.columns}>`;
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
function __parseRelationBelongsTo(args: t.Node[]) {
|
|
@@ -133,14 +135,14 @@ function __parseRelationBelongsTo(args: t.Node[]) {
|
|
|
133
135
|
function __parseRelationHasMany(args: t.Node[]) {
|
|
134
136
|
// classModel
|
|
135
137
|
const classModel = __parseRelation_classModel(args[0]);
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
+
// key
|
|
139
|
+
const key = __parseRelation_key(args[1]);
|
|
138
140
|
// options
|
|
139
141
|
const options = __parseRelation_options(args[2]);
|
|
140
142
|
// modelJoins
|
|
141
143
|
const modelJoins = __parseRelation_modelJoins(args[3]);
|
|
142
144
|
// combine
|
|
143
|
-
return `IModelRelationHasMany<${classModel}, ${options.autoload}, ${options.columns}
|
|
145
|
+
return `IModelRelationHasMany<${classModel}, '${key}', ${options.autoload}, ${options.columns}, ${modelJoins}, ${options.aggrs}, ${options.groups}>`;
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
function __parseRelationBelongsToMany(args: t.Node[]) {
|
|
@@ -237,7 +239,7 @@ function __parseRelation_options(node: t.Node) {
|
|
|
237
239
|
if (options?.groups) {
|
|
238
240
|
columns = 'undefined';
|
|
239
241
|
} else {
|
|
240
|
-
columns = '\'*\'';
|
|
242
|
+
columns = 'undefined'; // '\'*\'';
|
|
241
243
|
}
|
|
242
244
|
} else {
|
|
243
245
|
if (options?.columns.includes('*')) {
|
package/dist/config/config.d.ts
CHANGED
|
@@ -59,6 +59,7 @@ export declare function config(_app: VonaApplication): {
|
|
|
59
59
|
client?: keyof import("vona-module-a-redis").IRedisClientRecord;
|
|
60
60
|
disableInstance?: boolean;
|
|
61
61
|
};
|
|
62
|
+
emptyArrayAsNull?: boolean;
|
|
62
63
|
enable?: boolean;
|
|
63
64
|
meta?: Omit<IOnionOptionsMeta, never> | undefined;
|
|
64
65
|
};
|
|
@@ -81,6 +82,7 @@ export declare function config(_app: VonaApplication): {
|
|
|
81
82
|
client?: keyof import("vona-module-a-redis").IRedisClientRecord;
|
|
82
83
|
disableInstance?: boolean;
|
|
83
84
|
};
|
|
85
|
+
emptyArrayAsNull?: boolean;
|
|
84
86
|
enable?: boolean;
|
|
85
87
|
meta?: Omit<IOnionOptionsMeta, never> | undefined;
|
|
86
88
|
};
|
package/dist/index.js
CHANGED
|
@@ -230,9 +230,16 @@ let ServiceDatabase = (_dec$t = Service(), _dec2$t = BeanInfo({
|
|
|
230
230
|
return !clientName || clientName === 'default' ? this.getDefaultClientName() : clientName;
|
|
231
231
|
}
|
|
232
232
|
getDefaultClientName() {
|
|
233
|
-
|
|
233
|
+
const defaultClient = this.app.config.database.defaultClient;
|
|
234
234
|
if (typeof defaultClient === 'function') {
|
|
235
|
-
|
|
235
|
+
return defaultClient(this.ctx);
|
|
236
|
+
}
|
|
237
|
+
// check instance
|
|
238
|
+
if (!isNil(this.ctx.instanceName)) {
|
|
239
|
+
const configInstanceBase = this.$scope.instance.service.instance.getConfigInstanceBase(this.ctx.instanceName);
|
|
240
|
+
if (configInstanceBase?.isolate) {
|
|
241
|
+
return configInstanceBase.isolateClient;
|
|
242
|
+
}
|
|
236
243
|
}
|
|
237
244
|
return defaultClient;
|
|
238
245
|
}
|
|
@@ -687,10 +694,10 @@ let ServiceDatabaseClient = (_dec$m = Service(), _dec2$m = BeanInfo({
|
|
|
687
694
|
// * should not use this.clientConfig.connection, because password is hidden
|
|
688
695
|
const config = this.getClientConfig(this.clientName, true);
|
|
689
696
|
config.connection = Object.assign({}, config.connection, connDatabaseName);
|
|
690
|
-
// only used by startup, so no consider that
|
|
697
|
+
// only used by startup, so no consider that workers broadcast
|
|
691
698
|
this.configDatabase.clients[this.clientName] = config;
|
|
692
699
|
// reload
|
|
693
|
-
await this.
|
|
700
|
+
await this.scope.service.database.reloadClients(this.clientName, config);
|
|
694
701
|
}
|
|
695
702
|
}) || _class$m) || _class$m);
|
|
696
703
|
|
|
@@ -2252,6 +2259,49 @@ let ServiceCacheQuery = (_dec$c = Service(), _dec2$c = BeanInfo({
|
|
|
2252
2259
|
}
|
|
2253
2260
|
}) || _class$c) || _class$c);
|
|
2254
2261
|
|
|
2262
|
+
function handleRelationsCollection(relationsStatic, includeWrapper) {
|
|
2263
|
+
// collect
|
|
2264
|
+
const relations = [];
|
|
2265
|
+
// include
|
|
2266
|
+
if (relationsStatic) {
|
|
2267
|
+
for (const key in relationsStatic) {
|
|
2268
|
+
const relationDef = relationsStatic[key];
|
|
2269
|
+
const relationCur = includeWrapper?.include?.[key];
|
|
2270
|
+
let relationReal;
|
|
2271
|
+
let includeReal;
|
|
2272
|
+
let withReal;
|
|
2273
|
+
let autoload;
|
|
2274
|
+
if (relationCur === false) {
|
|
2275
|
+
continue;
|
|
2276
|
+
} else if (relationCur === true) {
|
|
2277
|
+
relationReal = relationDef;
|
|
2278
|
+
autoload = relationDef.options?.autoload;
|
|
2279
|
+
} else if (typeof relationCur === 'object') {
|
|
2280
|
+
relationReal = deepExtend({}, relationDef, {
|
|
2281
|
+
options: relationCur
|
|
2282
|
+
});
|
|
2283
|
+
includeReal = relationCur.include;
|
|
2284
|
+
withReal = relationCur.with;
|
|
2285
|
+
} else if (relationDef.options?.autoload) {
|
|
2286
|
+
relationReal = relationDef;
|
|
2287
|
+
autoload = relationDef.options?.autoload;
|
|
2288
|
+
} else {
|
|
2289
|
+
continue;
|
|
2290
|
+
}
|
|
2291
|
+
relations.push([key, relationReal, includeReal, withReal, autoload]);
|
|
2292
|
+
}
|
|
2293
|
+
}
|
|
2294
|
+
// with
|
|
2295
|
+
if (includeWrapper?.with) {
|
|
2296
|
+
for (const key in includeWrapper.with) {
|
|
2297
|
+
const relationReal = includeWrapper.with[key];
|
|
2298
|
+
if (!relationReal) continue;
|
|
2299
|
+
relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with, false]);
|
|
2300
|
+
}
|
|
2301
|
+
}
|
|
2302
|
+
return relations;
|
|
2303
|
+
}
|
|
2304
|
+
|
|
2255
2305
|
var _dec$b, _dec2$b, _class$b;
|
|
2256
2306
|
let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
|
|
2257
2307
|
module: "a-orm"
|
|
@@ -2787,43 +2837,7 @@ let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
|
|
|
2787
2837
|
return this._model.newInstanceTarget(modelClassTarget, meta?.client, meta?.table);
|
|
2788
2838
|
}
|
|
2789
2839
|
handleRelationsCollection(includeWrapper) {
|
|
2790
|
-
|
|
2791
|
-
const relations = [];
|
|
2792
|
-
// include
|
|
2793
|
-
if (this._model.options.relations) {
|
|
2794
|
-
for (const key in this._model.options.relations) {
|
|
2795
|
-
const relationDef = this._model.options.relations[key];
|
|
2796
|
-
const relationCur = includeWrapper?.include?.[key];
|
|
2797
|
-
let relationReal;
|
|
2798
|
-
let includeReal;
|
|
2799
|
-
let withReal;
|
|
2800
|
-
if (relationCur === false) {
|
|
2801
|
-
continue;
|
|
2802
|
-
} else if (relationCur === true) {
|
|
2803
|
-
relationReal = relationDef;
|
|
2804
|
-
} else if (typeof relationCur === 'object') {
|
|
2805
|
-
relationReal = deepExtend({}, relationDef, {
|
|
2806
|
-
options: relationCur
|
|
2807
|
-
});
|
|
2808
|
-
includeReal = relationCur.include;
|
|
2809
|
-
withReal = relationCur.with;
|
|
2810
|
-
} else if (relationDef.options?.autoload) {
|
|
2811
|
-
relationReal = relationDef;
|
|
2812
|
-
} else {
|
|
2813
|
-
continue;
|
|
2814
|
-
}
|
|
2815
|
-
relations.push([key, relationReal, includeReal, withReal]);
|
|
2816
|
-
}
|
|
2817
|
-
}
|
|
2818
|
-
// with
|
|
2819
|
-
if (includeWrapper?.with) {
|
|
2820
|
-
for (const key in includeWrapper.with) {
|
|
2821
|
-
const relationReal = includeWrapper.with[key];
|
|
2822
|
-
if (!relationReal) continue;
|
|
2823
|
-
relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with]);
|
|
2824
|
-
}
|
|
2825
|
-
}
|
|
2826
|
-
return relations;
|
|
2840
|
+
return handleRelationsCollection(this._model.options.relations, includeWrapper);
|
|
2827
2841
|
}
|
|
2828
2842
|
}) || _class$b) || _class$b);
|
|
2829
2843
|
|
|
@@ -3088,10 +3102,10 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3088
3102
|
}
|
|
3089
3103
|
// 2: mget
|
|
3090
3104
|
const ids = items.map(item => cast(item).id);
|
|
3091
|
-
const
|
|
3105
|
+
const options3 = params?.columns ? Object.assign({}, options, {
|
|
3092
3106
|
columns: params?.columns
|
|
3093
3107
|
}) : options;
|
|
3094
|
-
return await this.__mget_raw(table, ids,
|
|
3108
|
+
return await this.__mget_raw(table, ids, options3);
|
|
3095
3109
|
}
|
|
3096
3110
|
async __select_cache(table, params, options) {
|
|
3097
3111
|
// check if cache
|
|
@@ -3107,6 +3121,7 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3107
3121
|
// cache
|
|
3108
3122
|
const cache = this.cacheQuery.getInstance(table);
|
|
3109
3123
|
const items = await cache.get(key, {
|
|
3124
|
+
...options?.cache,
|
|
3110
3125
|
get: async () => {
|
|
3111
3126
|
return await super._select(table, params, options, builder);
|
|
3112
3127
|
},
|
|
@@ -3150,9 +3165,12 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3150
3165
|
params.columns = options?.columns;
|
|
3151
3166
|
}
|
|
3152
3167
|
// select
|
|
3153
|
-
const options2 =
|
|
3154
|
-
columns: undefined
|
|
3155
|
-
|
|
3168
|
+
const options2 = deepExtend({}, options, {
|
|
3169
|
+
columns: undefined,
|
|
3170
|
+
cache: {
|
|
3171
|
+
emptyArrayAsNull: true
|
|
3172
|
+
}
|
|
3173
|
+
});
|
|
3156
3174
|
const items = await this.__select_raw(table, params, options2);
|
|
3157
3175
|
return items[0];
|
|
3158
3176
|
}
|
|
@@ -3208,13 +3226,16 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3208
3226
|
const where = !isNil(id) ? Object.assign({}, options?.where, {
|
|
3209
3227
|
id
|
|
3210
3228
|
}) : options?.where;
|
|
3211
|
-
|
|
3212
|
-
where: undefined
|
|
3229
|
+
const options2 = deepExtend({}, options, {
|
|
3230
|
+
where: undefined,
|
|
3231
|
+
cache: {
|
|
3232
|
+
emptyArrayAsNull: true
|
|
3233
|
+
}
|
|
3213
3234
|
});
|
|
3214
3235
|
const items = await this.__select_raw(table, {
|
|
3215
3236
|
where,
|
|
3216
3237
|
columns: ['id']
|
|
3217
|
-
},
|
|
3238
|
+
}, options2);
|
|
3218
3239
|
if (items.length === 0) {
|
|
3219
3240
|
// donothing
|
|
3220
3241
|
return;
|
|
@@ -3266,10 +3287,15 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3266
3287
|
let id = this.__checkCacheKeyValid(where, table);
|
|
3267
3288
|
if (isNil(id)) {
|
|
3268
3289
|
// check where and get id
|
|
3290
|
+
const options2 = deepExtend({}, options, {
|
|
3291
|
+
cache: {
|
|
3292
|
+
emptyArrayAsNull: true
|
|
3293
|
+
}
|
|
3294
|
+
});
|
|
3269
3295
|
const items = await this.__select_raw(table, {
|
|
3270
3296
|
where,
|
|
3271
3297
|
columns: ['id']
|
|
3272
|
-
},
|
|
3298
|
+
}, options2);
|
|
3273
3299
|
if (items.length === 0) {
|
|
3274
3300
|
// donothing
|
|
3275
3301
|
return;
|
|
@@ -3816,71 +3842,17 @@ class Main extends BeanSimple {
|
|
|
3816
3842
|
}
|
|
3817
3843
|
async configLoaded(_config) {}
|
|
3818
3844
|
}
|
|
3819
|
-
async function configDefault(
|
|
3820
|
-
return {
|
|
3821
|
-
testDatabase: false,
|
|
3822
|
-
defaultClient: app.meta.env.DATABASE_DEFAULT_CLIENT,
|
|
3823
|
-
clients: {
|
|
3824
|
-
pg: {
|
|
3825
|
-
client: 'pg',
|
|
3826
|
-
connection: {
|
|
3827
|
-
host: app.meta.env.DATABASE_CLIENT_PG_HOST,
|
|
3828
|
-
port: Number.parseInt(app.meta.env.DATABASE_CLIENT_PG_PORT),
|
|
3829
|
-
user: app.meta.env.DATABASE_CLIENT_PG_USER,
|
|
3830
|
-
password: app.meta.env.DATABASE_CLIENT_PG_PASSWORD,
|
|
3831
|
-
database: app.meta.env.DATABASE_CLIENT_PG_DATABASE
|
|
3832
|
-
}
|
|
3833
|
-
},
|
|
3834
|
-
mysql: {
|
|
3835
|
-
client: 'mysql2',
|
|
3836
|
-
connection: {
|
|
3837
|
-
host: app.meta.env.DATABASE_CLIENT_MYSQL_HOST,
|
|
3838
|
-
port: Number.parseInt(app.meta.env.DATABASE_CLIENT_MYSQL_PORT),
|
|
3839
|
-
user: app.meta.env.DATABASE_CLIENT_MYSQL_USER,
|
|
3840
|
-
password: app.meta.env.DATABASE_CLIENT_MYSQL_PASSWORD,
|
|
3841
|
-
database: app.meta.env.DATABASE_CLIENT_MYSQL_DATABASE
|
|
3842
|
-
}
|
|
3843
|
-
}
|
|
3844
|
-
},
|
|
3845
|
-
base: {
|
|
3846
|
-
pool: {
|
|
3847
|
-
min: 0,
|
|
3848
|
-
max: 5
|
|
3849
|
-
},
|
|
3850
|
-
acquireConnectionTimeout: 60000 * 10,
|
|
3851
|
-
asyncStackTraces: true
|
|
3852
|
-
}
|
|
3853
|
-
};
|
|
3845
|
+
async function configDefault(_app) {
|
|
3846
|
+
return {};
|
|
3854
3847
|
}
|
|
3855
3848
|
async function configDev(_app) {
|
|
3856
|
-
return {
|
|
3857
|
-
testDatabase: true,
|
|
3858
|
-
base: {
|
|
3859
|
-
pool: {
|
|
3860
|
-
min: 0,
|
|
3861
|
-
max: 1
|
|
3862
|
-
}
|
|
3863
|
-
}
|
|
3864
|
-
};
|
|
3849
|
+
return {};
|
|
3865
3850
|
}
|
|
3866
3851
|
async function configProd(_app) {
|
|
3867
|
-
return {
|
|
3868
|
-
testDatabase: false,
|
|
3869
|
-
base: {
|
|
3870
|
-
asyncStackTraces: false
|
|
3871
|
-
}
|
|
3872
|
-
};
|
|
3852
|
+
return {};
|
|
3873
3853
|
}
|
|
3874
3854
|
async function configTest(_app) {
|
|
3875
|
-
return {
|
|
3876
|
-
testDatabase: true,
|
|
3877
|
-
base: {
|
|
3878
|
-
pool: {
|
|
3879
|
-
min: 0,
|
|
3880
|
-
max: 1
|
|
3881
|
-
}
|
|
3882
|
-
}
|
|
3883
|
-
};
|
|
3855
|
+
return {};
|
|
3884
3856
|
}
|
|
3885
3857
|
|
|
3886
3858
|
var _dec, _dec2, _class;
|
|
@@ -3984,7 +3956,6 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
|
|
|
3984
3956
|
include: includeReal,
|
|
3985
3957
|
with: withReal
|
|
3986
3958
|
});
|
|
3987
|
-
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel);
|
|
3988
3959
|
if (mutateTypeTopLevel) {
|
|
3989
3960
|
if (type === 'belongsTo') {
|
|
3990
3961
|
// donot mutate
|
|
@@ -3997,13 +3968,17 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
|
|
|
3997
3968
|
deleted: z.boolean().optional()
|
|
3998
3969
|
}));
|
|
3999
3970
|
} else if (type === 'hasOne') {
|
|
3971
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
4000
3972
|
schema = v.lazy(schemaLazy);
|
|
4001
3973
|
// optional = true;
|
|
4002
3974
|
} else {
|
|
3975
|
+
// hasMany
|
|
3976
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
4003
3977
|
schema = v.array(v.lazy(schemaLazy));
|
|
4004
3978
|
}
|
|
4005
3979
|
Api.field(v.optional(), schema)(entityClass.prototype, relationName);
|
|
4006
3980
|
} else {
|
|
3981
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
4007
3982
|
let schema;
|
|
4008
3983
|
let optional = false;
|
|
4009
3984
|
if (type === 'hasOne' || type === 'belongsTo') {
|
|
@@ -4026,10 +4001,10 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
|
|
|
4026
4001
|
}
|
|
4027
4002
|
}
|
|
4028
4003
|
}
|
|
4029
|
-
function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel) {
|
|
4004
|
+
function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation) {
|
|
4030
4005
|
return () => {
|
|
4031
4006
|
if (!autoload) {
|
|
4032
|
-
return _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel);
|
|
4007
|
+
return _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation);
|
|
4033
4008
|
}
|
|
4034
4009
|
// dynamic
|
|
4035
4010
|
const entityClass = getClassEntityFromClassModel(modelTarget);
|
|
@@ -4038,16 +4013,16 @@ function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload,
|
|
|
4038
4013
|
const dynamicName = `${beanFullName}_${_hashkey}`;
|
|
4039
4014
|
let entityTarget = getSchemaDynamic(dynamicName);
|
|
4040
4015
|
if (!entityTarget) {
|
|
4041
|
-
entityTarget = _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel);
|
|
4016
|
+
entityTarget = _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation);
|
|
4042
4017
|
entityTarget[SymbolSchemaDynamicRefId] = dynamicName;
|
|
4043
4018
|
addSchemaDynamic(dynamicName, entityTarget);
|
|
4044
4019
|
}
|
|
4045
4020
|
return entityTarget;
|
|
4046
4021
|
};
|
|
4047
4022
|
}
|
|
4048
|
-
function _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel) {
|
|
4023
|
+
function _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation) {
|
|
4049
4024
|
if (mutateTypeTopLevel) {
|
|
4050
|
-
return _DtoMutate_raw(modelTarget, optionsReal, mutateTypeTopLevel, undefined, false); // columnsOmitDefault: undefined
|
|
4025
|
+
return _DtoMutate_raw(modelTarget, optionsReal, mutateTypeTopLevel, undefined, false, relation); // columnsOmitDefault: undefined
|
|
4051
4026
|
} else {
|
|
4052
4027
|
if (optionsReal.groups) {
|
|
4053
4028
|
return DtoGroup(modelTarget, optionsReal.groups, optionsReal.aggrs, optionsReal.columns);
|
|
@@ -4071,50 +4046,11 @@ function _DtoGet_relation_handle_schemaLazy_hashkey(optionsReal, mutateTypeTopLe
|
|
|
4071
4046
|
}
|
|
4072
4047
|
function _DtoGet_relations_collection(modelClass, includeWrapper) {
|
|
4073
4048
|
const beanOptions = appResource.getBean(modelClass);
|
|
4074
|
-
const options = beanOptions
|
|
4075
|
-
|
|
4076
|
-
const relations = [];
|
|
4077
|
-
// include
|
|
4078
|
-
if (options.relations) {
|
|
4079
|
-
for (const key in options.relations) {
|
|
4080
|
-
const relationDef = options.relations[key];
|
|
4081
|
-
const relationCur = includeWrapper?.include?.[key];
|
|
4082
|
-
let relationReal;
|
|
4083
|
-
let includeReal;
|
|
4084
|
-
let withReal;
|
|
4085
|
-
let autoload;
|
|
4086
|
-
if (relationCur === false) {
|
|
4087
|
-
continue;
|
|
4088
|
-
} else if (relationCur === true) {
|
|
4089
|
-
relationReal = relationDef;
|
|
4090
|
-
autoload = relationDef.options?.autoload;
|
|
4091
|
-
} else if (typeof relationCur === 'object') {
|
|
4092
|
-
relationReal = deepExtend({}, relationDef, {
|
|
4093
|
-
options: relationCur
|
|
4094
|
-
});
|
|
4095
|
-
includeReal = relationCur.include;
|
|
4096
|
-
withReal = relationCur.with;
|
|
4097
|
-
} else if (relationDef.options?.autoload) {
|
|
4098
|
-
relationReal = relationDef;
|
|
4099
|
-
autoload = relationDef.options?.autoload;
|
|
4100
|
-
} else {
|
|
4101
|
-
continue;
|
|
4102
|
-
}
|
|
4103
|
-
relations.push([key, relationReal, includeReal, withReal, autoload]);
|
|
4104
|
-
}
|
|
4105
|
-
}
|
|
4106
|
-
// with
|
|
4107
|
-
if (includeWrapper?.with) {
|
|
4108
|
-
for (const key in includeWrapper.with) {
|
|
4109
|
-
const relationReal = includeWrapper.with[key];
|
|
4110
|
-
if (!relationReal) continue;
|
|
4111
|
-
relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with, false]);
|
|
4112
|
-
}
|
|
4113
|
-
}
|
|
4114
|
-
return relations;
|
|
4049
|
+
const options = beanOptions?.options;
|
|
4050
|
+
return handleRelationsCollection(options?.relations, includeWrapper);
|
|
4115
4051
|
}
|
|
4116
4052
|
|
|
4117
|
-
function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefault, topLevel) {
|
|
4053
|
+
function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefault, topLevel, relation) {
|
|
4118
4054
|
// model
|
|
4119
4055
|
const modelClass = prepareClassModel(modelLike);
|
|
4120
4056
|
// entity
|
|
@@ -4150,13 +4086,23 @@ function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefaul
|
|
|
4150
4086
|
if (!topLevel && mutateTypeTopLevel !== 'create') {
|
|
4151
4087
|
entityClass = $Class.partial(entityClass, ['id', 'deleted']);
|
|
4152
4088
|
}
|
|
4089
|
+
if (!topLevel && relation) {
|
|
4090
|
+
const [_relationName, relationReal] = relation;
|
|
4091
|
+
const {
|
|
4092
|
+
type,
|
|
4093
|
+
key
|
|
4094
|
+
} = relationReal;
|
|
4095
|
+
if (type === 'hasOne' || type === 'hasMany') {
|
|
4096
|
+
entityClass = $Class.omit(entityClass, key);
|
|
4097
|
+
}
|
|
4098
|
+
}
|
|
4153
4099
|
// relations
|
|
4154
4100
|
_DtoGet_relations(modelClass, entityClass, params, mutateTypeTopLevel);
|
|
4155
4101
|
return entityClass;
|
|
4156
4102
|
}
|
|
4157
4103
|
|
|
4158
4104
|
function DtoCreate(modelLike, params) {
|
|
4159
|
-
return _DtoMutate_raw(modelLike, params, 'create', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true);
|
|
4105
|
+
return _DtoMutate_raw(modelLike, params, 'create', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true, undefined);
|
|
4160
4106
|
}
|
|
4161
4107
|
|
|
4162
4108
|
function DtoQuery(classRef, keys) {
|
|
@@ -4176,7 +4122,7 @@ function DtoSelectAndCount(modelLike, params) {
|
|
|
4176
4122
|
}
|
|
4177
4123
|
|
|
4178
4124
|
function DtoUpdate(modelLike, params) {
|
|
4179
|
-
return _DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true);
|
|
4125
|
+
return _DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true, undefined);
|
|
4180
4126
|
}
|
|
4181
4127
|
|
|
4182
4128
|
// not use Partial/$Class.partial, for form render at frontend
|
|
@@ -4,5 +4,6 @@ import type { IDtoMutateParams, TypeDtoMutateResult, TypeDtoMutateType } from '.
|
|
|
4
4
|
import type { TypeModelColumnsStrict } from '../../types/modelWhere.ts';
|
|
5
5
|
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
6
6
|
import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../../types/relations.ts';
|
|
7
|
+
import type { IRelationItem } from '../../types/relationsDef.ts';
|
|
7
8
|
export declare function DtoMutate<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), T extends IDtoMutateParams<ModelLike> | undefined = undefined>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T): Constructable<TypeDtoMutateResult<ModelLike, T, 'mutate', undefined, true>>;
|
|
8
|
-
export declare function _DtoMutate_raw<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), T extends IDtoMutateParams<ModelLike> | undefined = undefined, ColumnsOmitDefault extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T, mutateTypeTopLevel?: TypeDtoMutateType, columnsOmitDefault?: ColumnsOmitDefault, topLevel?: boolean): any;
|
|
9
|
+
export declare function _DtoMutate_raw<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), T extends IDtoMutateParams<ModelLike> | undefined = undefined, ColumnsOmitDefault extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T, mutateTypeTopLevel?: TypeDtoMutateType, columnsOmitDefault?: ColumnsOmitDefault, topLevel?: boolean, relation?: IRelationItem): any;
|
|
@@ -2,9 +2,9 @@ import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
|
|
|
2
2
|
import type { IModelClassRecord } from '../types/onion/model.ts';
|
|
3
3
|
import type { TypeModelClassLike, TypeModelOfModelLike, TypeModelsClassLikeGeneral, TypeSymbolKeyEntity } from '../types/relations.ts';
|
|
4
4
|
import type { IModelRelationBelongsToDynamic, IModelRelationBelongsToManyDynamic, IModelRelationHasManyDynamic, IModelRelationHasOneDynamic, IModelRelationOptionsManyDynamic, IModelRelationOptionsOneDynamic } from '../types/relationsDefDynamic.ts';
|
|
5
|
-
declare function hasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined>(classModel: TypeModelClassLike<MODEL>, key:
|
|
5
|
+
declare function hasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, KEY, OPTIONS>;
|
|
6
6
|
declare function belongsTo<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined>(_classModelSelf: TypeModelClassLike<MODELSelf>, classModel: TypeModelClassLike<MODEL>, key: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity], options?: OPTIONS): IModelRelationBelongsToDynamic<MODELSelf, MODEL, OPTIONS>;
|
|
7
|
-
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined>(classModel: TypeModelClassLike<MODEL>, key:
|
|
7
|
+
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS, _modelJoins?: ModelJoins, _group?: Group): IModelRelationHasManyDynamic<MODEL, KEY, OPTIONS, ModelJoins, Group>;
|
|
8
8
|
declare function belongsToMany<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined>(classModelMiddle: TypeModelClassLike<MODELMiddle>, classModel: TypeModelClassLike<MODEL>, keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity], keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity], options?: OPTIONS, _modelJoins?: ModelJoins, _group?: Group): IModelRelationBelongsToManyDynamic<MODELMiddle, MODEL, OPTIONS, ModelJoins, Group>;
|
|
9
9
|
export declare const $relationDynamic: {
|
|
10
10
|
hasOne: typeof hasOne;
|
|
@@ -3,8 +3,8 @@ import type { IModelClassRecord } from '../types/onion/model.ts';
|
|
|
3
3
|
import type { TypeModelClassLike, TypeModelOfModelLike, TypeSymbolKeyEntity } from '../types/relations.ts';
|
|
4
4
|
import type { IModelRelationBelongsToManyDynamic, IModelRelationHasManyDynamic, IModelRelationHasOneDynamic } from '../types/relationsDefDynamic.ts';
|
|
5
5
|
import type { IModelRelationOptionsBelongsToManyMutate, IModelRelationOptionsManyMutate, IModelRelationOptionsOneMutate } from '../types/relationsDefMutate.ts';
|
|
6
|
-
declare function hasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key:
|
|
7
|
-
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key:
|
|
6
|
+
declare function hasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsOneMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, KEY, OPTIONS>;
|
|
7
|
+
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsManyMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasManyDynamic<MODEL, KEY, OPTIONS>;
|
|
8
8
|
declare function belongsToMany<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsBelongsToManyMutate<TypeModelOfModelLike<MODEL>>>(classModelMiddle: TypeModelClassLike<MODELMiddle>, classModel: TypeModelClassLike<MODEL>, keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity], keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity], options?: OPTIONS): IModelRelationBelongsToManyDynamic<MODELMiddle, MODEL, OPTIONS>;
|
|
9
9
|
export declare const $relationMutate: {
|
|
10
10
|
hasOne: typeof hasOne;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { IModelRelationIncludeWrapper } from '../types/model.ts';
|
|
2
|
+
import type { IRelationItem } from '../types/relationsDef.ts';
|
|
3
|
+
export declare function handleRelationsCollection(relationsStatic?: Record<string, any>, includeWrapper?: IModelRelationIncludeWrapper): IRelationItem[];
|
package/dist/main.d.ts
CHANGED
|
@@ -6,4 +6,4 @@ export declare class Main extends BeanSimple implements IModuleMain {
|
|
|
6
6
|
moduleLoaded(): Promise<void>;
|
|
7
7
|
configLoaded(_config: any): Promise<void>;
|
|
8
8
|
}
|
|
9
|
-
export declare function configDefault(
|
|
9
|
+
export declare function configDefault(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>>;
|
|
@@ -4,7 +4,7 @@ import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
|
4
4
|
import type { IModelRelationIncludeWrapper } from '../model.ts';
|
|
5
5
|
import type { TypeModelColumnsStrict } from '../modelWhere.ts';
|
|
6
6
|
import type { IDecoratorModelOptions, IModelClassRecord } from '../onion/model.ts';
|
|
7
|
-
import type { TypeModelOfModelLike, TypeSymbolKeyEntity, TypeUtilEntityOmit, TypeUtilEntityPartial, TypeUtilEntitySelector, TypeUtilGetColumnsFromRelationAndIncludeWrapper, TypeUtilGetModelOptions, TypeUtilGetParamsColumns, TypeUtilGetParamsInlcude, TypeUtilGetParamsWith, TypeUtilGetRelationEntity, TypeUtilGetRelationModel, TypeUtilGetRelationOptions, TypeUtilGetRelationOptionsAutoload, TypeUtilGetRelationType, TypeUtilPrepareColumns } from '../relations.ts';
|
|
7
|
+
import type { TypeModelOfModelLike, TypeSymbolKeyEntity, TypeUtilEntityOmit, TypeUtilEntityPartial, TypeUtilEntitySelector, TypeUtilGetColumnsFromRelationAndIncludeWrapper, TypeUtilGetModelOptions, TypeUtilGetParamsColumns, TypeUtilGetParamsInlcude, TypeUtilGetParamsWith, TypeUtilGetRelationEntity, TypeUtilGetRelationKey, TypeUtilGetRelationModel, TypeUtilGetRelationOptions, TypeUtilGetRelationOptionsAutoload, TypeUtilGetRelationType, TypeUtilPrepareColumns } from '../relations.ts';
|
|
8
8
|
export type TypeDtoMutateType = 'create' | 'update' | 'mutate';
|
|
9
9
|
export type IDtoMutateParams<ModelLike extends BeanModelMeta | (keyof IModelClassRecord)> = IBuildDtoMutateParams<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], TypeModelOfModelLike<ModelLike>>;
|
|
10
10
|
export interface IBuildDtoMutateParams<TRecord, Model extends BeanModelMeta> extends IModelRelationIncludeWrapper<Model>, IBuildDtoMutateParamsBasic<TRecord> {
|
|
@@ -13,7 +13,7 @@ export interface IBuildDtoMutateParamsBasic<TRecord> {
|
|
|
13
13
|
columns?: TypeModelColumnsStrict<TRecord>;
|
|
14
14
|
}
|
|
15
15
|
export type TypeDtoMutateResult<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), TOptionsRelation, TMutateTypeTopLevel extends TypeDtoMutateType, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TypeDtoMutateRelationResult<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], TypeModelOfModelLike<ModelLike>, TOptionsRelation, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel>;
|
|
16
|
-
export type TypeDtoMutateRelationResult<TRecord, TModel extends BeanModelMeta | undefined, TOptionsRelation, TMutateTypeTopLevel extends TypeDtoMutateType, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined, TColumns = undefined> = TypeDtoMutateRelationResultEntity<TRecord, TColumns extends string | string[] ? TColumns : TypeUtilGetParamsColumns<TOptionsRelation>, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel> & (TModel extends BeanModelMeta ? (OmitNever<TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel, TypeUtilGetModelOptions<TModel>, TypeUtilGetParamsInlcude<TOptionsRelation>>> & OmitNever<TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel, TypeUtilGetParamsWith<TOptionsRelation>>>) : {});
|
|
16
|
+
export type TypeDtoMutateRelationResult<TRecord, TModel extends BeanModelMeta | undefined, TOptionsRelation, TMutateTypeTopLevel extends TypeDtoMutateType, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined, TColumns = undefined, REFKEY = undefined> = TypeDtoMutateRelationResultEntity<TRecord, TColumns extends string | string[] ? TColumns : TypeUtilGetParamsColumns<TOptionsRelation>, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel, REFKEY> & (TModel extends BeanModelMeta ? (OmitNever<TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel, TypeUtilGetModelOptions<TModel>, TypeUtilGetParamsInlcude<TOptionsRelation>>> & OmitNever<TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel, TypeUtilGetParamsWith<TOptionsRelation>>>) : {});
|
|
17
17
|
type TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel extends TypeDtoMutateType, TModelOptions extends IDecoratorModelOptions, TInclude extends {} | undefined | unknown> = {
|
|
18
18
|
[RelationName in (keyof TModelOptions['relations'])]: TInclude extends {} ? TInclude[RelationName] extends {} | boolean ? TypeDtoMutateRelationResultMergeIncludeWrapper<TMutateTypeTopLevel, TModelOptions['relations'][RelationName], TInclude[RelationName]> : TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel, TModelOptions['relations'][RelationName]> : TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel, TModelOptions['relations'][RelationName]>;
|
|
19
19
|
};
|
|
@@ -23,28 +23,19 @@ type TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel extends TypeD
|
|
|
23
23
|
type TypeDtoMutateRelationResultMergeIncludeWrapper<TMutateTypeTopLevel extends TypeDtoMutateType, Relation, IncludeWrapper> = IncludeWrapper extends false ? never : IncludeWrapper extends true ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined> : IncludeWrapper extends {} ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, IncludeWrapper> : never;
|
|
24
24
|
type TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel extends TypeDtoMutateType, Relation> = TypeUtilGetRelationOptionsAutoload<Relation> extends true ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined> : never;
|
|
25
25
|
type TypeDtoMutateRelationResultMergeWithRelation<TMutateTypeTopLevel extends TypeDtoMutateType, WithRelation> = WithRelation extends false ? never : WithRelation extends true ? never : WithRelation extends {} ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, WithRelation, TypeUtilGetRelationOptions<WithRelation>> : never;
|
|
26
|
-
type TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel extends TypeDtoMutateType, Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilGetDtoMutateEntityByType<TMutateTypeTopLevel, TypeUtilGetRelationEntity<Relation>, TypeUtilGetRelationType<Relation>, TypeUtilGetRelationModel<Relation>, IncludeWrapper, TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>>;
|
|
27
|
-
type TypeUtilGetDtoMutateEntityByType<TMutateTypeTopLevel extends TypeDtoMutateType, TRecord, TYPE, TModel extends BeanModelMeta | undefined, IncludeWrapper extends {} | undefined | unknown, Columns> = TYPE extends 'belongsTo' ? never : TYPE extends 'belongsToMany' ? Array<{
|
|
26
|
+
type TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel extends TypeDtoMutateType, Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilGetDtoMutateEntityByType<TMutateTypeTopLevel, TypeUtilGetRelationEntity<Relation>, TypeUtilGetRelationType<Relation>, TypeUtilGetRelationModel<Relation>, IncludeWrapper, TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>, TypeUtilGetRelationKey<Relation>>;
|
|
27
|
+
type TypeUtilGetDtoMutateEntityByType<TMutateTypeTopLevel extends TypeDtoMutateType, TRecord, TYPE, TModel extends BeanModelMeta | undefined, IncludeWrapper extends {} | undefined | unknown, Columns, REFKEY = undefined> = TYPE extends 'belongsTo' ? never : TYPE extends 'belongsToMany' ? Array<{
|
|
28
28
|
id: TableIdentity;
|
|
29
29
|
deleted?: boolean;
|
|
30
|
-
}> | undefined : TYPE extends 'hasMany' ? Array<TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns>> | undefined : TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns> | undefined;
|
|
31
|
-
type TypeDtoMutateRelationResultEntity<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TypeDtoMutateRelationResultPatch<TypeDtoMutateRelationResultEntityInner<TRecord, Columns, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel>, TMutateTypeTopLevel, TTopLevel>;
|
|
32
|
-
type TypeDtoMutateRelationResultPatch<TRecordResult, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TTopLevel extends false ?
|
|
30
|
+
}> | undefined : TYPE extends 'hasMany' ? Array<TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns, REFKEY>> | undefined : TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns, REFKEY> | undefined;
|
|
31
|
+
type TypeDtoMutateRelationResultEntity<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined, REFKEY = undefined> = TypeDtoMutateRelationResultPatch<TypeDtoMutateRelationResultEntityInner<TRecord, Columns, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel>, TMutateTypeTopLevel, TTopLevel, REFKEY>;
|
|
32
|
+
type TypeDtoMutateRelationResultPatch<TRecordResult, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined, REFKEY = undefined> = TTopLevel extends false ? TypeUtilEntityOmit<TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel, TTopLevel>, REFKEY> : TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel, TTopLevel>;
|
|
33
|
+
type TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TTopLevel extends false ? TMutateTypeTopLevel extends 'update' | 'mutate' ? TypeUtilEntityPartial<TRecordResult, 'id' | 'deleted'> : TRecordResult : TRecordResult;
|
|
33
34
|
type TypeDtoMutateRelationResultEntityInner<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = [
|
|
34
35
|
Columns
|
|
35
36
|
] extends [string | string[]] ? TypeDtoMutateRelationResultEntityFromColumns<TRecord, Columns, TMutateTypeTopLevel, TTopLevel> : TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<TRecord, TMutateTypeTopLevel, TColumnsOmitDefault>;
|
|
36
37
|
type TypeDtoMutateRelationResultEntityFromColumns<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TypeUtilEntitySelector<TRecord, TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumns<TypeUtilPrepareColumns<Columns>, TMutateTypeTopLevel, TTopLevel>>>;
|
|
37
38
|
type TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<TRecord, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined> = TypeUtilEntityOmit<TRecord, TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel, TColumnsOmitDefault>>>;
|
|
38
39
|
type TypeDtoMutateRelationResultPrepareColumns<TColumns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TTopLevel extends true ? TColumns : TMutateTypeTopLevel extends 'create' ? TypeOmitStringUnion<TColumns, 'deleted' | 'id'> : (TColumns | 'deleted' | 'id');
|
|
39
|
-
type TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined> = TColumnsOmitDefault extends string | string[] ? TColumnsOmitDefault : TMutateTypeTopLevel extends 'create' ? [
|
|
40
|
-
'id',
|
|
41
|
-
'iid',
|
|
42
|
-
'deleted',
|
|
43
|
-
'createdAt',
|
|
44
|
-
'updatedAt'
|
|
45
|
-
] : [
|
|
46
|
-
'iid',
|
|
47
|
-
'createdAt',
|
|
48
|
-
'updatedAt'
|
|
49
|
-
];
|
|
40
|
+
type TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined> = TColumnsOmitDefault extends string | string[] ? TColumnsOmitDefault : TMutateTypeTopLevel extends 'create' ? ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'] : ['iid', 'createdAt', 'updatedAt'];
|
|
50
41
|
export {};
|
package/dist/types/model.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Knex } from 'knex';
|
|
2
|
+
import type { TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
3
|
import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
|
|
3
4
|
import type { TypeModelColumn, TypeModelColumns, TypeModelColumnsPatch, TypeModelWhere } from './modelWhere.ts';
|
|
4
5
|
import type { TypeModelOfModelLike, TypeModelParamsInclude, TypeModelsClassLikeGeneral, TypeSymbolKeyEntity } from './relations.ts';
|
|
@@ -51,6 +52,7 @@ export interface IModelMethodOptionsGeneral {
|
|
|
51
52
|
disableCacheQuery?: boolean;
|
|
52
53
|
disableCacheEntity?: boolean;
|
|
53
54
|
deleted?: boolean;
|
|
55
|
+
cache?: TSummerCacheActionOptions<unknown, unknown>;
|
|
54
56
|
}
|
|
55
57
|
export interface IModelInsertOptionsGeneral<_TRecord, Model extends BeanModelMeta | undefined = undefined> extends IModelMethodOptionsGeneral, IModelMutateRelationIncludeWrapper<Model> {
|
|
56
58
|
}
|
|
@@ -26,6 +26,9 @@ export type TypeModelParamsRelationOptions<Relation> = boolean | (Omit<TypeUtilG
|
|
|
26
26
|
export type TypeUtilGetRelationType<Relation> = Relation extends {
|
|
27
27
|
type?: infer TYPE;
|
|
28
28
|
} ? TYPE : undefined;
|
|
29
|
+
export type TypeUtilGetRelationKey<Relation> = Relation extends {
|
|
30
|
+
key?: infer KEY;
|
|
31
|
+
} ? KEY : undefined;
|
|
29
32
|
export type TypeUtilGetRelationModel<Relation> = Relation extends {
|
|
30
33
|
model?: ((() => Constructable<infer MODEL extends BeanModelMeta>) | Constructable<infer MODEL extends BeanModelMeta>);
|
|
31
34
|
} ? MODEL : Relation extends {
|
|
@@ -10,22 +10,22 @@ import type { TypeModelClassLike, TypeModelOfModelLike, TypeModelsClassLikeGener
|
|
|
10
10
|
import type { TypeEntityTableColumnNamesOfGeneral, TypeEntityTableColumnsOfGeneral } from './relationsColumns.ts';
|
|
11
11
|
import type { TypeEntityTableNamesOfGeneral } from './relationsTables.ts';
|
|
12
12
|
export type TypeModelRelationType = 'hasOne' | 'belongsTo' | 'hasMany' | 'belongsToMany';
|
|
13
|
-
export interface IModelRelationHasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>> {
|
|
13
|
+
export interface IModelRelationHasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity] | undefined = keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>> {
|
|
14
14
|
type?: 'hasOne';
|
|
15
15
|
model?: TypeModelClassLike<MODEL>;
|
|
16
|
-
key?:
|
|
16
|
+
key?: KEY;
|
|
17
17
|
options?: IModelRelationOptionsOne<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS>;
|
|
18
18
|
}
|
|
19
|
-
export interface IModelRelationBelongsTo<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>> {
|
|
19
|
+
export interface IModelRelationBelongsTo<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>> {
|
|
20
20
|
type?: 'belongsTo';
|
|
21
21
|
model?: TypeModelClassLike<MODEL>;
|
|
22
22
|
key?: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity];
|
|
23
23
|
options?: IModelRelationOptionsOne<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS>;
|
|
24
24
|
}
|
|
25
|
-
export interface IModelRelationHasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined, Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined> {
|
|
25
|
+
export interface IModelRelationHasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity] | undefined = keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined, Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined> {
|
|
26
26
|
type?: 'hasMany';
|
|
27
27
|
model?: TypeModelClassLike<MODEL>;
|
|
28
|
-
key?:
|
|
28
|
+
key?: KEY;
|
|
29
29
|
options?: IModelRelationOptionsMany<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS, ModelJoins, Aggrs, Groups>;
|
|
30
30
|
}
|
|
31
31
|
export interface IModelRelationBelongsToMany<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined, Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined> {
|
|
@@ -36,7 +36,7 @@ export interface IModelRelationBelongsToMany<MODELMiddle extends BeanModelMeta |
|
|
|
36
36
|
keyTo?: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity];
|
|
37
37
|
options?: IModelRelationOptionsMany<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS, ModelJoins, Aggrs, Groups>;
|
|
38
38
|
}
|
|
39
|
-
export interface IModelRelationOptionsOne<MODEL extends BeanModelMeta, AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<MODEL[TypeSymbolKeyEntity]> = TypeModelColumn<MODEL[TypeSymbolKeyEntity]>> extends IModelRelationOptionsMetaWrapper {
|
|
39
|
+
export interface IModelRelationOptionsOne<MODEL extends BeanModelMeta, AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<MODEL[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<MODEL[TypeSymbolKeyEntity]>> extends IModelRelationOptionsMetaWrapper {
|
|
40
40
|
autoload?: AUTOLOAD;
|
|
41
41
|
columns?: TypeModelColumnsPatch<MODEL[TypeSymbolKeyEntity], COLUMNS>;
|
|
42
42
|
}
|
|
@@ -57,4 +57,4 @@ export interface IModelRelationOptionsMetaWrapper {
|
|
|
57
57
|
meta?: IModelRelationOptionsMeta;
|
|
58
58
|
}
|
|
59
59
|
export type TypeModelRelationOptionsMetaClient = '_auto_' | '_initial_' | '_inherit_' | keyof IDatabaseClientRecord | ServiceDb;
|
|
60
|
-
export type IRelationItem = [string, any, any, any];
|
|
60
|
+
export type IRelationItem = [string, any, any, any, boolean];
|
|
@@ -8,10 +8,10 @@ import type { TypeEntityTableColumnNamesOfGeneral, TypeEntityTableColumnsOfGener
|
|
|
8
8
|
import type { IModelRelationOptionsMetaWrapper } from './relationsDef.ts';
|
|
9
9
|
import type { TypeModelSelectGroupParamsColumnNames } from './relationsGroup.ts';
|
|
10
10
|
import type { TypeEntityTableNamesOfGeneral } from './relationsTables.ts';
|
|
11
|
-
export interface IModelRelationHasOneDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined> {
|
|
11
|
+
export interface IModelRelationHasOneDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined> {
|
|
12
12
|
type?: 'hasOne';
|
|
13
13
|
model?: TypeModelClassLike<MODEL>;
|
|
14
|
-
key?:
|
|
14
|
+
key?: KEY;
|
|
15
15
|
options?: OPTIONS;
|
|
16
16
|
}
|
|
17
17
|
export interface IModelRelationBelongsToDynamic<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined> {
|
|
@@ -20,10 +20,10 @@ export interface IModelRelationBelongsToDynamic<MODELSelf extends BeanModelMeta
|
|
|
20
20
|
key?: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity];
|
|
21
21
|
options?: OPTIONS;
|
|
22
22
|
}
|
|
23
|
-
export interface IModelRelationHasManyDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined> {
|
|
23
|
+
export interface IModelRelationHasManyDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined> {
|
|
24
24
|
type?: 'hasMany';
|
|
25
25
|
model?: TypeModelClassLike<MODEL>;
|
|
26
|
-
key?:
|
|
26
|
+
key?: KEY;
|
|
27
27
|
options?: OPTIONS;
|
|
28
28
|
}
|
|
29
29
|
export interface IModelRelationBelongsToManyDynamic<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined> {
|