vona-module-a-orm 5.1.4 → 5.1.6

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 (157) hide show
  1. package/cli/entity/metadata/generate.ts +13 -3
  2. package/cli/model/metadata/generate.ts +6 -3
  3. package/cli/model/metadata/magic.ts +6 -1
  4. package/dist/.metadata/locales.d.ts.map +1 -1
  5. package/dist/bean/aopMethod.transaction.d.ts.map +1 -1
  6. package/dist/bean/bean.database.d.ts.map +1 -1
  7. package/dist/bean/bean.databaseDialectBase.d.ts +3 -3
  8. package/dist/bean/bean.databaseDialectBase.d.ts.map +1 -1
  9. package/dist/bean/bean.model/bean.model_cache.d.ts.map +1 -1
  10. package/dist/bean/bean.model/bean.model_crud.d.ts.map +1 -1
  11. package/dist/bean/bean.model/bean.model_crud_inner.d.ts.map +1 -1
  12. package/dist/bean/bean.model/bean.model_crud_table.d.ts.map +1 -1
  13. package/dist/bean/bean.model/bean.model_knex.d.ts.map +1 -1
  14. package/dist/bean/bean.model/bean.model_meta.d.ts.map +1 -1
  15. package/dist/bean/bean.model/bean.model_utils.d.ts +1 -0
  16. package/dist/bean/bean.model/bean.model_utils.d.ts.map +1 -1
  17. package/dist/bean/bean.model/bean.model_view.d.ts.map +1 -1
  18. package/dist/bean/event.clientNameReal.d.ts.map +1 -1
  19. package/dist/bean/event.columnsClear.d.ts.map +1 -1
  20. package/dist/bean/queue.doubleDelete.d.ts.map +1 -1
  21. package/dist/bean/schedule.softDeletionPrune.d.ts.map +1 -1
  22. package/dist/common/buildWhere.d.ts.map +1 -1
  23. package/dist/common/utils.d.ts.map +1 -1
  24. package/dist/config/config.d.ts +3 -0
  25. package/dist/config/config.d.ts.map +1 -1
  26. package/dist/extend/schemaBuilder.d.ts.map +1 -1
  27. package/dist/extend/tableBuilder.d.ts.map +1 -1
  28. package/dist/index.js +59 -28
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/const.d.ts.map +1 -1
  31. package/dist/lib/databaseDialect.d.ts.map +1 -1
  32. package/dist/lib/dto/dtoAggregate.d.ts.map +1 -1
  33. package/dist/lib/dto/dtoCreate.d.ts.map +1 -1
  34. package/dist/lib/dto/dtoGet.d.ts.map +1 -1
  35. package/dist/lib/dto/dtoGroup.d.ts.map +1 -1
  36. package/dist/lib/dto/dtoListAndCount.d.ts.map +1 -1
  37. package/dist/lib/dto/dtoMutate.d.ts.map +1 -1
  38. package/dist/lib/dto/dtoQueryPage.d.ts.map +1 -1
  39. package/dist/lib/dto/dtoSelectAndCount.d.ts.map +1 -1
  40. package/dist/lib/dto/dtoUpdate.d.ts.map +1 -1
  41. package/dist/lib/entity.d.ts.map +1 -1
  42. package/dist/lib/modelCacheBase.d.ts.map +1 -1
  43. package/dist/lib/relations.d.ts.map +1 -1
  44. package/dist/lib/relationsDynamic.d.ts.map +1 -1
  45. package/dist/lib/relationsMutate.d.ts.map +1 -1
  46. package/dist/lib/relationsStatic.d.ts.map +1 -1
  47. package/dist/lib/utils.d.ts.map +1 -1
  48. package/dist/main.d.ts.map +1 -1
  49. package/dist/service/columnsCache_.d.ts.map +1 -1
  50. package/dist/service/database.d.ts.map +1 -1
  51. package/dist/service/databaseClient_.d.ts.map +1 -1
  52. package/dist/service/relations_.d.ts.map +1 -1
  53. package/dist/service/transaction_.d.ts.map +1 -1
  54. package/dist/types/dto/dtoGet.d.ts.map +1 -1
  55. package/dist/types/dto/dtoGroup.d.ts.map +1 -1
  56. package/dist/types/dto/dtoMutate.d.ts.map +1 -1
  57. package/dist/types/dto/dtoQueryBase.d.ts.map +1 -1
  58. package/dist/types/dto/dtoSelectAndCount.d.ts.map +1 -1
  59. package/dist/types/entity.d.ts.map +1 -1
  60. package/dist/types/model.d.ts +5 -1
  61. package/dist/types/model.d.ts.map +1 -1
  62. package/dist/types/modelAggr.d.ts.map +1 -1
  63. package/dist/types/modelCount.d.ts.map +1 -1
  64. package/dist/types/modelGeneral.d.ts.map +1 -1
  65. package/dist/types/modelGroup.d.ts.map +1 -1
  66. package/dist/types/modelIncrement.d.ts.map +1 -1
  67. package/dist/types/modelWhere.d.ts.map +1 -1
  68. package/dist/types/onion/entity.d.ts +2 -2
  69. package/dist/types/onion/entity.d.ts.map +1 -1
  70. package/dist/types/onion/model.d.ts.map +1 -1
  71. package/dist/types/relations.d.ts.map +1 -1
  72. package/dist/types/relationsAggr.d.ts +1 -1
  73. package/dist/types/relationsAggr.d.ts.map +1 -1
  74. package/dist/types/relationsColumns.d.ts.map +1 -1
  75. package/dist/types/relationsDef.d.ts.map +1 -1
  76. package/dist/types/relationsDefDynamic.d.ts.map +1 -1
  77. package/dist/types/relationsDefMutate.d.ts.map +1 -1
  78. package/dist/types/relationsGroup.d.ts.map +1 -1
  79. package/dist/types/relationsMutate.d.ts.map +1 -1
  80. package/dist/types/relationsTables.d.ts.map +1 -1
  81. package/dist/types/transaction.d.ts.map +1 -1
  82. package/dist-cli/entity/metadata/generate.js +4 -1
  83. package/dist-cli/model/metadata/generate.js +4 -2
  84. package/package.json +1 -1
  85. package/src/.metadata/locales.ts +6 -1
  86. package/src/bean/aopMethod.transaction.ts +9 -2
  87. package/src/bean/bean.database.ts +33 -8
  88. package/src/bean/bean.databaseDialectBase.ts +50 -15
  89. package/src/bean/bean.model/bean.model_cache.ts +130 -46
  90. package/src/bean/bean.model/bean.model_crud.ts +28 -7
  91. package/src/bean/bean.model/bean.model_crud_inner.ts +48 -16
  92. package/src/bean/bean.model/bean.model_crud_table.ts +25 -5
  93. package/src/bean/bean.model/bean.model_knex.ts +18 -5
  94. package/src/bean/bean.model/bean.model_meta.ts +23 -5
  95. package/src/bean/bean.model/bean.model_utils.ts +63 -12
  96. package/src/bean/bean.model/bean.model_view.ts +20 -5
  97. package/src/bean/event.clientNameReal.ts +4 -1
  98. package/src/bean/event.columnsClear.ts +4 -1
  99. package/src/bean/queue.doubleDelete.ts +9 -2
  100. package/src/bean/schedule.softDeletionPrune.ts +3 -1
  101. package/src/common/buildWhere.ts +30 -5
  102. package/src/common/utils.ts +6 -2
  103. package/src/config/config.ts +3 -0
  104. package/src/extend/schemaBuilder.ts +2 -1
  105. package/src/extend/tableBuilder.ts +32 -19
  106. package/src/lib/const.ts +3 -1
  107. package/src/lib/databaseDialect.ts +3 -1
  108. package/src/lib/dto/dtoAggregate.ts +18 -6
  109. package/src/lib/dto/dtoCreate.ts +24 -4
  110. package/src/lib/dto/dtoGet.ts +82 -17
  111. package/src/lib/dto/dtoGroup.ts +24 -8
  112. package/src/lib/dto/dtoListAndCount.ts +3 -1
  113. package/src/lib/dto/dtoMutate.ts +26 -7
  114. package/src/lib/dto/dtoQueryPage.ts +4 -1
  115. package/src/lib/dto/dtoSelectAndCount.ts +3 -1
  116. package/src/lib/dto/dtoUpdate.ts +24 -4
  117. package/src/lib/entity.ts +10 -4
  118. package/src/lib/modelCacheBase.ts +9 -3
  119. package/src/lib/relations.ts +22 -4
  120. package/src/lib/relationsDynamic.ts +29 -7
  121. package/src/lib/relationsMutate.ts +28 -5
  122. package/src/lib/relationsStatic.ts +4 -1
  123. package/src/lib/utils.ts +11 -2
  124. package/src/main.ts +10 -2
  125. package/src/service/columnsCache_.ts +8 -6
  126. package/src/service/database.ts +34 -10
  127. package/src/service/databaseClient_.ts +4 -1
  128. package/src/service/relations_.ts +98 -23
  129. package/src/service/transaction_.ts +14 -4
  130. package/src/types/dto/dtoGet.ts +14 -6
  131. package/src/types/dto/dtoGroup.ts +2 -1
  132. package/src/types/dto/dtoMutate.ts +102 -20
  133. package/src/types/dto/dtoQueryBase.ts +5 -1
  134. package/src/types/dto/dtoSelectAndCount.ts +4 -1
  135. package/src/types/entity.ts +3 -1
  136. package/src/types/entityBase.ts +1 -1
  137. package/src/types/entityBaseInner.ts +4 -4
  138. package/src/types/entityBaseSimple.ts +1 -1
  139. package/src/types/model.ts +73 -16
  140. package/src/types/modelAggr.ts +18 -6
  141. package/src/types/modelCount.ts +4 -1
  142. package/src/types/modelGeneral.ts +26 -5
  143. package/src/types/modelGroup.ts +8 -2
  144. package/src/types/modelIncrement.ts +4 -1
  145. package/src/types/modelWhere.ts +12 -3
  146. package/src/types/onion/entity.ts +2 -2
  147. package/src/types/onion/model.ts +20 -4
  148. package/src/types/relations.ts +151 -47
  149. package/src/types/relationsAggr.ts +35 -11
  150. package/src/types/relationsColumns.ts +80 -57
  151. package/src/types/relationsDef.ts +82 -29
  152. package/src/types/relationsDefDynamic.ts +59 -13
  153. package/src/types/relationsDefMutate.ts +3 -1
  154. package/src/types/relationsGroup.ts +32 -10
  155. package/src/types/relationsMutate.ts +60 -19
  156. package/src/types/relationsTables.ts +16 -14
  157. package/src/types/transaction.ts +14 -2
