@minimaltech/node-infra 0.5.9-22 → 0.5.9-24

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 (175) hide show
  1. package/dist/base/applications/base.application.js +40 -28
  2. package/dist/base/applications/default.application.js +8 -2
  3. package/dist/base/base.component.js +2 -2
  4. package/dist/base/base.helper.js +3 -4
  5. package/dist/base/base.provider.js +2 -2
  6. package/dist/base/base.sequence.js +26 -17
  7. package/dist/base/controllers/common.js +9 -8
  8. package/dist/base/controllers/crud.controller.js +67 -55
  9. package/dist/base/controllers/express-request-handler.js +0 -2
  10. package/dist/base/controllers/kv.controller.js +18 -7
  11. package/dist/base/controllers/relational.controller.d.ts +3 -1
  12. package/dist/base/controllers/relational.controller.js +57 -40
  13. package/dist/base/controllers/service-crud.controller.js +46 -46
  14. package/dist/base/datasources/base.datasource.js +0 -1
  15. package/dist/base/loopback/@lb/core/index.js +1 -0
  16. package/dist/base/loopback/@lb/repository/index.js +1 -0
  17. package/dist/base/loopback/authentication/index.js +2 -0
  18. package/dist/base/loopback/filter/index.js +2 -0
  19. package/dist/base/loopback/http-server/index.js +2 -0
  20. package/dist/base/models/base.model.d.ts +7 -0
  21. package/dist/base/models/base.model.js +23 -5
  22. package/dist/base/repositories/base.repository.d.ts +3 -0
  23. package/dist/base/repositories/base.repository.js +24 -5
  24. package/dist/base/repositories/relations/has-many-polymorphic/decorator.d.ts +8 -0
  25. package/dist/base/repositories/relations/has-many-polymorphic/decorator.js +10 -11
  26. package/dist/base/repositories/relations/has-many-polymorphic/factory.d.ts +9 -0
  27. package/dist/base/repositories/relations/has-many-polymorphic/factory.js +30 -12
  28. package/dist/base/repositories/searchable-tz-crud.repository.js +160 -129
  29. package/dist/base/repositories/tz-crud.repository.js +58 -23
  30. package/dist/base/services/base-crud.service.js +9 -6
  31. package/dist/base/services/base.service.js +2 -2
  32. package/dist/common/constants.js +89 -81
  33. package/dist/common/environments.js +25 -25
  34. package/dist/common/keys.js +2 -2
  35. package/dist/common/statuses.js +31 -28
  36. package/dist/common/types.d.ts +3 -0
  37. package/dist/components/authenticate/common/constants.js +13 -11
  38. package/dist/components/authenticate/common/keys.js +7 -7
  39. package/dist/components/authenticate/common/types.js +3 -11
  40. package/dist/components/authenticate/component.js +28 -20
  41. package/dist/components/authenticate/controllers/auth.controller.js +11 -13
  42. package/dist/components/authenticate/controllers/oauth2.controller.js +20 -18
  43. package/dist/components/authenticate/middleware.js +35 -25
  44. package/dist/components/authenticate/models/oauth2-client.model.js +3 -8
  45. package/dist/components/authenticate/models/oauth2-scope.model.js +0 -4
  46. package/dist/components/authenticate/models/oauth2-token.model.js +0 -7
  47. package/dist/components/authenticate/oauth2-handlers/authorization-code.handler.js +5 -4
  48. package/dist/components/authenticate/oauth2-handlers/base.js +110 -95
  49. package/dist/components/authenticate/oauth2-handlers/client-credential.handler.js +3 -2
  50. package/dist/components/authenticate/oauth2-handlers/oauth2.js +2 -3
  51. package/dist/components/authenticate/repositories/oauth2.repository.js +0 -2
  52. package/dist/components/authenticate/services/basic-token.service.js +29 -18
  53. package/dist/components/authenticate/services/basic.strategy.js +17 -7
  54. package/dist/components/authenticate/services/jwt-token.service.js +40 -27
  55. package/dist/components/authenticate/services/jwt.strategy.js +1 -2
  56. package/dist/components/authenticate/services/oauth2.service.js +110 -98
  57. package/dist/components/authenticate/services/oauth2.strategy.js +31 -19
  58. package/dist/components/authorize/adapters/adapter-builder.js +0 -1
  59. package/dist/components/authorize/adapters/base.adapter.js +9 -2
  60. package/dist/components/authorize/adapters/casbin-postgres-adapter.helper.js +55 -37
  61. package/dist/components/authorize/adapters/casbin-redis-adapter.helper.js +1 -0
  62. package/dist/components/authorize/common/constants.js +12 -10
  63. package/dist/components/authorize/common/keys.js +15 -15
  64. package/dist/components/authorize/common/types.js +2 -2
  65. package/dist/components/authorize/component.js +59 -44
  66. package/dist/components/authorize/decorators/index.d.ts +11 -0
  67. package/dist/components/authorize/decorators/index.js +14 -1
  68. package/dist/components/authorize/interceptor.js +80 -76
  69. package/dist/components/authorize/migrations/0000-create-view-policy.js +14 -3
  70. package/dist/components/authorize/models/defs.js +5 -24
  71. package/dist/components/authorize/models/role.model.js +1 -1
  72. package/dist/components/authorize/models/user-role.model.js +1 -0
  73. package/dist/components/authorize/models/view-authorize-policy.model.js +1 -4
  74. package/dist/components/authorize/provider.js +96 -81
  75. package/dist/components/authorize/repositories/authorize.repository.js +6 -3
  76. package/dist/components/authorize/services/enforcer.service.js +27 -20
  77. package/dist/components/authorize/services/generator.service.d.ts +20 -0
  78. package/dist/components/authorize/services/generator.service.js +96 -62
  79. package/dist/components/crash-report/common/keys.js +10 -8
  80. package/dist/components/crash-report/component.js +44 -31
  81. package/dist/components/crash-report/providers/provider.js +0 -1
  82. package/dist/components/crash-report/providers/third-parties/base.js +2 -2
  83. package/dist/components/crash-report/services/mt-crash-report.service.js +5 -5
  84. package/dist/components/grpc/common/keys.js +4 -4
  85. package/dist/components/grpc/components/server.component.js +8 -8
  86. package/dist/components/grpc/controllers/base.js +0 -1
  87. package/dist/components/grpc/helpers/grpc-client.js +3 -9
  88. package/dist/components/grpc/helpers/grpc-server.js +17 -14
  89. package/dist/components/grpc/persistents/grpc.connector.js +2 -8
  90. package/dist/components/grpc/persistents/grpc.datasource.js +3 -2
  91. package/dist/components/grpc/persistents/grpc.repository.js +2 -3
  92. package/dist/components/health-check/component.js +0 -1
  93. package/dist/components/migration/common/keys.js +3 -3
  94. package/dist/components/migration/component.js +8 -5
  95. package/dist/components/migration/models/migration.model.js +0 -2
  96. package/dist/components/socket-io/common/constants.js +10 -10
  97. package/dist/components/socket-io/common/keys.js +6 -6
  98. package/dist/components/socket-io/component.js +8 -9
  99. package/dist/components/socket-io/helpers/socket-io-client.helper.js +11 -7
  100. package/dist/components/socket-io/helpers/socket-io-server.helper.js +41 -26
  101. package/dist/components/static-asset/common/keys.js +4 -4
  102. package/dist/components/static-asset/component.js +8 -9
  103. package/dist/components/static-asset/controllers/asset.controller.d.ts +8 -0
  104. package/dist/components/static-asset/controllers/asset.controller.js +93 -71
  105. package/dist/components/static-asset/controllers/resource.controller.js +9 -8
  106. package/dist/datasources/memory/datasource.js +3 -3
  107. package/dist/datasources/postgres/datasource.js +10 -10
  108. package/dist/datasources/redis/connector.js +7 -18
  109. package/dist/datasources/redis/datasource.js +7 -7
  110. package/dist/helpers/application-environment.helper.js +3 -3
  111. package/dist/helpers/cron.helper.js +14 -9
  112. package/dist/helpers/crypto/algorithms/aes.algorithm.js +7 -8
  113. package/dist/helpers/crypto/algorithms/base.algorithm.js +4 -3
  114. package/dist/helpers/crypto/algorithms/rsa.algorithm.js +5 -4
  115. package/dist/helpers/database/query-builder.helper.js +5 -2
  116. package/dist/helpers/logger/application-logger.js +17 -7
  117. package/dist/helpers/logger/common/types.js +22 -20
  118. package/dist/helpers/logger/default-logger.js +12 -2
  119. package/dist/helpers/logger/factory.js +1 -1
  120. package/dist/helpers/logger/transports/dgram.transport.js +25 -16
  121. package/dist/helpers/network/http-request/base-network-request.helper.js +34 -36
  122. package/dist/helpers/network/http-request/fetcher/axios-fetcher.js +22 -10
  123. package/dist/helpers/network/http-request/fetcher/base-fetcher.js +36 -13
  124. package/dist/helpers/network/http-request/fetcher/node-fetcher.js +59 -37
  125. package/dist/helpers/network/tcp-socket/base-tcp-client.helper.js +27 -30
  126. package/dist/helpers/network/tcp-socket/base-tcp-server.helper.js +19 -21
  127. package/dist/helpers/network/tcp-socket/network-tcp-client.helper.js +1 -5
  128. package/dist/helpers/network/tcp-socket/network-tcp-server.helper.js +1 -5
  129. package/dist/helpers/network/tcp-socket/network-tls-tcp-client.helper.js +1 -5
  130. package/dist/helpers/network/tcp-socket/network-tls-tcp-server.helper.js +1 -5
  131. package/dist/helpers/network/udp-socket/network-udp-client.helper.js +18 -21
  132. package/dist/helpers/queue/bullmq.helper.js +22 -21
  133. package/dist/helpers/queue/mqtt.helper.js +17 -15
  134. package/dist/helpers/queue/queue.helper.js +145 -74
  135. package/dist/helpers/redis/default.helper.js +162 -117
  136. package/dist/helpers/redis/redis-cluster.helper.js +2 -7
  137. package/dist/helpers/redis/redis.helper.js +5 -8
  138. package/dist/helpers/storage/di-container.helper.js +0 -2
  139. package/dist/helpers/storage/minio.helper.js +128 -88
  140. package/dist/helpers/testing/common.js +3 -3
  141. package/dist/helpers/testing/describe.js +21 -14
  142. package/dist/helpers/testing/test-case.js +0 -5
  143. package/dist/helpers/testing/test-handler.js +30 -23
  144. package/dist/helpers/testing/test-plan/base.js +6 -9
  145. package/dist/helpers/worker-thread/base.js +20 -10
  146. package/dist/helpers/worker-thread/worker-bus.js +12 -11
  147. package/dist/helpers/worker-thread/worker-pool.js +25 -17
  148. package/dist/interceptors/content-range.interceptor.js +132 -115
  149. package/dist/middlewares/request-body-parser.middleware.js +16 -4
  150. package/dist/middlewares/request-spy.middleware.js +5 -4
  151. package/dist/migrations/handler.js +22 -13
  152. package/dist/mixins/data-type.mixin.js +0 -5
  153. package/dist/mixins/deprecated/user-audit.mixin.d.ts +3 -0
  154. package/dist/mixins/deprecated/user-audit.mixin.js +5 -2
  155. package/dist/mixins/duplicatable.mixin.js +0 -1
  156. package/dist/mixins/object-search.mixin.js +0 -1
  157. package/dist/mixins/principal.mixin.js +0 -2
  158. package/dist/mixins/soft-delete.mixin.js +0 -1
  159. package/dist/mixins/soft-persistent.mixin.js +0 -1
  160. package/dist/mixins/text-search.mixin.js +0 -1
  161. package/dist/mixins/tz.mixin.js +0 -2
  162. package/dist/mixins/user-audit.mixin.js +3 -5
  163. package/dist/mixins/vector.mixin.js +6 -9
  164. package/dist/tsconfig.base.json +6 -5
  165. package/dist/utilities/date.utility.js +23 -5
  166. package/dist/utilities/error.utility.js +0 -2
  167. package/dist/utilities/model.utility.js +6 -2
  168. package/dist/utilities/parse.utility.d.ts +16 -0
  169. package/dist/utilities/parse.utility.js +41 -6
  170. package/dist/utilities/performance.utility.js +2 -1
  171. package/dist/utilities/promise.utility.d.ts +17 -0
  172. package/dist/utilities/promise.utility.js +31 -5
  173. package/dist/utilities/query.utility.js +16 -8
  174. package/dist/utilities/request.utility.js +8 -2
  175. package/package.json +2 -3
