@opra/sqb 0.0.5 → 0.0.7

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/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # @opra/I18n
1
+ # @opra/sqb
2
2
 
3
- OPRA i18n package.
3
+ OPRA SQB package.
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseEntityService = void 0;
4
+ const connect_1 = require("@sqb/connect");
5
+ const sqb_adapter_js_1 = require("./sqb-adapter.js");
6
+ class BaseEntityService {
7
+ resourceType;
8
+ _metadata;
9
+ constructor(resourceType) {
10
+ this.resourceType = resourceType;
11
+ const metadata = connect_1.EntityMetadata.get(resourceType);
12
+ if (!metadata)
13
+ throw new TypeError(`You must provide an SQB entity class`);
14
+ this._metadata = metadata;
15
+ }
16
+ async processRequest(ctx) {
17
+ const prepared = sqb_adapter_js_1.SQBAdapter.prepare(ctx.request);
18
+ switch (prepared.method) {
19
+ case 'findAll':
20
+ return this.search(prepared.options, ctx.userContext);
21
+ case 'findByPk':
22
+ return this.get(ctx, prepared.options);
23
+ default:
24
+ throw new TypeError(`Unimplemented method (${prepared.method})`);
25
+ }
26
+ }
27
+ async get(keyValue, options, userContext) {
28
+ const conn = await this.getConnection(userContext);
29
+ const repo = conn.getRepository(this.resourceType);
30
+ let out = await repo.findByPk(keyValue, options);
31
+ if (out && this.onTransformRow)
32
+ out = this.onTransformRow(out, userContext, 'findByPk');
33
+ return out;
34
+ }
35
+ async count(options, userContext) {
36
+ const conn = await this.getConnection(userContext);
37
+ const repo = conn.getRepository(this.resourceType);
38
+ return await repo.count(options);
39
+ }
40
+ async search(options, userContext) {
41
+ const conn = await this.getConnection(userContext);
42
+ const repo = conn.getRepository(this.resourceType);
43
+ const items = await repo.findAll(options);
44
+ if (items.length && this.onTransformRow) {
45
+ const newItems = [];
46
+ for (const item of items) {
47
+ const v = this.onTransformRow(item, userContext, 'search');
48
+ if (v)
49
+ newItems.push(v);
50
+ }
51
+ return newItems;
52
+ }
53
+ return items;
54
+ }
55
+ async create(data, options, userContext) {
56
+ const conn = await this.getConnection(userContext);
57
+ const repo = conn.getRepository(this.resourceType);
58
+ let out = await repo.create(data, options);
59
+ if (out && this.onTransformRow)
60
+ out = this.onTransformRow(out, userContext, 'create');
61
+ return out;
62
+ }
63
+ async update(keyValue, data, options, userContext) {
64
+ const conn = await this.getConnection(userContext);
65
+ const repo = conn.getRepository(this.resourceType);
66
+ let out = await repo.update(keyValue, data, options);
67
+ if (out && this.onTransformRow)
68
+ out = this.onTransformRow(out, userContext, 'create');
69
+ return out;
70
+ }
71
+ async updateMany(data, options, userContext) {
72
+ const conn = await this.getConnection(userContext);
73
+ const repo = conn.getRepository(this.resourceType);
74
+ return await repo.updateAll(data, options);
75
+ }
76
+ async delete(keyValue, options, userContext) {
77
+ const conn = await this.getConnection(userContext);
78
+ const repo = conn.getRepository(this.resourceType);
79
+ return await repo.destroy(keyValue, options);
80
+ }
81
+ async deleteMany(options, userContext) {
82
+ const conn = await this.getConnection(userContext);
83
+ const repo = conn.getRepository(this.resourceType);
84
+ return await repo.destroyAll(options);
85
+ }
86
+ }
87
+ exports.BaseEntityService = BaseEntityService;
package/cjs/index.js CHANGED
@@ -2,3 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./sqb-adapter.js"), exports);
5
+ tslib_1.__exportStar(require("./base-entity-service.js"), exports);
@@ -23,7 +23,7 @@ var SQBAdapter;
23
23
  args: [data, options]
24
24
  };
25
25
  }