@@ -31,7 +31,10 @@ export class BeanModelMeta<TRecord extends {} = {}> extends BeanBase {
31
31
  private [SymbolModelDb]?: ServiceDb;
32
32
  private [SymbolModelTable]?: TypeModelOptionsTable;
33
33
 
34
- protected __init__(clientName?: keyof IDatabaseClientRecord | ServiceDb, table?: TypeModelOptionsTable) {
34
+ protected __init__(
35
+ clientName?: keyof IDatabaseClientRecord | ServiceDb,
36
+ table?: TypeModelOptionsTable,
37
+ ) {
35
38
  // clientName
36
39
  if (!isNil(clientName)) {
37
40
  if (typeof clientName === 'string') {
@@ -115,7 +118,12 @@ export class BeanModelMeta<TRecord extends {} = {}> extends BeanBase {
115
118
  return this.options.disableUpdateTime ?? this.scopeOrm.config.model.disableUpdateTime;
116
119
  }
117
120
 
118
- protected _prepareDisableInstanceByOptions(table: keyof ITableRecord, data: any, options?: IModelMethodOptionsGeneral, useRaw?: boolean) {
121
+ protected _prepareDisableInstanceByOptions(
122
+ table: keyof ITableRecord,
123
+ data: any,
124
+ options?: IModelMethodOptionsGeneral,
125
+ useRaw?: boolean,
126
+ ) {
119
127
  const columnNameInstance = useRaw ? 'iid' : `${getTableOrTableAlias(table)}.iid`;
120
128
  if (this._checkDisableInstanceByOptions(options)) {
121
129
  delete data.iid;
@@ -130,7 +138,12 @@ export class BeanModelMeta<TRecord extends {} = {}> extends BeanBase {
130
138
  return data;
131
139
  }
132
140
 
133
- protected _prepareDisableDeletedByOptions(table: keyof ITableRecord, data: any, options?: IModelMethodOptionsGeneral, useRaw?: boolean) {
141
+ protected _prepareDisableDeletedByOptions(
142
+ table: keyof ITableRecord,
143
+ data: any,
144
+ options?: IModelMethodOptionsGeneral,
145
+ useRaw?: boolean,
146
+ ) {
134
147
  const columnNameDeleted = useRaw ? 'deleted' : `${getTableOrTableAlias(table)}.deleted`;
135
148
  const deleted = this._prepareDisableDeletedByOptionsSimple(options);
136
149
  if (!isNil(deleted)) {
@@ -140,7 +153,9 @@ export class BeanModelMeta<TRecord extends {} = {}> extends BeanBase {
140
153
  return data;
141
154
  }
142
155
 
143
- protected _prepareDisableDeletedByOptionsSimple(options?: IModelMethodOptionsGeneral): boolean | undefined {
156
+ protected _prepareDisableDeletedByOptionsSimple(
157
+ options?: IModelMethodOptionsGeneral,
158
+ ): boolean | undefined {
144
159
  if (!isNil(options?.deleted)) {
145
160
  if (!this.disableDeleted) {
146
161
  return options?.deleted;
@@ -177,7 +192,10 @@ export class BeanModelMeta<TRecord extends {} = {}> extends BeanBase {
177
192
  return options?.disableUpdateTime ?? this.disableUpdateTime;
178
193
  }
179
194
 
180
- public newInstance(client?: keyof IDatabaseClientRecord | ServiceDb, table?: TypeModelOptionsTable): this {
195
+ public newInstance(
196
+ client?: keyof IDatabaseClientRecord | ServiceDb,
197
+ table?: TypeModelOptionsTable,
198
+ ): this {
181
199
  return this.app.bean._newBean(this.$beanFullName as any, client ?? this.db, table);
182
200
  }
183
201
 
@@ -25,7 +25,10 @@ import { BeanModelMeta } from './bean.model_meta.ts';
25
25
 
26
26
  export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
27
27
  async prepareData(item?: Partial<TRecord>): Promise<[TRecord, TRecord]>;
28
- async prepareData(table: keyof ITableRecord, item?: Partial<TRecord>): Promise<[TRecord, TRecord]>;
28
+ async prepareData(
29
+ table: keyof ITableRecord,
30
+ item?: Partial<TRecord>,
31
+ ): Promise<[TRecord, TRecord]>;
29
32
  async prepareData(table?, item?): Promise<[TRecord, TRecord]> {
30
33
  if (typeof table !== 'string') {
31
34
  item = table;
@@ -73,8 +76,14 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
73
76
  }
74
77
 
75
78
  raw(value: Knex.Value): Knex.Raw<any>;
76
- raw<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(sql: string, binding: Knex.RawBinding): Knex.Raw<TResult2>;
77
- raw<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(sql: string, bindings: readonly Knex.RawBinding[] | Knex.ValueDict): Knex.Raw<TResult2>;
79
+ raw<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(
80
+ sql: string,
81
+ binding: Knex.RawBinding,
82
+ ): Knex.Raw<TResult2>;
83
+ raw<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(
84
+ sql: string,
85
+ bindings: readonly Knex.RawBinding[] | Knex.ValueDict,
86
+ ): Knex.Raw<TResult2>;
78
87
  raw(sql, bindings?) {
79
88
  return this.connection.raw(sql, bindings);
80
89
  }
@@ -114,7 +123,10 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
114
123
  }
115
124
  }
116
125
 
117
- buildDistinct(builder: Knex.QueryBuilder, distinct?: boolean | keyof TRecord | (keyof TRecord)[]) {
126
+ buildDistinct(
127
+ builder: Knex.QueryBuilder,
128
+ distinct?: boolean | keyof TRecord | (keyof TRecord)[],
129
+ ) {
118
130
  if (distinct === undefined || distinct === false) return;
119
131
  if (distinct === true) {
120
132
  builder.distinct();
@@ -125,7 +137,11 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
125
137
  }
126
138
  }
127
139
 
128
- buildCount(builder: Knex.QueryBuilder, column?: TypeModelColumn<TRecord>, distinct?: boolean | keyof TRecord | (keyof TRecord)[]) {
140
+ buildCount(
141
+ builder: Knex.QueryBuilder,
142
+ column?: TypeModelColumn<TRecord>,
143
+ distinct?: boolean | keyof TRecord | (keyof TRecord)[],
144
+ ) {
129
145
  if (column !== undefined) {
130
146
  builder.count(column);
131
147
  } else if (distinct !== undefined && distinct !== false) {
@@ -158,7 +174,11 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
158
174
  }
159
175
  }
160
176
 
161
- buildColumns(builder: Knex.QueryBuilder, columns?: TypeModelColumns<TRecord>, groups?: (keyof TRecord)[] | undefined) {
177
+ buildColumns(
178
+ builder: Knex.QueryBuilder,
179
+ columns?: TypeModelColumns<TRecord>,
180
+ groups?: (keyof TRecord)[] | undefined,
181
+ ) {
162
182
  if (columns) {
163
183
  builder.select(columns as any);
164
184
  } else if (groups) {
@@ -191,16 +211,27 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
191
211
  this.buildOffset(builder, page.index);
192
212
  }
193
213
 
194
- prepareHaving(builder: Knex.QueryBuilder, having?: TypeModelWhere<TRecord, TypeModelSelectGroupParamsColumns<TRecord>>) {
214
+ prepareHaving(
215
+ builder: Knex.QueryBuilder,
216
+ having?: TypeModelWhere<TRecord, TypeModelSelectGroupParamsColumns<TRecord>>,
217
+ ) {
195
218
  if (!having) return;
196
219
  this.buildHaving(builder, having);
197
220
  }
198
221
 
199
- buildHaving(builder: Knex.QueryBuilder, having: TypeModelWhere<TRecord, TypeModelSelectGroupParamsColumns<TRecord>>) {
222
+ buildHaving(
223
+ builder: Knex.QueryBuilder,
224
+ having: TypeModelWhere<TRecord, TypeModelSelectGroupParamsColumns<TRecord>>,
225
+ ) {
200
226
  return buildWhere(this.db, builder, having, true);
201
227
  }
202
228
 
203
- prepareWhere(builder: Knex.QueryBuilder, table?: keyof ITableRecord, where?: TypeModelWhere<TRecord>, options?: IModelMethodOptionsGeneral) {
229
+ prepareWhere(
230
+ builder: Knex.QueryBuilder,
231
+ table?: keyof ITableRecord,
232
+ where?: TypeModelWhere<TRecord>,
233
+ options?: IModelMethodOptionsGeneral,
234
+ ) {
204
235
  // table
205
236
  table = table || this.getTable(where);
206
237
  if (!table) throw new Error('should specify the table name');
@@ -225,7 +256,11 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
225
256
  return String(value);
226
257
  }
227
258
 
228
- extractFirstValue(result: Array<object> | object, defaultValue?: any, columnName?: string): any | undefined {
259
+ extractFirstValue(
260
+ result: Array<object> | object,
261
+ defaultValue?: any,
262
+ columnName?: string,
263
+ ): any | undefined {
229
264
  const value = this._extractFirstValue(result, columnName);
230
265
  if (value === undefined || value === null) return defaultValue;
231
266
  return value;
@@ -240,7 +275,11 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
240
275
  return res[keys[0]];
241
276
  }
242
277
 
243
- protected _prepareWhereByOptions(table: keyof ITableRecord, where, options?: IModelMethodOptionsGeneral) {
278
+ protected _prepareWhereByOptions(
279
+ table: keyof ITableRecord,
280
+ where,
281
+ options?: IModelMethodOptionsGeneral,
282
+ ) {
244
283
  // disableInstance: should not check if specified
245
284
  where = this._prepareDisableInstanceByOptions(table, where, options);
246
285
  // disableDeleted: should not check if specified
@@ -249,7 +288,11 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
249
288
  return where;
250
289
  }
251
290
 
252
- protected _prepareInsertDataByOptions(table: keyof ITableRecord, data, options?: IModelMethodOptionsGeneral) {
291
+ protected _prepareInsertDataByOptions(
292
+ table: keyof ITableRecord,
293
+ data,
294
+ options?: IModelMethodOptionsGeneral,
295
+ ) {
253
296
  let result = Object.assign({}, data);
254
297
  // disableInstance: should not check if specified
255
298
  result = this._prepareDisableInstanceByOptions(table, result, options, true);
@@ -272,4 +315,12 @@ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
272
315
  }
273
316
  return result;
274
317
  }
318
+
319
+ protected _ellipsis‌Logger(str: string) {
320
+ const maxLength = this.scopeOrm.config.logger.maxLength;
321
+ if (str.length > maxLength) {
322
+ str = str.substring(0, maxLength) + ' ...';
323
+ }
324
+ return str;
325
+ }
275
326
  }
@@ -7,7 +7,10 @@ import { cast } from 'vona';
7
7
  import { BeanModelKnex } from './bean.model_knex.ts';
8
8
 
9
9
  export class BeanModelView<TRecord extends {}> extends BeanModelKnex<TRecord> {
10
- async createView(viewName: string, callback?: (viewBuilder: Knex.ViewBuilder) => any): Promise<void> {
10
+ async createView(
11
+ viewName: string,
12
+ callback?: (viewBuilder: Knex.ViewBuilder) => any,
13
+ ): Promise<void> {
11
14
  if (callback) {
12
15
  // create view
13
16
  let _view: Knex.ViewBuilder | null = null;
@@ -42,7 +45,10 @@ export class BeanModelView<TRecord extends {}> extends BeanModelKnex<TRecord> {
42
45
  }
43
46
  }
44
47
 
45
- async alterView(viewName: string, callback?: (viewBuilder: Knex.ViewBuilder) => any): Promise<void> {
48
+ async alterView(
49
+ viewName: string,
50
+ callback?: (viewBuilder: Knex.ViewBuilder) => any,
51
+ ): Promise<void> {
46
52
  await this._viewDependentsAll_handle(viewName, async () => {
47
53
  // drop view
48
54
  await this.dropView(viewName, true);
@@ -51,7 +57,10 @@ export class BeanModelView<TRecord extends {}> extends BeanModelKnex<TRecord> {
51
57
  });
52
58
  }
53
59
 
54
- async createTable(tableName: string, callback: (tableBuilder: Knex.CreateTableBuilder) => any): Promise<void> {
60
+ async createTable(
61
+ tableName: string,
62
+ callback: (tableBuilder: Knex.CreateTableBuilder) => any,
63
+ ): Promise<void> {
55
64
  await this.schema.createTable(tableName, callback);
56
65
  }
57
66
 
@@ -59,7 +68,11 @@ export class BeanModelView<TRecord extends {}> extends BeanModelKnex<TRecord> {
59
68
  await this.schema.dropTable(tableName);
60
69
  }
61
70
 
62
- async alterTable(tableName: string, callback: (tableBuilder: Knex.CreateTableBuilder) => any, alterViewAuto?: boolean): Promise<void> {
71
+ async alterTable(
72
+ tableName: string,
73
+ callback: (tableBuilder: Knex.CreateTableBuilder) => any,
74
+ alterViewAuto?: boolean,
75
+ ): Promise<void> {
63
76
  if (!alterViewAuto) {
64
77
  // alter table
65
78
  return await this.schema.alterTable(tableName, table => {
@@ -99,7 +112,9 @@ export class BeanModelView<TRecord extends {}> extends BeanModelKnex<TRecord> {
99
112
  // dependencies
100
113
  const view = views.find(view => view.name === dependent);
101
114
  if (view) {
102
- const dep = cast(view.dependencies).find(dep => dep.toLowerCase() === viewName.toLowerCase());
115
+ const dep = cast(view.dependencies).find(
116
+ dep => dep.toLowerCase() === viewName.toLowerCase(),
117
+ );
103
118
  if (!dep) {
104
119
  cast(view.dependencies).push(viewName);
105
120
  }
@@ -7,4 +7,7 @@ export type TypeEventClientNameRealData = keyof IDatabaseClientRecord;
7
7
  export type TypeEventClientNameRealResult = keyof IDatabaseClientRecord;
8
8
 
9
9
  @Event()
10
- export class EventClientNameReal extends BeanEventBase<TypeEventClientNameRealData, TypeEventClientNameRealResult> {}
10
+ export class EventClientNameReal extends BeanEventBase<
11
+ TypeEventClientNameRealData,
12
+ TypeEventClientNameRealResult
13
+ > {}
@@ -10,4 +10,7 @@ export interface TypeEventColumnsClearData {
10
10
  export type TypeEventColumnsClearResult = void;
11
11
 
12
12
  @Event()
13
- export class EventColumnsClear extends BeanEventBase<TypeEventColumnsClearData, TypeEventColumnsClearResult> {}
13
+ export class EventColumnsClear extends BeanEventBase<
14
+ TypeEventColumnsClearData,
15
+ TypeEventColumnsClearResult
16
+ > {}
@@ -22,8 +22,15 @@ export class QueueDoubleDelete
22
22
  extends BeanQueueBase<TypeQueueDoubleDeleteJobData, TypeQueueDoubleDeleteJobResult>
23
23
  implements IQueueExecute<TypeQueueDoubleDeleteJobData, TypeQueueDoubleDeleteJobResult>
24
24
  {
25
- async execute(data: TypeQueueDoubleDeleteJobData, _options?: IQueuePushOptions): Promise<TypeQueueDoubleDeleteJobResult> {
26
- const beanInstance = this.app.bean._newBean(data.beanFullName as any, data.clientName, data.table);
25
+ async execute(
26
+ data: TypeQueueDoubleDeleteJobData,
27
+ _options?: IQueuePushOptions,
28
+ ): Promise<TypeQueueDoubleDeleteJobResult> {
29
+ const beanInstance = this.app.bean._newBean(
30
+ data.beanFullName as any,
31
+ data.clientName,
32
+ data.table,
33
+ );
27
34
  await beanInstance[data.method](...data.args);
28
35
  }
29
36
  }
@@ -13,7 +13,9 @@ export class ScheduleSoftDeletionPrune extends BeanBase implements IScheduleExec
13
13
  const onionSlices = this.bean.onion.model.getOnionsEnabledCached();
14
14
  for (const onionSlice of onionSlices) {
15
15
  if (onionSlice.beanOptions.options?.disableDeleted) continue;
16
- let softDeletionPrune = onionSlice.beanOptions.options?.softDeletionPrune ?? this.scope.config.softDeletionPrune.enable;
16
+ let softDeletionPrune =
17
+ onionSlice.beanOptions.options?.softDeletionPrune ??
18
+ this.scope.config.softDeletionPrune.enable;
17
19
  if (!softDeletionPrune) continue;
18
20
  if (softDeletionPrune === true) softDeletionPrune = {};
19
21
  await this._modulePrune(onionSlice, softDeletionPrune);
@@ -4,12 +4,23 @@ import { isNil } from '@cabloy/utils';
4
4
  import { cast } from 'vona';
5
5
 
6
6
  import type { ServiceDb } from '../service/db_.ts';
7
- import type { TypeModelColumnValue, TypeModelWhere, TypeModelWhereFieldAll, TypeOpsJoint, TypeOpsNormal } from '../types/modelWhere.ts';
7
+ import type {
8
+ TypeModelColumnValue,
9
+ TypeModelWhere,
10
+ TypeModelWhereFieldAll,
11
+ TypeOpsJoint,
12
+ TypeOpsNormal,
13
+ } from '../types/modelWhere.ts';
8
14
 
9
15
  import { Op, OpAggrs, OpJointValues, OpNormalValues } from '../types/modelWhere.ts';
10
16
  import { isRaw, isRef } from './utils.ts';
11
17
 
12
- export function buildWhere<TRecord>(db: ServiceDb, builder: Knex.QueryBuilder, wheres: TypeModelWhere<TRecord>, having: boolean = false) {
18
+ export function buildWhere<TRecord>(
19
+ db: ServiceDb,
20
+ builder: Knex.QueryBuilder,
21
+ wheres: TypeModelWhere<TRecord>,
22
+ having: boolean = false,
23
+ ) {
13
24
  _buildWhereInner(having, db, builder, wheres);
14
25
  }
15
26
 
@@ -111,7 +122,9 @@ function _buildWhereColumn<TRecord>(
111
122
  db: ServiceDb,
112
123
  builder: Knex.QueryBuilder,
113
124
  column: keyof TRecord,
114
- value: TypeModelColumnValue<TRecord, TRecord[keyof TRecord]> | TypeModelWhereFieldAll<TRecord, TRecord[keyof TRecord]>,
125
+ value:
126
+ | TypeModelColumnValue<TRecord, TRecord[keyof TRecord]>
127
+ | TypeModelWhereFieldAll<TRecord, TRecord[keyof TRecord]>,
115
128
  op?: TypeOpsNormal,
116
129
  ) {
117
130
  // skip
@@ -206,11 +219,23 @@ function _buildWhereColumnOpNormal<TRecord>(
206
219
  }
207
220
 
208
221
  function _getOpLikeReal(having: boolean, db: ServiceDb) {
209
- return db.dialect.capabilities.like ? (having ? 'havingLike' : 'whereLike') : having ? 'havingILike' : 'whereILike';
222
+ return db.dialect.capabilities.like
223
+ ? having
224
+ ? 'havingLike'
225
+ : 'whereLike'
226
+ : having
227
+ ? 'havingILike'
228
+ : 'whereILike';
210
229
  }
211
230
 
212
231
  function _getOpILikeReal(having: boolean, db: ServiceDb) {
213
- return db.dialect.capabilities.ilike ? (having ? 'havingILike' : 'whereILike') : having ? 'havingLike' : 'whereLike';
232
+ return db.dialect.capabilities.ilike
233
+ ? having
234
+ ? 'havingILike'
235
+ : 'whereILike'
236
+ : having
237
+ ? 'havingLike'
238
+ : 'whereLike';
214
239
  }
215
240
 
216
241
  function _checkHavingColumn<TRecord>(db: ServiceDb, column: keyof TRecord | string) {
@@ -26,7 +26,9 @@ export function getTargetColumnName(column: string) {
26
26
  return column;
27
27
  }
28
28
 
29
- export function prepareColumns<TRecord>(columns?: TypeModelColumns<TRecord>): Array<TypeModelColumn<TRecord>> | undefined {
29
+ export function prepareColumns<TRecord>(
30
+ columns?: TypeModelColumns<TRecord>,
31
+ ): Array<TypeModelColumn<TRecord>> | undefined {
30
32
  if (!columns) return undefined;
31
33
  columns = Array.isArray(columns) ? columns : [columns];
32
34
  if (columns.includes('*')) return undefined;
@@ -34,7 +36,9 @@ export function prepareColumns<TRecord>(columns?: TypeModelColumns<TRecord>): Ar
34
36
  }
35
37
 
36
38
  export function prepareClassModel<ModelLike extends BeanModelMeta | keyof IModelClassRecord>(
37
- classType: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
39
+ classType: ModelLike extends BeanModelMeta
40
+ ? (() => Constructable<ModelLike>) | Constructable<ModelLike>
41
+ : ModelLike,
38
42
  ): Constructable<ModelLike> {
39
43
  if (typeof classType === 'string') {
40
44
  const beanOptions = appResource.getBean(beanFullNameFromOnionName(classType, 'model'));
@@ -56,5 +56,8 @@ export function config(_app: VonaApplication) {
56
56
  client: 'model',
57
57
  },
58
58
  },
59
+ logger: {
60
+ maxLength: 256,
61
+ },
59
62
  };
60
63
  }
@@ -10,7 +10,8 @@ import type { IFetchDatabasesResultItem, IFetchIndexesResultItem } from '../type
10
10
  export function ExtendSchemaBuilder(app: VonaApplication) {
11
11
  ['fetchDatabases', 'createDatabase', 'dropDatabase', 'fetchIndexes'].forEach(method => {
12
12
  knex.SchemaBuilder.extend(method, async function (...args) {
13
- const client = cast<Knex.Client>(cast(this).client).config.client as keyof IDatabaseClientDialectRecord;
13
+ const client = cast<Knex.Client>(cast(this).client).config
14
+ .client as keyof IDatabaseClientDialectRecord;
14
15
  const dialect = app.bean.database.getDialect(client);
15
16
  return await dialect[method](this, ...args);
16
17
  });
@@ -14,7 +14,11 @@ export interface IBasicFieldsOptions {
14
14
 
15
15
  export function ExtendTableBuilder(app: VonaApplication) {
16
16
  const scope = app.scope(__ThisModule__);
17
- function _basicFields(this: knex.Knex.TableBuilder, options?: IBasicFieldsOptions, identityType?: TableIdentityType) {
17
+ function _basicFields(
18
+ this: knex.Knex.TableBuilder,
19
+ options?: IBasicFieldsOptions,
20
+ identityType?: TableIdentityType,
21
+ ) {
18
22
  options = options || ({} as IBasicFieldsOptions);
19
23
  if (options.id !== false) {
20
24
  const _identityType = identityType ?? scope.config.table.identityType;
@@ -32,24 +36,33 @@ export function ExtendTableBuilder(app: VonaApplication) {
32
36
  return this;
33
37
  }
34
38
 
35
- knex.TableBuilder.extend('basicFields', function (this: knex.Knex.TableBuilder, options?: IBasicFieldsOptions) {
36
- _basicFields.call(this, options, undefined);
37
- return this;
38
- });
39
- knex.TableBuilder.extend('basicFieldsSimple', function (this: knex.Knex.TableBuilder, options?: IBasicFieldsOptions) {
40
- _basicFields.call(this, options, 'number');
41
- return this;
42
- });
43
- knex.TableBuilder.extend('tableIdentity', function (this: knex.Knex.TableBuilder, columnName: string) {
44
- const _identityType = scope.config.table.identityType;
45
- if (_identityType === 'bigint') {
46
- return this.bigInteger(columnName); // default value is null
47
- } else if (_identityType === 'number') {
48
- return this.integer(columnName); // default value is null
49
- } else {
50
- throw new Error(`Should create column ${columnName} by yourself`);
51
- }
52
- });
39
+ knex.TableBuilder.extend(
40
+ 'basicFields',
41
+ function (this: knex.Knex.TableBuilder, options?: IBasicFieldsOptions) {
42
+ _basicFields.call(this, options, undefined);
43
+ return this;
44
+ },
45
+ );
46
+ knex.TableBuilder.extend(
47
+ 'basicFieldsSimple',
48
+ function (this: knex.Knex.TableBuilder, options?: IBasicFieldsOptions) {
49
+ _basicFields.call(this, options, 'number');
50
+ return this;
51
+ },
52
+ );
53
+ knex.TableBuilder.extend(
54
+ 'tableIdentity',
55
+ function (this: knex.Knex.TableBuilder, columnName: string) {
56
+ const _identityType = scope.config.table.identityType;
57
+ if (_identityType === 'bigint') {
58
+ return this.bigInteger(columnName); // default value is null
59
+ } else if (_identityType === 'number') {
60
+ return this.integer(columnName); // default value is null
61
+ } else {
62
+ throw new Error(`Should create column ${columnName} by yourself`);
63
+ }
64
+ },
65
+ );
53
66
  knex.TableBuilder.extend('userId', function (this: knex.Knex.TableBuilder, columnName?: string) {
54
67
  return this.tableIdentity(columnName ?? 'userId');
55
68
  });
package/src/lib/const.ts CHANGED
@@ -25,7 +25,9 @@ export function getCacheModelCacheInstances(app: VonaApplication) {
25
25
  return app.meta[SymbolCacheModelCacheInstances];
26
26
  }
27
27
 
28
- export function getCacheModelsClear(app: VonaApplication): Record<keyof IModelRecord, TypeModelClassLikeGeneral[]> {
28
+ export function getCacheModelsClear(
29
+ app: VonaApplication,
30
+ ): Record<keyof IModelRecord, TypeModelClassLikeGeneral[]> {
29
31
  if (!app.meta[SymbolCacheModelsClear]) {
30
32
  app.meta[SymbolCacheModelsClear] = _collectModelsClear(app);
31
33
  }
@@ -2,6 +2,8 @@ import { createBeanDecorator } from 'vona';
2
2
 
3
3
  import type { IDecoratorDatabaseDialectOptions } from '../types/index.ts';
4
4
 
5
- export function DatabaseDialect<T extends IDecoratorDatabaseDialectOptions>(options?: T): ClassDecorator {
5
+ export function DatabaseDialect<T extends IDecoratorDatabaseDialectOptions>(
6
+ options?: T,
7
+ ): ClassDecorator {
6
8
  return createBeanDecorator('databaseDialect', options);
7
9
  }
@@ -11,20 +11,28 @@ import type { IModelClassRecord } from '../../types/onion/model.ts';
11
11
  import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../../types/relations.ts';
12
12
 
13
13
  export function DtoAggregate<
14
- Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>,
14
+ Aggrs extends TypeModelSelectAggrParamsAggrs<
15
+ TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]
16
+ >,
15
17
  ModelLike extends BeanModelMeta | keyof IModelClassRecord,
16
18
  >(
17
- modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
19
+ modelLike: ModelLike extends BeanModelMeta
20
+ ? (() => Constructable<ModelLike>) | Constructable<ModelLike>
21
+ : ModelLike,
18
22
  aggrs: Aggrs,
19
23
  ): Constructable<TypeDtoAggrResult<Aggrs>> {
20
24
  return _DtoAggregate_raw(modelLike, aggrs);
21
25
  }
22
26
 
23
27
  function _DtoAggregate_raw<
24
- Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>,
28
+ Aggrs extends TypeModelSelectAggrParamsAggrs<
29
+ TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]
30
+ >,
25
31
  ModelLike extends BeanModelMeta | keyof IModelClassRecord,
26
32
  >(
27
- modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
33
+ modelLike: ModelLike extends BeanModelMeta
34
+ ? (() => Constructable<ModelLike>) | Constructable<ModelLike>
35
+ : ModelLike,
28
36
  aggrs: Aggrs,
29
37
  ): Constructable<TypeDtoAggrResult<Aggrs>> {
30
38
  abstract class TargetClass {}
@@ -32,11 +40,15 @@ function _DtoAggregate_raw<
32
40
  }
33
41
 
34
42
  export function _DtoAggregate_inner<
35
- Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>,
43
+ Aggrs extends TypeModelSelectAggrParamsAggrs<
44
+ TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]
45
+ >,
36
46
  ModelLike extends BeanModelMeta | keyof IModelClassRecord,
37
47
  >(
38
48
  classTarget: Constructable,
39
- _modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
49
+ _modelLike: ModelLike extends BeanModelMeta
50
+ ? (() => Constructable<ModelLike>) | Constructable<ModelLike>
51
+ : ModelLike,
40
52
  aggrs: Aggrs,
41
53
  ): Constructable<TypeDtoAggrResult<Aggrs>> {
42
54
  for (const key in aggrs) {
@@ -6,9 +6,29 @@ import type { IModelClassRecord } from '../../types/onion/model.ts';
6
6
 
7
7
  import { _DtoMutate_raw } from './dtoMutate.ts';
8
8
 
9
- export function DtoCreate<ModelLike extends BeanModelMeta | keyof IModelClassRecord, T extends IDtoMutateParams<ModelLike> | undefined = undefined>(
10
- modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
9
+ export function DtoCreate<
10
+ ModelLike extends BeanModelMeta | keyof IModelClassRecord,
11
+ T extends IDtoMutateParams<ModelLike> | undefined = undefined,
12
+ >(
13
+ modelLike: ModelLike extends BeanModelMeta
14
+ ? (() => Constructable<ModelLike>) | Constructable<ModelLike>
15
+ : ModelLike,
11
16
  params?: T,
12
- ): Constructable<TypeDtoMutateResult<ModelLike, T, 'create', 'id' | 'iid' | 'deleted' | 'createdAt' | 'updatedAt', true>> {
13
- return _DtoMutate_raw(modelLike, params, 'create', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'] as any, true, undefined);
17
+ ): Constructable<
18
+ TypeDtoMutateResult<
19
+ ModelLike,
20
+ T,
21
+ 'create',
22
+ 'id' | 'iid' | 'deleted' | 'createdAt' | 'updatedAt',
23
+ true
24
+ >
25
+ > {
26
+ return _DtoMutate_raw(
27
+ modelLike,
28
+ params,
29
+ 'create',
30
+ ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'] as any,
31
+ true,
32
+ undefined,
33
+ );
14
34
  }