@@ -12,67 +12,83 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BaseVectorEntity = exports.BaseBigIdTzEntity = exports.BaseBigIdEntity = exports.BaseDuplicatableTzEntity = exports.BaseSoftDeleteTzEntity = exports.BaseSearchableTzEntity = exports.BaseObjectSearchTzEntity = exports.BaseTextSearchTzEntity = exports.BaseDataTypeTzEntity = exports.BaseUserAuditTzEntity = exports.BaseTzEntity = exports.BaseKVEntity = exports.BaseStringIdEntity = exports.BaseNumberIdEntity = exports.BaseIdEntity = exports.BaseEntity = void 0;
13
13
  const mixins_1 = require("../../mixins");
14
14
  const repository_1 = require("@loopback/repository");
15
+ // ---------------------------------------------------------------------
15
16
  class BaseEntity extends repository_1.Entity {
16
17
  }
17
18
  exports.BaseEntity = BaseEntity;
19
+ // ---------------------------------------------------------------------
18
20
  class BaseIdEntity extends BaseEntity {
19
- id;
20
21
  }
21
22
  exports.BaseIdEntity = BaseIdEntity;
22
23
  __decorate([
23
24
  (0, repository_1.property)({ type: 'number', id: true, generated: true }),
24
25
  __metadata("design:type", Number)
25
26
  ], BaseIdEntity.prototype, "id", void 0);