26
- case 'read': {
26
+ case 'get': {
27
27
  const options = lodash_1.default.omitBy({
28
28
  pick: query.pick?.length ? query.pick : undefined,
29
29
  omit: query.omit?.length ? query.omit : undefined,
@@ -46,7 +46,7 @@ var SQBAdapter;
46
46
  limit: query.limit,
47
47
  offset: query.skip,
48
48
  distinct: query.distinct,
49
- total: query.total,
49
+ total: query.count,
50
50
  filter: (0, convert_filter_js_1.convertFilter)(query.filter)
51
51
  }, lodash_1.default.isNil);
52
52
  return {
@@ -117,8 +117,8 @@ var SQBAdapter;
117
117
  if (value && typeof value === 'object')
118
118
  out.value = value;
119
119
  if (query.queryType === 'search') {
120
- if (query.total) {
121
- out.count = await repo.count(prepared.options);
120
+ if (query.count) {
121
+ out.total = await repo.count(prepared.options);
122
122
  }
123
123
  }
124
124
  if (prepared.method === 'destroy')
@@ -0,0 +1,30 @@
1
+ import { Maybe, Type } from 'ts-gems';
2
+ import { ExecutionContext, IEntityService } from '@opra/core';
3
+ import { EntityInput, EntityMetadata, EntityOutput, Repository, SqbClient, SqbConnection } from '@sqb/connect';
4
+ export declare namespace BaseEntityService {
5
+ type FindAllOptions = Repository.FindAllOptions & {
6
+ total?: boolean;
7
+ };
8
+ type FindOneOptions = Repository.FindOneOptions;
9
+ type CreateOptions = Repository.CreateOptions;
10
+ type UpdateOptions = Repository.UpdateOptions;
11
+ type UpdateManyOptions = Repository.UpdateAllOptions;
12
+ type DeleteOptions = Repository.DestroyOptions;
13
+ type DeleteManyOptions = Repository.DestroyOptions;
14
+ }
15
+ export declare abstract class BaseEntityService<T> implements IEntityService {
16
+ readonly resourceType: Type<T>;
17
+ protected _metadata: EntityMetadata;
18
+ protected constructor(resourceType: Type<T>);
19
+ processRequest(ctx: ExecutionContext): Promise<Maybe<T extends import("ts-gems").Builtin ? T : T extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T extends (infer U_1)[] ? any[] : { [P_1 in keyof T]?: (Exclude<T[P_1], undefined> extends infer T_1 ? T_1 extends Exclude<T[P_1], undefined> ? T_1 extends import("ts-gems").Builtin ? T_1 : T_1 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_1 extends (infer U_1)[] ? any[] : { [P_2 in keyof T_1]?: (Exclude<T_1[P_2], undefined> extends infer T_2 ? T_2 extends Exclude<T_1[P_2], undefined> ? T_2 extends import("ts-gems").Builtin ? T_2 : T_2 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_2 extends (infer U_1)[] ? any[] : { [P_3 in keyof T_2]?: (Exclude<T_2[P_3], undefined> extends infer T_3 ? T_3 extends Exclude<T_2[P_3], undefined> ? T_3 extends import("ts-gems").Builtin ? T_3 : T_3 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_3 extends (infer U_1)[] ? any[] : { [P_4 in keyof T_3]?: (Exclude<T_3[P_4], undefined> extends infer T_4 ? T_4 extends Exclude<T_3[P_4], undefined> ? T_4 extends import("ts-gems").Builtin ? T_4 : T_4 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_4 extends (infer U_1)[] ? any[] : { [P_5 in keyof T_4]?: (Exclude<T_4[P_5], undefined> extends infer T_5 ? T_5 extends Exclude<T_4[P_5], undefined> ? T_5 extends import("ts-gems").Builtin ? T_5 : T_5 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_5 extends (infer U_1)[] ? any[] : { [P_6 in keyof T_5]?: (Exclude<T_5[P_6], undefined> extends infer T_6 ? T_6 extends Exclude<T_5[P_6], undefined> ? T_6 extends import("ts-gems").Builtin ? T_6 : T_6 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_6 extends (infer U_1)[] ? any[] : { [P_7 in keyof T_6]?: (Exclude<T_6[P_7], undefined> extends infer T_7 ? T_7 extends Exclude<T_6[P_7], undefined> ? T_7 extends import("ts-gems").Builtin ? T_7 : T_7 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_7 extends (infer U_1)[] ? any[] : { [P_8 in keyof T_7]?: (Exclude<T_7[P_8], undefined> extends infer T_8 ? T_8 extends Exclude<T_7[P_8], undefined> ? T_8 extends import("ts-gems").Builtin ? T_8 : T_8 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_8 extends (infer U_1)[] ? any[] : { [P_9 in keyof T_8]?: (Exclude<T_8[P_9], undefined> extends infer T_9 ? T_9 extends Exclude<T_8[P_9], undefined> ? T_9 extends import("ts-gems").Builtin ? T_9 : T_9 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_9 extends (infer U_1)[] ? any[] : { [P_10 in keyof T_9]?: (Exclude<T_9[P_10], undefined> extends infer T_10 ? T_10 extends Exclude<T_9[P_10], undefined> ? T_10 extends import("ts-gems").Builtin ? T_10 : T_10 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_10 extends (infer U_1)[] ? any[] : { [P_11 in keyof T_10]?: any | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; }> | Maybe<T extends import("ts-gems").Builtin ? T : T extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T extends (infer U_1)[] ? any[] : { [P_1 in keyof T]?: (Exclude<T[P_1], undefined> extends infer T_1 ? T_1 extends Exclude<T[P_1], undefined> ? T_1 extends import("ts-gems").Builtin ? T_1 : T_1 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_1 extends (infer U_1)[] ? any[] : { [P_2 in keyof T_1]?: (Exclude<T_1[P_2], undefined> extends infer T_2 ? T_2 extends Exclude<T_1[P_2], undefined> ? T_2 extends import("ts-gems").Builtin ? T_2 : T_2 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_2 extends (infer U_1)[] ? any[] : { [P_3 in keyof T_2]?: (Exclude<T_2[P_3], undefined> extends infer T_3 ? T_3 extends Exclude<T_2[P_3], undefined> ? T_3 extends import("ts-gems").Builtin ? T_3 : T_3 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_3 extends (infer U_1)[] ? any[] : { [P_4 in keyof T_3]?: (Exclude<T_3[P_4], undefined> extends infer T_4 ? T_4 extends Exclude<T_3[P_4], undefined> ? T_4 extends import("ts-gems").Builtin ? T_4 : T_4 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_4 extends (infer U_1)[] ? any[] : { [P_5 in keyof T_4]?: (Exclude<T_4[P_5], undefined> extends infer T_5 ? T_5 extends Exclude<T_4[P_5], undefined> ? T_5 extends import("ts-gems").Builtin ? T_5 : T_5 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_5 extends (infer U_1)[] ? any[] : { [P_6 in keyof T_5]?: (Exclude<T_5[P_6], undefined> extends infer T_6 ? T_6 extends Exclude<T_5[P_6], undefined> ? T_6 extends import("ts-gems").Builtin ? T_6 : T_6 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_6 extends (infer U_1)[] ? any[] : { [P_7 in keyof T_6]?: (Exclude<T_6[P_7], undefined> extends infer T_7 ? T_7 extends Exclude<T_6[P_7], undefined> ? T_7 extends import("ts-gems").Builtin ? T_7 : T_7 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_7 extends (infer U_1)[] ? any[] : { [P_8 in keyof T_7]?: (Exclude<T_7[P_8], undefined> extends infer T_8 ? T_8 extends Exclude<T_7[P_8], undefined> ? T_8 extends import("ts-gems").Builtin ? T_8 : T_8 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_8 extends (infer U_1)[] ? any[] : { [P_9 in keyof T_8]?: (Exclude<T_8[P_9], undefined> extends infer T_9 ? T_9 extends Exclude<T_8[P_9], undefined> ? T_9 extends import("ts-gems").Builtin ? T_9 : T_9 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_9 extends (infer U_1)[] ? any[] : { [P_10 in keyof T_9]?: (Exclude<T_9[P_10], undefined> extends infer T_10 ? T_10 extends Exclude<T_9[P_10], undefined> ? T_10 extends import("ts-gems").Builtin ? T_10 : T_10 extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<U extends import("ts-gems").Builtin ? U : U extends Promise<infer U> ? Promise<any> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : U extends (infer U_1)[] ? any[] : { [P in keyof U]?: any | null | undefined; }> : T_10 extends (infer U_1)[] ? any[] : { [P_11 in keyof T_10]?: any | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; } : never : never) | null | undefined; }>[]>;
20
+ get(keyValue: any, options?: BaseEntityService.FindOneOptions, userContext?: any): Promise<Maybe<EntityOutput<T>>>;
21
+ count(options?: BaseEntityService.FindAllOptions, userContext?: any): Promise<Maybe<number>>;
22
+ search(options?: BaseEntityService.FindAllOptions, userContext?: any): Promise<Maybe<EntityOutput<T>>[]>;
23
+ create(data: EntityInput<T>, options?: BaseEntityService.CreateOptions, userContext?: any): Promise<Maybe<EntityOutput<T>>>;
24
+ update(keyValue: any, data: EntityInput<T>, options?: BaseEntityService.UpdateOptions, userContext?: any): Promise<Maybe<EntityOutput<T>>>;
25
+ updateMany(data: EntityInput<T>, options?: BaseEntityService.UpdateManyOptions, userContext?: any): Promise<Maybe<number>>;
26
+ delete(keyValue: any, options?: BaseEntityService.DeleteOptions, userContext?: any): Promise<boolean>;
27
+ deleteMany(options?: BaseEntityService.DeleteManyOptions, userContext?: any): Promise<number>;
28
+ protected abstract getConnection(userContext?: any): SqbConnection | SqbClient | Promise<SqbConnection | SqbClient>;
29
+ protected onTransformRow?(row: EntityOutput<T>, userContext: any, method: string): EntityOutput<T>;
30
+ }
@@ -0,0 +1,83 @@
1
+ import { EntityMetadata } from '@sqb/connect';
2
+ import { SQBAdapter } from './sqb-adapter.js';
3
+ export class BaseEntityService {
4
+ resourceType;
5
+ _metadata;
6
+ constructor(resourceType) {
7
+ this.resourceType = resourceType;
8
+ const metadata = EntityMetadata.get(resourceType);
9
+ if (!metadata)
10
+ throw new TypeError(`You must provide an SQB entity class`);
11
+ this._metadata = metadata;
12
+ }
13
+ async processRequest(ctx) {
14
+ const prepared = SQBAdapter.prepare(ctx.request);
15
+ switch (prepared.method) {
16
+ case 'findAll':
17
+ return this.search(prepared.options, ctx.userContext);
18
+ case 'findByPk':
19
+ return this.get(ctx, prepared.options);
20
+ default:
21
+ throw new TypeError(`Unimplemented method (${prepared.method})`);
22
+ }
23
+ }
24
+ async get(keyValue, options, userContext) {
25
+ const conn = await this.getConnection(userContext);
26
+ const repo = conn.getRepository(this.resourceType);
27
+ let out = await repo.findByPk(keyValue, options);
28
+ if (out && this.onTransformRow)
29
+ out = this.onTransformRow(out, userContext, 'findByPk');
30
+ return out;
31
+ }
32
+ async count(options, userContext) {
33
+ const conn = await this.getConnection(userContext);
34
+ const repo = conn.getRepository(this.resourceType);
35
+ return await repo.count(options);
36
+ }
37
+ async search(options, userContext) {
38
+ const conn = await this.getConnection(userContext);
39
+ const repo = conn.getRepository(this.resourceType);
40
+ const items = await repo.findAll(options);
41
+ if (items.length && this.onTransformRow) {
42
+ const newItems = [];
43
+ for (const item of items) {
44
+ const v = this.onTransformRow(item, userContext, 'search');
45
+ if (v)
46
+ newItems.push(v);
47
+ }
48
+ return newItems;
49
+ }
50
+ return items;
51
+ }
52
+ async create(data, options, userContext) {
53
+ const conn = await this.getConnection(userContext);
54
+ const repo = conn.getRepository(this.resourceType);
55
+ let out = await repo.create(data, options);
56
+ if (out && this.onTransformRow)
57
+ out = this.onTransformRow(out, userContext, 'create');
58
+ return out;
59
+ }
60
+ async update(keyValue, data, options, userContext) {
61
+ const conn = await this.getConnection(userContext);
62
+ const repo = conn.getRepository(this.resourceType);
63
+ let out = await repo.update(keyValue, data, options);
64
+ if (out && this.onTransformRow)
65
+ out = this.onTransformRow(out, userContext, 'create');
66
+ return out;
67
+ }
68
+ async updateMany(data, options, userContext) {
69
+ const conn = await this.getConnection(userContext);
70
+ const repo = conn.getRepository(this.resourceType);
71
+ return await repo.updateAll(data, options);
72
+ }
73
+ async delete(keyValue, options, userContext) {
74
+ const conn = await this.getConnection(userContext);
75
+ const repo = conn.getRepository(this.resourceType);
76
+ return await repo.destroy(keyValue, options);
77
+ }
78
+ async deleteMany(options, userContext) {
79
+ const conn = await this.getConnection(userContext);
80
+ const repo = conn.getRepository(this.resourceType);
81
+ return await repo.destroyAll(options);
82
+ }
83
+ }
@@ -0,0 +1,2 @@
1
+ import { Expression } from '@opra/url';
2
+ export declare function convertFilter(str: string | Expression | undefined): any;
package/esm/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './sqb-adapter.js';
2
+ export * from './base-entity-service.js';
package/esm/index.js CHANGED
@@ -1 +1,2 @@
1
1
  export * from './sqb-adapter.js';
2
+ export * from './base-entity-service.js';
@@ -0,0 +1,12 @@
1
+ import { ExecutionRequest } from '@opra/core';
2
+ import { SqbClient, SqbConnection } from '@sqb/connect';
3
+ export declare namespace SQBAdapter {
4
+ function prepare(request: ExecutionRequest): {
5
+ method: 'create' | 'findByPk' | 'findAll' | 'update' | 'updateAll' | 'destroy' | 'destroyAll';
6
+ options: any;
7
+ keyValue?: any;
8
+ values?: any;
9
+ args: any[];
10
+ };
11
+ function execute(connection: SqbClient | SqbConnection, request: ExecutionRequest): Promise<any>;
12
+ }
@@ -19,7 +19,7 @@ export var SQBAdapter;
19
19
  args: [data, options]
20
20
  };
21
21
  }
22
- case 'read': {
22
+ case 'get': {
23
23
  const options = _.omitBy({
24
24
  pick: query.pick?.length ? query.pick : undefined,
25
25
  omit: query.omit?.length ? query.omit : undefined,
@@ -42,7 +42,7 @@ export var SQBAdapter;
42
42
  limit: query.limit,
43
43
  offset: query.skip,
44
44
  distinct: query.distinct,
45
- total: query.total,
45
+ total: query.count,
46
46
  filter: convertFilter(query.filter)
47
47
  }, _.isNil);
48
48
  return {
@@ -113,8 +113,8 @@ export var SQBAdapter;
113
113
  if (value && typeof value === 'object')
114
114
  out.value = value;
115
115
  if (query.queryType === 'search') {
116
- if (query.total) {
117
- out.count = await repo.count(prepared.options);
116
+ if (query.count) {
117
+ out.total = await repo.count(prepared.options);
118
118
  }
119
119
  }
120
120
  if (prepared.method === 'destroy')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opra/sqb",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Opra SQB adapter package",
5
5
  "author": "Panates",
6
6
  "license": "MIT",
@@ -25,18 +25,18 @@
25
25
  "clean:cover": "rimraf ../../coverage/sqb"
26
26
  },
27
27
  "dependencies": {
28
- "lodash": "^4.17.x",
28
+ "lodash": "^4.17.21",
29
29
  "ts-gems": "^2.2.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@sqb/connect": "^4.5.0"
32
+ "@sqb/connect": "^4.5.1"
33
33
  },
34
34
  "peerDependencies": {
35
- "@opra/core": "0.x.x",
36
- "@opra/url": "0.x.x",
37
- "@opra/optionals": "0.x.x",
35
+ "@opra/core": "^0.0.5",
36
+ "@opra/optionals": "^0.0.5",
37
+ "@opra/url": "^0.0.6",
38
38
  "@sqb/connect": ">= 4.5.0",
39
- "@sqb/sqljs": ">= 4.5.0"
39
+ "@sqb/sqljs": "^4.5.1"
40
40
  },
41
41
  "type": "module",
42
42
  "main": "cjs/index.js",