27
+ // ---------------------------------------------------------------------
26
28
  class BaseNumberIdEntity extends BaseEntity {
27
- id;
28
29
  }
29
30
  exports.BaseNumberIdEntity = BaseNumberIdEntity;
30
31
  __decorate([
31
32
  (0, repository_1.property)({ type: 'number', id: true, generated: true }),
32
33
  __metadata("design:type", Number)
33
34
  ], BaseNumberIdEntity.prototype, "id", void 0);
35
+ // ---------------------------------------------------------------------
34
36
  class BaseStringIdEntity extends BaseEntity {
35
- id;
36
37
  }
37
38
  exports.BaseStringIdEntity = BaseStringIdEntity;
38
39
  __decorate([
39
40
  (0, repository_1.property)({ type: 'string', id: true }),
40
41
  __metadata("design:type", String)
41
42
  ], BaseStringIdEntity.prototype, "id", void 0);
43
+ // ---------------------------------------------------------------------
42
44
  class BaseKVEntity extends BaseEntity {
43
- payload;
44
45
  }
45
46
  exports.BaseKVEntity = BaseKVEntity;
46
47
  __decorate([
47
48
  (0, repository_1.property)({ type: 'object' }),
48
49
  __metadata("design:type", Object)
49
50
  ], BaseKVEntity.prototype, "payload", void 0);
51
+ // ---------------------------------------------------------------------
50
52
  class BaseTzEntity extends (0, mixins_1.TzMixin)(BaseIdEntity) {
51
53
  }
52
54
  exports.BaseTzEntity = BaseTzEntity;
55
+ // ---------------------------------------------------------------------
56
+ /**
57
+ * Basic UserAuditMixed class with createdBy and modifiedBy
58
+ *
59
+ * NOTICE: This method have no userResolver
60
+ *
61
+ * In case you need to include User, directly extends {@link UserAuditMixin}
62
+ */
53
63
  class BaseUserAuditTzEntity extends (0, mixins_1.UserAuditMixin)(BaseTzEntity) {
54
64
  }
55
65
  exports.BaseUserAuditTzEntity = BaseUserAuditTzEntity;
66
+ // ---------------------------------------------------------------------
56
67
  class BaseDataTypeTzEntity extends (0, mixins_1.DataTypeMixin)(BaseTzEntity) {
57
68
  }
58
69
  exports.BaseDataTypeTzEntity = BaseDataTypeTzEntity;
70
+ // ---------------------------------------------------------------------
59
71
  class BaseTextSearchTzEntity extends (0, mixins_1.TextSearchMixin)(BaseTzEntity) {
60
72
  }
61
73
  exports.BaseTextSearchTzEntity = BaseTextSearchTzEntity;
74
+ // ---------------------------------------------------------------------
62
75
  class BaseObjectSearchTzEntity extends (0, mixins_1.ObjectSearchMixin)(BaseTzEntity) {
63
76
  }
64
77
  exports.BaseObjectSearchTzEntity = BaseObjectSearchTzEntity;
78
+ // ---------------------------------------------------------------------
65
79
  class BaseSearchableTzEntity extends (0, mixins_1.ObjectSearchMixin)((0, mixins_1.TextSearchMixin)(BaseTzEntity)) {
66
80
  }
67
81
  exports.BaseSearchableTzEntity = BaseSearchableTzEntity;
82
+ // ---------------------------------------------------------------------
68
83
  class BaseSoftDeleteTzEntity extends (0, mixins_1.SoftDeleteModelMixin)(BaseTzEntity) {
69
84
  }
70
85
  exports.BaseSoftDeleteTzEntity = BaseSoftDeleteTzEntity;
86
+ // ---------------------------------------------------------------------
71
87
  class BaseDuplicatableTzEntity extends (0, mixins_1.DuplicatableMixin)(BaseTzEntity) {
72
88
  }
73
89
  exports.BaseDuplicatableTzEntity = BaseDuplicatableTzEntity;
90
+ // ---------------------------------------------------------------------
74
91
  class BaseBigIdEntity extends BaseEntity {
75
- id;
76
92
  }
77
93
  exports.BaseBigIdEntity = BaseBigIdEntity;
78
94
  __decorate([
@@ -83,9 +99,11 @@ __decorate([
83
99
  }),
84
100
  __metadata("design:type", Number)
85
101
  ], BaseBigIdEntity.prototype, "id", void 0);
102
+ // ---------------------------------------------------------------------
86
103
  class BaseBigIdTzEntity extends (0, mixins_1.TzMixin)(BaseBigIdEntity) {
87
104
  }
88
105
  exports.BaseBigIdTzEntity = BaseBigIdTzEntity;
106
+ // ---------------------------------------------------------------------
89
107
  class BaseVectorEntity extends (0, mixins_1.VectorMixin)(BaseBigIdTzEntity, {
90
108
  uuid: {
91
109
  columnName: 'uuid',
@@ -8,6 +8,9 @@ export declare class WhereBuilder<E extends object = AnyObject> extends BaseWher
8
8
  clone(): WhereBuilder;
9
9
  }
10
10
  export declare class DefaultCrudRepository<E extends BaseEntity, ID, Relations extends object = {}> extends _DefaultCrudRepository<E, ID, Relations> {
11
+ /**
12
+ * @experimental
13
+ */
11
14
  createHasManyPolymorphicRepositoryFactoryFor<Target extends BaseEntity, TargetId extends IdType, ForeignKeyType extends IdType>(opts: {
12
15
  relationName: string;
13
16
  principalType: string;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
2
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
15
  };
@@ -10,6 +21,7 @@ const repository_1 = require("@loopback/repository");
10
21
  const cloneDeep_1 = __importDefault(require("lodash/cloneDeep"));
11
22
  const get_1 = __importDefault(require("lodash/get"));
12
23
  const factory_1 = require("./relations/has-many-polymorphic/factory");
24
+ // ----------------------------------------------------------------------------------------------------------------------------------------
13
25
  class WhereBuilder extends repository_1.WhereBuilder {
14
26
  constructor(opts) {
15
27
  super(opts);
@@ -22,7 +34,11 @@ class WhereBuilder extends repository_1.WhereBuilder {
22
34
  }
23
35
  }
24
36
  exports.WhereBuilder = WhereBuilder;
37
+ // ----------------------------------------------------------------------------------------------------------------------------------------
25
38
  class DefaultCrudRepository extends repository_1.DefaultCrudRepository {
39
+ /**
40
+ * @experimental
41
+ */
26
42
  createHasManyPolymorphicRepositoryFactoryFor(opts) {
27
43
  const { relationName, principalType, targetRepositoryGetter } = opts;
28
44
  const relationMetadata = this.entityClass.definition.relations[relationName];
@@ -39,16 +55,16 @@ class DefaultCrudRepository extends repository_1.DefaultCrudRepository {
39
55
  }
40
56
  }
41
57
  exports.DefaultCrudRepository = DefaultCrudRepository;
58
+ // ----------------------------------------------------------------------------------------------------------------------------------------
42
59
  class AbstractTzRepository extends DefaultCrudRepository {
43
- logger;
44
60
  constructor(entityClass, dataSource, scope) {
45
61
  super(entityClass, dataSource);
46
- this.logger = helpers_1.LoggerFactory.getLogger([scope ?? '']);
62
+ this.logger = helpers_1.LoggerFactory.getLogger([scope !== null && scope !== void 0 ? scope : '']);
47
63
  }
48
64
  beginTransaction(options) {
49
65
  return new Promise((resolve, reject) => {
50
66
  this.dataSource
51
- .beginTransaction(options ?? {})
67
+ .beginTransaction(options !== null && options !== void 0 ? options : {})
52
68
  .then(rs => {
53
69
  resolve(rs);
54
70
  })
@@ -63,24 +79,27 @@ class AbstractTzRepository extends DefaultCrudRepository {
63
79
  return (0, get_1.default)(this.modelClass, `_observers.${operation}`, []);
64
80
  }
65
81
  notifyObservers(opts) {
66
- const { operation, ...rest } = opts;
82
+ const { operation } = opts, rest = __rest(opts, ["operation"]);
67
83
  const observers = this.getObservers({ operation });
68
- observers.forEach(observer => observer({ ...this.modelClass, ...rest }));
84
+ observers.forEach(observer => observer(Object.assign(Object.assign({}, this.modelClass), rest)));
69
85
  }
70
86
  }
71
87
  exports.AbstractTzRepository = AbstractTzRepository;
88
+ // ----------------------------------------------------------------------------------------------------------------------------------------
72
89
  class AbstractKVRepository extends repository_1.DefaultKeyValueRepository {
73
90
  constructor(entityClass, dataSource) {
74
91
  super(entityClass, dataSource);
75
92
  }
76
93
  }
77
94
  exports.AbstractKVRepository = AbstractKVRepository;
95
+ // ----------------------------------------------------------------------------------------------------------------------------------------
78
96
  class KVRepository extends AbstractKVRepository {
79
97
  constructor(entityClass, dataSource) {
80
98
  super(entityClass, dataSource);
81
99
  }
82
100
  }
83
101
  exports.KVRepository = KVRepository;
102
+ // ----------------------------------------------------------------------------------------------------------------------------------------
84
103
  class ViewRepository extends DefaultCrudRepository {
85
104
  constructor(entityClass, dataSource) {
86
105
  super(entityClass, dataSource);
@@ -1,4 +1,12 @@
1
1
  import { Entity } from '@loopback/repository';
2
2
  import { IHasManyPolymorphicDefinition } from './types';
3
3
  import { ValueOptionalExcept } from '../../../../common';
4
+ /**
5
+ * Custom decorator to define a polymorphic `@hasManyPolymorphic` relationship
6
+ *
7
+ * @param targetModelGetter - A function to return the target model constructor
8
+ * @param definition - Additional relation metadata
9
+ *
10
+ * @experimental
11
+ */
4
12
  export declare function hasManyPolymorphic(definition: ValueOptionalExcept<IHasManyPolymorphicDefinition, 'target'>): (decoratedTarget: Entity, key: string) => void;
@@ -2,20 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasManyPolymorphic = hasManyPolymorphic;
4
4
  const repository_1 = require("@loopback/repository");
5
+ /**
6
+ * Custom decorator to define a polymorphic `@hasManyPolymorphic` relationship
7
+ *
8
+ * @param targetModelGetter - A function to return the target model constructor
9
+ * @param definition - Additional relation metadata
10
+ *
11
+ * @experimental
12
+ */
5
13
  function hasManyPolymorphic(definition) {
6
14
  return (decoratedTarget, key) => {
7
- const meta = {
8
- name: key,
9
- type: repository_1.RelationType.hasMany,
10
- targetsMany: true,
11
- source: decoratedTarget.constructor,
12
- keyFrom: 'id',
13
- keyTo: 'principalId',
14
- polymorphic: {
15
+ const meta = Object.assign({ name: key, type: repository_1.RelationType.hasMany, targetsMany: true, source: decoratedTarget.constructor, keyFrom: 'id', keyTo: 'principalId', polymorphic: {
15
16
  discriminator: 'principal',
16
- },
17
- ...definition,
18
- };
17
+ } }, definition);
19
18
  (0, repository_1.relation)(meta)(decoratedTarget, key);
20
19
  };
21
20
  }
@@ -3,6 +3,9 @@ import { IdType } from '../../../../common';
3
3
  import { Getter } from '@loopback/core';
4
4
  import { DefaultHasManyRepository, Entity, EntityCrudRepository, HasManyRepositoryFactory, InclusionResolver } from '@loopback/repository';
5
5
  import { IHasManyPolymorphicDefinition, TPolymorphic } from './types';
6
+ /**
7
+ * @experimental
8
+ */
6
9
  export declare class DefaultHasManyPolymorphicRepository<Target extends BaseEntity, TargetId extends IdType, TargetRepository extends EntityCrudRepository<Target, TargetId>, SourceId> extends DefaultHasManyRepository<Target, TargetId, TargetRepository> {
7
10
  constructor(opts: {
8
11
  targetRepositoryGetter: Getter<TargetRepository>;
@@ -12,11 +15,17 @@ export declare class DefaultHasManyPolymorphicRepository<Target extends BaseEnti
12
15
  };
13
16
  });
14
17
  }
18
+ /**
19
+ * @experimental
20
+ */
15
21
  export declare const createHasManyPolymorphicInclusionResolver: <Target extends BaseEntity, TargetId extends IdType, TargetRelations extends object>(opts: {
16
22
  principalType: string;
17
23
  relationMetadata: IHasManyPolymorphicDefinition;
18
24
  targetRepositoryGetter: Getter<EntityCrudRepository<Target, TargetId, TargetRelations>>;
19
25
  }) => InclusionResolver<Entity, Target>;
26
+ /**
27
+ * @experimental
28
+ */
20
29
  export declare const createHasManyPolymorphicRepositoryFactoryFor: <Target extends BaseEntity, TargetId extends IdType, SourceId extends IdType>(opts: {
21
30
  principalType: string;
22
31
  relationMetadata: IHasManyPolymorphicDefinition;
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
13
  };
@@ -8,6 +17,7 @@ const utilities_1 = require("../../../../utilities");
8
17
  const repository_1 = require("@loopback/repository");
9
18
  const get_1 = __importDefault(require("lodash/get"));
10
19
  const base_repository_1 = require("../../base.repository");
20
+ // ----------------------------------------------------------------------------------------------------------------------------------------
11
21
  const getPolymorphicFields = (opts) => {
12
22
  const { discriminator } = opts;
13
23
  let typeField = null;
@@ -32,6 +42,10 @@ const getPolymorphicFields = (opts) => {
32
42
  }
33
43
  return { typeField, idField };
34
44
  };
45
+ // ----------------------------------------------------------------------------------------------------------------------------------------
46
+ /**
47
+ * @experimental
48
+ */
35
49
  class DefaultHasManyPolymorphicRepository extends repository_1.DefaultHasManyRepository {
36
50
  constructor(opts) {
37
51
  const { targetRepositoryGetter, polymorphic } = opts;
@@ -43,9 +57,14 @@ class DefaultHasManyPolymorphicRepository extends repository_1.DefaultHasManyRep
43
57
  }
44
58
  }
45
59
  exports.DefaultHasManyPolymorphicRepository = DefaultHasManyPolymorphicRepository;
60
+ // ----------------------------------------------------------------------------------------------------------------------------------------
61
+ /**
62
+ * @experimental
63
+ */
46
64
  const createHasManyPolymorphicInclusionResolver = (opts) => {
47
65
  const { principalType, relationMetadata, targetRepositoryGetter } = opts;
48
- return async (entities, inclusion, options) => {
66
+ return (entities, inclusion, options) => __awaiter(void 0, void 0, void 0, function* () {
67
+ var _a;
49
68
  if (!entities.length) {
50
69
  return [];
51
70
  }
@@ -59,27 +78,26 @@ const createHasManyPolymorphicInclusionResolver = (opts) => {
59
78
  const sourceIds = entities.map(e => (0, get_1.default)(e, sourceKey));
60
79
  const targetKey = polymorphicFields.idField;
61
80
  const scope = typeof inclusion === 'string' ? {} : inclusion.scope;
62
- const targetRepository = await targetRepositoryGetter();
63
- const filter = {
64
- ...scope,
65
- where: new base_repository_1.WhereBuilder({
66
- ...(scope?.where ?? {}),
67
- })
81
+ const targetRepository = yield targetRepositoryGetter();
82
+ const filter = Object.assign(Object.assign({}, scope), { where: new base_repository_1.WhereBuilder(Object.assign({}, ((_a = scope === null || scope === void 0 ? void 0 : scope.where) !== null && _a !== void 0 ? _a : {})))
68
83
  .inq(polymorphicFields.idField, sourceIds)
69
84
  .eq(polymorphicFields.typeField, principalType)
70
- .build(),
71
- };
72
- const targets = await targetRepository.find(filter, options);
85
+ .build() });
86
+ const targets = yield targetRepository.find(filter, options);
73
87
  return (0, repository_1.flattenTargetsOfOneToManyRelation)(sourceIds, targets, targetKey);
74
- };
88
+ });
75
89
  };
76
90
  exports.createHasManyPolymorphicInclusionResolver = createHasManyPolymorphicInclusionResolver;
91
+ // ----------------------------------------------------------------------------------------------------------------------------------------
92
+ /**
93
+ * @experimental
94
+ */
77
95
  const createHasManyPolymorphicRepositoryFactoryFor = (opts) => {
78
96
  const { principalType, relationMetadata, targetRepositoryGetter } = opts;
79
97
  const rs = (sourceId) => {
80
98
  return new DefaultHasManyPolymorphicRepository({
81
99
  targetRepositoryGetter,
82
- polymorphic: { ...relationMetadata.polymorphic, typeValue: principalType, idValue: sourceId },
100
+ polymorphic: Object.assign(Object.assign({}, relationMetadata.polymorphic), { typeValue: principalType, idValue: sourceId }),
83
101
  });
84
102
  };
85
103
  rs.inclusionResolver = (0, exports.createHasManyPolymorphicInclusionResolver)(opts);