@hg-ts/repository 0.0.15

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 (106) hide show
  1. package/.eslintcache +1 -0
  2. package/.eslintrc.json +3 -0
  3. package/.mocharc.cjs +1 -0
  4. package/README.md +1 -0
  5. package/dist/exceptions/aggregate.not-found.exception.d.ts +9 -0
  6. package/dist/exceptions/aggregate.not-found.exception.d.ts.map +1 -0
  7. package/dist/exceptions/aggregate.not-found.exception.js +18 -0
  8. package/dist/exceptions/aggregate.not-found.exception.js.map +1 -0
  9. package/dist/exceptions/index.d.ts +2 -0
  10. package/dist/exceptions/index.d.ts.map +1 -0
  11. package/dist/exceptions/index.js +5 -0
  12. package/dist/exceptions/index.js.map +1 -0
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +7 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/repositories/base.memory.repository.d.ts +12 -0
  18. package/dist/repositories/base.memory.repository.d.ts.map +1 -0
  19. package/dist/repositories/base.memory.repository.js +46 -0
  20. package/dist/repositories/base.memory.repository.js.map +1 -0
  21. package/dist/repositories/base.repository.d.ts +18 -0
  22. package/dist/repositories/base.repository.d.ts.map +1 -0
  23. package/dist/repositories/base.repository.js +28 -0
  24. package/dist/repositories/base.repository.js.map +1 -0
  25. package/dist/repositories/index.d.ts +4 -0
  26. package/dist/repositories/index.d.ts.map +1 -0
  27. package/dist/repositories/index.js +7 -0
  28. package/dist/repositories/index.js.map +1 -0
  29. package/dist/repositories/repository.d.ts +16 -0
  30. package/dist/repositories/repository.d.ts.map +1 -0
  31. package/dist/repositories/repository.js +7 -0
  32. package/dist/repositories/repository.js.map +1 -0
  33. package/dist/tests/base-repository.test.d.ts +9 -0
  34. package/dist/tests/base-repository.test.d.ts.map +1 -0
  35. package/dist/tests/base-repository.test.js +56 -0
  36. package/dist/tests/base-repository.test.js.map +1 -0
  37. package/dist/tests/test.aggregate.d.ts +7 -0
  38. package/dist/tests/test.aggregate.d.ts.map +1 -0
  39. package/dist/tests/test.aggregate.js +15 -0
  40. package/dist/tests/test.aggregate.js.map +1 -0
  41. package/dist/tests/test.memory.repository.d.ts +8 -0
  42. package/dist/tests/test.memory.repository.d.ts.map +1 -0
  43. package/dist/tests/test.memory.repository.js +16 -0
  44. package/dist/tests/test.memory.repository.js.map +1 -0
  45. package/dist/tests/test.not-found.exception.d.ts +6 -0
  46. package/dist/tests/test.not-found.exception.d.ts.map +1 -0
  47. package/dist/tests/test.not-found.exception.js +11 -0
  48. package/dist/tests/test.not-found.exception.js.map +1 -0
  49. package/dist-esm/exceptions/aggregate.not-found.exception.d.ts +9 -0
  50. package/dist-esm/exceptions/aggregate.not-found.exception.d.ts.map +1 -0
  51. package/dist-esm/exceptions/aggregate.not-found.exception.js +14 -0
  52. package/dist-esm/exceptions/aggregate.not-found.exception.js.map +1 -0
  53. package/dist-esm/exceptions/index.d.ts +2 -0
  54. package/dist-esm/exceptions/index.d.ts.map +1 -0
  55. package/dist-esm/exceptions/index.js +2 -0
  56. package/dist-esm/exceptions/index.js.map +1 -0
  57. package/dist-esm/index.d.ts +4 -0
  58. package/dist-esm/index.d.ts.map +1 -0
  59. package/dist-esm/index.js +4 -0
  60. package/dist-esm/index.js.map +1 -0
  61. package/dist-esm/repositories/base.memory.repository.d.ts +12 -0
  62. package/dist-esm/repositories/base.memory.repository.d.ts.map +1 -0
  63. package/dist-esm/repositories/base.memory.repository.js +42 -0
  64. package/dist-esm/repositories/base.memory.repository.js.map +1 -0
  65. package/dist-esm/repositories/base.repository.d.ts +18 -0
  66. package/dist-esm/repositories/base.repository.d.ts.map +1 -0
  67. package/dist-esm/repositories/base.repository.js +24 -0
  68. package/dist-esm/repositories/base.repository.js.map +1 -0
  69. package/dist-esm/repositories/index.d.ts +4 -0
  70. package/dist-esm/repositories/index.d.ts.map +1 -0
  71. package/dist-esm/repositories/index.js +4 -0
  72. package/dist-esm/repositories/index.js.map +1 -0
  73. package/dist-esm/repositories/repository.d.ts +16 -0
  74. package/dist-esm/repositories/repository.d.ts.map +1 -0
  75. package/dist-esm/repositories/repository.js +3 -0
  76. package/dist-esm/repositories/repository.js.map +1 -0
  77. package/dist-esm/tests/base-repository.test.d.ts +9 -0
  78. package/dist-esm/tests/base-repository.test.d.ts.map +1 -0
  79. package/dist-esm/tests/base-repository.test.js +53 -0
  80. package/dist-esm/tests/base-repository.test.js.map +1 -0
  81. package/dist-esm/tests/test.aggregate.d.ts +7 -0
  82. package/dist-esm/tests/test.aggregate.d.ts.map +1 -0
  83. package/dist-esm/tests/test.aggregate.js +11 -0
  84. package/dist-esm/tests/test.aggregate.js.map +1 -0
  85. package/dist-esm/tests/test.memory.repository.d.ts +8 -0
  86. package/dist-esm/tests/test.memory.repository.d.ts.map +1 -0
  87. package/dist-esm/tests/test.memory.repository.js +12 -0
  88. package/dist-esm/tests/test.memory.repository.js.map +1 -0
  89. package/dist-esm/tests/test.not-found.exception.d.ts +6 -0
  90. package/dist-esm/tests/test.not-found.exception.d.ts.map +1 -0
  91. package/dist-esm/tests/test.not-found.exception.js +7 -0
  92. package/dist-esm/tests/test.not-found.exception.js.map +1 -0
  93. package/package.json +45 -0
  94. package/src/exceptions/aggregate.not-found.exception.ts +22 -0
  95. package/src/exceptions/index.ts +1 -0
  96. package/src/index.ts +5 -0
  97. package/src/repositories/base.memory.repository.ts +57 -0
  98. package/src/repositories/base.repository.ts +52 -0
  99. package/src/repositories/index.ts +3 -0
  100. package/src/repositories/repository.ts +26 -0
  101. package/src/tests/base-repository.test.ts +50 -0
  102. package/src/tests/test.aggregate.ts +13 -0
  103. package/src/tests/test.memory.repository.ts +17 -0
  104. package/src/tests/test.not-found.exception.ts +8 -0
  105. package/tsconfig.esm.json +9 -0
  106. package/tsconfig.json +10 -0
package/.eslintcache ADDED
@@ -0,0 +1 @@
1
+ [{"/Volumes/Work/ts/hg/framework/packages/repository/src/exceptions/aggregate.not-found.exception.ts":"1","/Volumes/Work/ts/hg/framework/packages/repository/src/exceptions/index.ts":"2","/Volumes/Work/ts/hg/framework/packages/repository/src/index.ts":"3","/Volumes/Work/ts/hg/framework/packages/repository/src/repositories/base.memory.repository.ts":"4","/Volumes/Work/ts/hg/framework/packages/repository/src/repositories/base.repository.ts":"5","/Volumes/Work/ts/hg/framework/packages/repository/src/repositories/index.ts":"6","/Volumes/Work/ts/hg/framework/packages/repository/src/repositories/repository.ts":"7","/Volumes/Work/ts/hg/framework/packages/repository/src/tests/base-repository.test.ts":"8","/Volumes/Work/ts/hg/framework/packages/repository/src/tests/test.aggregate.ts":"9","/Volumes/Work/ts/hg/framework/packages/repository/src/tests/test.memory.repository.ts":"10","/Volumes/Work/ts/hg/framework/packages/repository/src/tests/test.not-found.exception.ts":"11"},{"size":534,"mtime":1660867531450,"results":"12","hashOfConfig":"13"},{"size":49,"mtime":1658013976770,"results":"14","hashOfConfig":"13"},{"size":87,"mtime":1665300013457,"results":"15","hashOfConfig":"13"},{"size":1723,"mtime":1664318807291,"results":"16","hashOfConfig":"13"},{"size":1424,"mtime":1664318788406,"results":"17","hashOfConfig":"13"},{"size":107,"mtime":1626299896348,"results":"18","hashOfConfig":"13"},{"size":976,"mtime":1664318798972,"results":"19","hashOfConfig":"13"},{"size":1226,"mtime":1665299715519,"results":"20","hashOfConfig":"13"},{"size":284,"mtime":1665300649832,"results":"21","hashOfConfig":"13"},{"size":573,"mtime":1658014313846,"results":"22","hashOfConfig":"13"},{"size":291,"mtime":1658014024533,"results":"23","hashOfConfig":"13"},{"filePath":"24","messages":"25","suppressedMessages":"26","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"dgpwcw",{"filePath":"27","messages":"28","suppressedMessages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"30","messages":"31","suppressedMessages":"32","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"33","messages":"34","suppressedMessages":"35","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"36","messages":"37","suppressedMessages":"38","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39","messages":"40","suppressedMessages":"41","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"42","messages":"43","suppressedMessages":"44","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"45","messages":"46","suppressedMessages":"47","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"48","messages":"49","suppressedMessages":"50","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"51","messages":"52","suppressedMessages":"53","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"54","messages":"55","suppressedMessages":"56","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Volumes/Work/ts/hg/framework/packages/repository/src/exceptions/aggregate.not-found.exception.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/exceptions/index.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/index.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/repositories/base.memory.repository.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/repositories/base.repository.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/repositories/index.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/repositories/repository.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/tests/base-repository.test.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/tests/test.aggregate.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/tests/test.memory.repository.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/repository/src/tests/test.not-found.exception.ts",[],[]]
package/.eslintrc.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "@hg-ts-config/eslint-config/.eslintrc.json"
3
+ }
package/.mocharc.cjs ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('@hg-ts/tests/config/common.cjs');
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # @hg/exception
@@ -0,0 +1,9 @@
1
+ import { BaseException } from '@hg-ts/exception';
2
+ export declare type AggregateNotFoundParams = {
3
+ id?: unknown;
4
+ code?: number;
5
+ };
6
+ export declare abstract class AggregateNotFoundException extends BaseException {
7
+ protected constructor(aggregateName: string, params?: AggregateNotFoundParams);
8
+ }
9
+ //# sourceMappingURL=aggregate.not-found.exception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.not-found.exception.d.ts","sourceRoot":"","sources":["../../src/exceptions/aggregate.not-found.exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,oBAAY,uBAAuB,GAAG;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAA;AAED,8BAAsB,0BAA2B,SAAQ,aAAa;IACrE,SAAS,aAAa,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,uBAA4B;CAYjF"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AggregateNotFoundException = void 0;
4
+ const exception_1 = require("@hg-ts/exception");
5
+ const util_1 = require("util");
6
+ class AggregateNotFoundException extends exception_1.BaseException {
7
+ constructor(aggregateName, params = {}) {
8
+ const { code, id } = params;
9
+ const messageParts = [aggregateName];
10
+ if (id) {
11
+ messageParts.push(`with id ${(0, util_1.format)(id)}`);
12
+ }
13
+ messageParts.push('not found');
14
+ super(messageParts.join(' '), { code });
15
+ }
16
+ }
17
+ exports.AggregateNotFoundException = AggregateNotFoundException;
18
+ //# sourceMappingURL=aggregate.not-found.exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.not-found.exception.js","sourceRoot":"","sources":["../../src/exceptions/aggregate.not-found.exception.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AACjD,+BAA8B;AAO9B,MAAsB,0BAA2B,SAAQ,yBAAa;IACrE,YAAsB,aAAqB,EAAE,SAAkC,EAAE;QAChF,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;QAC5B,MAAM,YAAY,GAAG,CAAC,aAAa,CAAC,CAAC;QAErC,IAAI,EAAE,EAAE;YACP,YAAY,CAAC,IAAI,CAAC,WAAW,IAAA,aAAM,EAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC3C;QAED,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;CACD;AAbD,gEAaC"}
@@ -0,0 +1,2 @@
1
+ export * from './aggregate.not-found.exception';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./aggregate.not-found.exception"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":";;;AAAA,0EAAgD"}
@@ -0,0 +1,4 @@
1
+ import '@hg-ts/types';
2
+ export * from './exceptions';
3
+ export * from './repositories';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,cAAc,cAAc,CAAC;AAE7B,cAAc,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ require("@hg-ts/types");
5
+ tslib_1.__exportStar(require("./exceptions"), exports);
6
+ tslib_1.__exportStar(require("./repositories"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wBAAsB;AAEtB,uDAA6B;AAE7B,yDAA+B"}
@@ -0,0 +1,12 @@
1
+ import type { BaseAggregate } from '@hg-ts/domain';
2
+ import { BaseRepository } from './base.repository';
3
+ import type { BaseFindOptions, AggregateId } from './repository';
4
+ export declare abstract class BaseMemoryRepository<Aggregate extends BaseAggregate<any>, FindOptions extends BaseFindOptions<Aggregate> = BaseFindOptions<Aggregate>> extends BaseRepository<Aggregate, FindOptions> {
5
+ protected lastId: Nullable<AggregateId<Aggregate>>;
6
+ private readonly entitiesMap;
7
+ save(aggregate: Aggregate | Aggregate[]): Promise<void>;
8
+ delete(aggregate: Aggregate | Aggregate[]): Promise<void>;
9
+ clear(): Promise<void>;
10
+ protected findEntities(options: FindOptions): Promise<Aggregate[]>;
11
+ }
12
+ //# sourceMappingURL=base.memory.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.memory.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/base.memory.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACX,eAAe,EACf,WAAW,EACX,MAAM,cAAc,CAAC;AAWtB,8BAAsB,oBAAoB,CAAC,SAAS,SAAS,aAAa,CAAC,GAAG,CAAC,EAC3E,WAAW,SAAS,eAAe,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAC9E,SAAQ,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC;IAC9C,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAQ;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgD;IAE/D,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cAInB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAcxE"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseMemoryRepository = void 0;
4
+ const base_repository_1 = require("./base.repository");
5
+ function clone(aggregate) {
6
+ const aggregatePrototype = Object.getPrototypeOf(aggregate);
7
+ const result = Object.create(aggregatePrototype);
8
+ Object.assign(result, aggregate);
9
+ return result;
10
+ }
11
+ class BaseMemoryRepository extends base_repository_1.BaseRepository {
12
+ lastId = null;
13
+ entitiesMap = new Map();
14
+ async save(aggregate) {
15
+ if (Array.isArray(aggregate)) {
16
+ await Promise.all(aggregate.map(async (aggregate) => this.save(aggregate)));
17
+ }
18
+ else {
19
+ this.entitiesMap.set(aggregate['id'], clone(aggregate));
20
+ }
21
+ }
22
+ async delete(aggregate) {
23
+ if (Array.isArray(aggregate)) {
24
+ await Promise.all(aggregate.map(async (aggregate) => this.delete(aggregate)));
25
+ }
26
+ else {
27
+ this.entitiesMap.delete(aggregate['id']);
28
+ }
29
+ }
30
+ async clear() {
31
+ this.entitiesMap.clear();
32
+ }
33
+ async findEntities(options) {
34
+ const { id } = options;
35
+ if (Array.isArray(id)) {
36
+ return id.filter(id => this.entitiesMap.has(id))
37
+ .map(id => this.entitiesMap.get(id));
38
+ }
39
+ if (typeof id !== 'undefined' && this.entitiesMap.has(id)) {
40
+ return [this.entitiesMap.get(id)];
41
+ }
42
+ return [];
43
+ }
44
+ }
45
+ exports.BaseMemoryRepository = BaseMemoryRepository;
46
+ //# sourceMappingURL=base.memory.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.memory.repository.js","sourceRoot":"","sources":["../../src/repositories/base.memory.repository.ts"],"names":[],"mappings":";;;AACA,uDAAmD;AAMnD,SAAS,KAAK,CAAuC,SAAoB;IACxE,MAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEjD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEjC,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAsB,oBAErB,SAAQ,gCAAsC;IACpC,MAAM,GAAqC,IAAI,CAAC;IACzC,WAAW,GAAG,IAAI,GAAG,EAAqC,CAAC;IAErE,KAAK,CAAC,IAAI,CAAC,SAAkC;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC1E;aAAM;YACN,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;SACxD;IACF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAkC;QACrD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC5E;aAAM;YACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SACzC;IACF,CAAC;IAEM,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,OAAoB;QAChD,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;QAEvB,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACtB,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC9C,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;SACvC;QAED,IAAI,OAAO,EAAE,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC1D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;SACnC;QAED,OAAO,EAAE,CAAC;IACX,CAAC;CACD;AAxCD,oDAwCC"}
@@ -0,0 +1,18 @@
1
+ import type { BaseAggregate } from '@hg-ts/domain';
2
+ import type { AggregateNotFoundException } from '../exceptions';
3
+ import { BaseFindOptions, AggregateId, Repository } from './repository';
4
+ export declare const INTERNAL_SYMBOL: unique symbol;
5
+ declare type KeyType = number | string | symbol;
6
+ export declare type InternalData = {
7
+ updatedKeys: Set<KeyType>;
8
+ };
9
+ export declare abstract class BaseRepository<Aggregate extends BaseAggregate<any>, FindOptions extends BaseFindOptions<Aggregate> = BaseFindOptions<Aggregate>> extends Repository<Aggregate, FindOptions> {
10
+ get(id: AggregateId<Aggregate>): Promise<Nullable<Aggregate>>;
11
+ getOrFail(id: AggregateId<Aggregate>): Promise<Aggregate>;
12
+ has(id: AggregateId<Aggregate>): Promise<boolean>;
13
+ find(options?: Partial<FindOptions>): Promise<Aggregate[]>;
14
+ protected abstract findEntities(options?: Partial<FindOptions>): Promise<Aggregate[]>;
15
+ protected abstract getNotFoundException(id: AggregateId<Aggregate>): AggregateNotFoundException;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=base.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/base.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EACN,eAAe,EACf,WAAW,EACX,UAAU,EACV,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,eAAe,eAAgC,CAAC;AAE7D,aAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC,oBAAY,YAAY,GAAG;IACvB,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;CAC7B,CAAC;AAEF,8BAAsB,cAAc,CAAC,SAAS,SAAS,aAAa,CAAC,GAAG,CAAC,EACrE,WAAW,SAAS,eAAe,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAC9E,SAAQ,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC;IAC7B,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAO7D,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzD,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjD,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMpE,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAErF,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,0BAA0B;CAClG"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseRepository = exports.INTERNAL_SYMBOL = void 0;
4
+ const repository_1 = require("./repository");
5
+ exports.INTERNAL_SYMBOL = Symbol('Repository.Internal');
6
+ class BaseRepository extends repository_1.Repository {
7
+ async get(id) {
8
+ const [entity] = await this.find({ id });
9
+ return entity || null;
10
+ }
11
+ async getOrFail(id) {
12
+ const entity = await this.get(id);
13
+ if (entity === null) {
14
+ throw this.getNotFoundException(id);
15
+ }
16
+ return entity;
17
+ }
18
+ async has(id) {
19
+ const entity = await this.get(id);
20
+ return entity !== null;
21
+ }
22
+ async find(options) {
23
+ const entities = await this.findEntities(options);
24
+ return entities;
25
+ }
26
+ }
27
+ exports.BaseRepository = BaseRepository;
28
+ //# sourceMappingURL=base.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../../src/repositories/base.repository.ts"],"names":[],"mappings":";;;AAEA,6CAIsB;AAET,QAAA,eAAe,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAQ7D,MAAsB,cAErB,SAAQ,uBAAkC;IACnC,KAAK,CAAC,GAAG,CAAC,EAA0B;QAE1C,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzC,OAAO,MAAM,IAAI,IAAI,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,EAA0B;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElC,IAAI,MAAM,KAAK,IAAI,EAAE;YACpB,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;SACpC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,EAA0B;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElC,OAAO,MAAM,KAAK,IAAI,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,OAA8B;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAElD,OAAO,QAAQ,CAAC;IACjB,CAAC;CAKD;AAnCD,wCAmCC"}
@@ -0,0 +1,4 @@
1
+ export * from './base.repository';
2
+ export * from './repository';
3
+ export * from './base.memory.repository';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./base.repository"), exports);
5
+ tslib_1.__exportStar(require("./repository"), exports);
6
+ tslib_1.__exportStar(require("./base.memory.repository"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,uDAA6B;AAC7B,mEAAyC"}
@@ -0,0 +1,16 @@
1
+ import type { BaseAggregate } from '@hg-ts/domain';
2
+ export declare type AggregateId<Aggregate> = Aggregate extends BaseAggregate<infer X> ? X : never;
3
+ export declare type BaseFindOptions<Aggregate extends BaseAggregate<any>> = {
4
+ id?: AggregateId<Aggregate> | AggregateId<Aggregate>[];
5
+ };
6
+ export declare abstract class Repository<Aggregate extends BaseAggregate<any>, FindOptions extends BaseFindOptions<Aggregate> = BaseFindOptions<Aggregate>> {
7
+ abstract getNextId(): Promise<AggregateId<Aggregate>>;
8
+ abstract get(id: AggregateId<Aggregate>): Promise<Nullable<Aggregate>>;
9
+ abstract getOrFail(id: AggregateId<Aggregate>): Promise<Aggregate>;
10
+ abstract find(options?: FindOptions): Promise<Aggregate[]>;
11
+ abstract save(entity: Aggregate | Aggregate[]): Promise<void>;
12
+ abstract delete(entity: Aggregate | Aggregate[]): Promise<void>;
13
+ abstract has(id: AggregateId<Aggregate>): Promise<boolean>;
14
+ abstract clear(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/repositories/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,oBAAY,WAAW,CAAC,SAAS,IAAI,SAAS,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE1F,oBAAY,eAAe,CAAC,SAAS,SAAS,aAAa,CAAC,GAAG,CAAC,IAAI;IACnE,EAAE,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;CACvD,CAAC;AAEF,8BAAsB,UAAU,CAAC,SAAS,SAAS,aAAa,CAAC,GAAG,CAAC,EACpE,WAAW,SAAS,eAAe,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC;aAC3D,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;aAE5C,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aAE7D,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;aAEzD,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;aAEjD,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;aAEpD,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;aAEtD,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;aAEjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CACtC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Repository = void 0;
4
+ class Repository {
5
+ }
6
+ exports.Repository = Repository;
7
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/repositories/repository.ts"],"names":[],"mappings":";;;AAQA,MAAsB,UAAU;CAiB/B;AAjBD,gCAiBC"}
@@ -0,0 +1,9 @@
1
+ import { TestSuite } from '@hg-ts/tests';
2
+ export declare class BaseRepositoryTestSuite extends TestSuite {
3
+ private readonly repository;
4
+ saveTest(): Promise<void>;
5
+ getOrFailNotFoundExceptionTest(): Promise<void>;
6
+ getNotFoundWithoutExceptionTest(): Promise<void>;
7
+ beforeEach(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=base-repository.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-repository.test.d.ts","sourceRoot":"","sources":["../../src/tests/base-repository.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,SAAS,EACT,MAAM,cAAc,CAAC;AAOtB,qBACa,uBAAwB,SAAQ,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAG5C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAezB,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/C,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjD"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseRepositoryTestSuite = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tests_1 = require("@hg-ts/tests");
6
+ const uuid_1 = require("uuid");
7
+ const test_aggregate_1 = require("./test.aggregate");
8
+ const test_memory_repository_1 = require("./test.memory.repository");
9
+ const test_not_found_exception_1 = require("./test.not-found.exception");
10
+ let BaseRepositoryTestSuite = class BaseRepositoryTestSuite extends tests_1.TestSuite {
11
+ repository = new test_memory_repository_1.TestMemoryRepository();
12
+ async saveTest() {
13
+ const id = (0, uuid_1.v4)();
14
+ const aggregate = new test_aggregate_1.TestAggregate(id);
15
+ await this.repository.save(aggregate);
16
+ const savedAggregate = await this.repository.getOrFail(id);
17
+ (0, tests_1.expect)(savedAggregate).toBeInstanceOf(test_aggregate_1.TestAggregate);
18
+ (0, tests_1.expect)(savedAggregate).not.toBe(aggregate);
19
+ (0, tests_1.expect)(savedAggregate).toMatchObject(aggregate);
20
+ }
21
+ async getOrFailNotFoundExceptionTest() {
22
+ const id = (0, uuid_1.v4)();
23
+ await this.repository.getOrFail(id);
24
+ }
25
+ async getNotFoundWithoutExceptionTest() {
26
+ const id = (0, uuid_1.v4)();
27
+ await this.repository.get(id);
28
+ }
29
+ async beforeEach() {
30
+ await this.repository.clear();
31
+ }
32
+ };
33
+ tslib_1.__decorate([
34
+ (0, tests_1.Test)(),
35
+ tslib_1.__metadata("design:type", Function),
36
+ tslib_1.__metadata("design:paramtypes", []),
37
+ tslib_1.__metadata("design:returntype", Promise)
38
+ ], BaseRepositoryTestSuite.prototype, "saveTest", null);
39
+ tslib_1.__decorate([
40
+ (0, tests_1.Test)(),
41
+ (0, tests_1.ExpectException)(test_not_found_exception_1.TestNotFoundException),
42
+ tslib_1.__metadata("design:type", Function),
43
+ tslib_1.__metadata("design:paramtypes", []),
44
+ tslib_1.__metadata("design:returntype", Promise)
45
+ ], BaseRepositoryTestSuite.prototype, "getOrFailNotFoundExceptionTest", null);
46
+ tslib_1.__decorate([
47
+ (0, tests_1.Test)(),
48
+ tslib_1.__metadata("design:type", Function),
49
+ tslib_1.__metadata("design:paramtypes", []),
50
+ tslib_1.__metadata("design:returntype", Promise)
51
+ ], BaseRepositoryTestSuite.prototype, "getNotFoundWithoutExceptionTest", null);
52
+ BaseRepositoryTestSuite = tslib_1.__decorate([
53
+ (0, tests_1.Describe)()
54
+ ], BaseRepositoryTestSuite);
55
+ exports.BaseRepositoryTestSuite = BaseRepositoryTestSuite;
56
+ //# sourceMappingURL=base-repository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-repository.test.js","sourceRoot":"","sources":["../../src/tests/base-repository.test.ts"],"names":[],"mappings":";;;;AAAA,wCAMsB;AACtB,+BAAkC;AAElC,qDAAiD;AACjD,qEAAgE;AAChE,yEAAmE;AAGnE,IAAa,uBAAuB,GAApC,MAAa,uBAAwB,SAAQ,iBAAS;IACpC,UAAU,GAAG,IAAI,6CAAoB,EAAE,CAAC;IAGlD,KAAK,CAAC,QAAQ;QACpB,MAAM,EAAE,GAAG,IAAA,SAAI,GAAE,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,8BAAa,CAAC,EAAE,CAAC,CAAC;QAExC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE3D,IAAA,cAAM,EAAC,cAAc,CAAC,CAAC,cAAc,CAAC,8BAAa,CAAC,CAAC;QACrD,IAAA,cAAM,EAAC,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAA,cAAM,EAAC,cAAc,CAAC,CAAC,aAAa,CAAC,SAAgB,CAAC,CAAC;IACxD,CAAC;IAIM,KAAK,CAAC,8BAA8B;QAC1C,MAAM,EAAE,GAAG,IAAA,SAAI,GAAE,CAAC;QAElB,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAGM,KAAK,CAAC,+BAA+B;QAC3C,MAAM,EAAE,GAAG,IAAA,SAAI,GAAE,CAAC;QAElB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAEe,KAAK,CAAC,UAAU;QAC/B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACD,CAAA;AA/BA;IADC,IAAA,YAAI,GAAE;;;;uDAYN;AAID;IAFC,IAAA,YAAI,GAAE;IACN,IAAA,uBAAe,EAAC,gDAAqB,CAAC;;;;6EAKtC;AAGD;IADC,IAAA,YAAI,GAAE;;;;8EAKN;AA9BW,uBAAuB;IADnC,IAAA,gBAAQ,GAAE;GACE,uBAAuB,CAmCnC;AAnCY,0DAAuB"}
@@ -0,0 +1,7 @@
1
+ import { BaseAggregate } from '@hg-ts/domain';
2
+ export declare class TestAggregate extends BaseAggregate {
3
+ someField: Nullable<string>;
4
+ constructor(id: string);
5
+ setSomeField(value: Nullable<string>): void;
6
+ }
7
+ //# sourceMappingURL=test.aggregate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.aggregate.d.ts","sourceRoot":"","sources":["../../src/tests/test.aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,qBAAa,aAAc,SAAQ,aAAa;IACxC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAQ;gBAEvB,EAAE,EAAE,MAAM;IAItB,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;CAGlD"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestAggregate = void 0;
4
+ const domain_1 = require("@hg-ts/domain");
5
+ class TestAggregate extends domain_1.BaseAggregate {
6
+ someField = null;
7
+ constructor(id) {
8
+ super({ id });
9
+ }
10
+ setSomeField(value) {
11
+ this.someField = value;
12
+ }
13
+ }
14
+ exports.TestAggregate = TestAggregate;
15
+ //# sourceMappingURL=test.aggregate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.aggregate.js","sourceRoot":"","sources":["../../src/tests/test.aggregate.ts"],"names":[],"mappings":";;;AAAA,0CAA8C;AAE9C,MAAa,aAAc,SAAQ,sBAAa;IACxC,SAAS,GAAqB,IAAI,CAAC;IAE1C,YAAmB,EAAU;QAC5B,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACf,CAAC;IAEM,YAAY,CAAC,KAAuB;QAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACxB,CAAC;CACD;AAVD,sCAUC"}
@@ -0,0 +1,8 @@
1
+ import type { AggregateNotFoundException } from '../exceptions';
2
+ import { BaseMemoryRepository } from '../repositories';
3
+ import type { TestAggregate } from './test.aggregate';
4
+ export declare class TestMemoryRepository extends BaseMemoryRepository<TestAggregate> {
5
+ getNextId(): Promise<TestAggregate['id']>;
6
+ protected getNotFoundException(id: TestAggregate['id']): AggregateNotFoundException;
7
+ }
8
+ //# sourceMappingURL=test.memory.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.memory.repository.d.ts","sourceRoot":"","sources":["../../src/tests/test.memory.repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,qBAAa,oBAAqB,SAAQ,oBAAoB,CAAC,aAAa,CAAC;IAC/D,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAItD,SAAS,CAAC,oBAAoB,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,0BAA0B;CAGnF"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestMemoryRepository = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const repositories_1 = require("../repositories");
6
+ const test_not_found_exception_1 = require("./test.not-found.exception");
7
+ class TestMemoryRepository extends repositories_1.BaseMemoryRepository {
8
+ async getNextId() {
9
+ return (0, uuid_1.v4)();
10
+ }
11
+ getNotFoundException(id) {
12
+ return new test_not_found_exception_1.TestNotFoundException(id);
13
+ }
14
+ }
15
+ exports.TestMemoryRepository = TestMemoryRepository;
16
+ //# sourceMappingURL=test.memory.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.memory.repository.js","sourceRoot":"","sources":["../../src/tests/test.memory.repository.ts"],"names":[],"mappings":";;;AAAA,+BAAkC;AAGlC,kDAAuD;AAGvD,yEAAmE;AAEnE,MAAa,oBAAqB,SAAQ,mCAAmC;IACrE,KAAK,CAAC,SAAS;QACrB,OAAO,IAAA,SAAI,GAAE,CAAC;IACf,CAAC;IAES,oBAAoB,CAAC,EAAuB;QACrD,OAAO,IAAI,gDAAqB,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;CACD;AARD,oDAQC"}
@@ -0,0 +1,6 @@
1
+ import { AggregateNotFoundException } from '../exceptions';
2
+ import type { TestAggregate } from './test.aggregate';
3
+ export declare class TestNotFoundException extends AggregateNotFoundException {
4
+ constructor(id?: Nullable<TestAggregate['id']>);
5
+ }
6
+ //# sourceMappingURL=test.not-found.exception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.not-found.exception.d.ts","sourceRoot":"","sources":["../../src/tests/test.not-found.exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,qBAAsB,SAAQ,0BAA0B;gBACjD,EAAE,GAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAQ;CAG3D"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestNotFoundException = void 0;
4
+ const exceptions_1 = require("../exceptions");
5
+ class TestNotFoundException extends exceptions_1.AggregateNotFoundException {
6
+ constructor(id = null) {
7
+ super('Test', { id, code: 0 });
8
+ }
9
+ }
10
+ exports.TestNotFoundException = TestNotFoundException;
11
+ //# sourceMappingURL=test.not-found.exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.not-found.exception.js","sourceRoot":"","sources":["../../src/tests/test.not-found.exception.ts"],"names":[],"mappings":";;;AAAA,8CAA2D;AAG3D,MAAa,qBAAsB,SAAQ,uCAA0B;IACpE,YAAmB,KAAoC,IAAI;QAC1D,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;CACD;AAJD,sDAIC"}
@@ -0,0 +1,9 @@
1
+ import { BaseException } from '@hg-ts/exception';
2
+ export declare type AggregateNotFoundParams = {
3
+ id?: unknown;
4
+ code?: number;
5
+ };
6
+ export declare abstract class AggregateNotFoundException extends BaseException {
7
+ protected constructor(aggregateName: string, params?: AggregateNotFoundParams);
8
+ }
9
+ //# sourceMappingURL=aggregate.not-found.exception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.not-found.exception.d.ts","sourceRoot":"","sources":["../../src/exceptions/aggregate.not-found.exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,oBAAY,uBAAuB,GAAG;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAA;AAED,8BAAsB,0BAA2B,SAAQ,aAAa;IACrE,SAAS,aAAa,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,uBAA4B;CAYjF"}
@@ -0,0 +1,14 @@
1
+ import { BaseException } from '@hg-ts/exception';
2
+ import { format } from 'util';
3
+ export class AggregateNotFoundException extends BaseException {
4
+ constructor(aggregateName, params = {}) {
5
+ const { code, id } = params;
6
+ const messageParts = [aggregateName];
7
+ if (id) {
8
+ messageParts.push(`with id ${format(id)}`);
9
+ }
10
+ messageParts.push('not found');
11
+ super(messageParts.join(' '), { code });
12
+ }
13
+ }
14
+ //# sourceMappingURL=aggregate.not-found.exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.not-found.exception.js","sourceRoot":"","sources":["../../src/exceptions/aggregate.not-found.exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAO9B,MAAM,OAAgB,0BAA2B,SAAQ,aAAa;IACrE,YAAsB,aAAqB,EAAE,SAAkC,EAAE;QAChF,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;QAC5B,MAAM,YAAY,GAAG,CAAC,aAAa,CAAC,CAAC;QAErC,IAAI,EAAE,EAAE;YACP,YAAY,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC3C;QAED,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ export * from './aggregate.not-found.exception';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './aggregate.not-found.exception';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import '@hg-ts/types';
2
+ export * from './exceptions';
3
+ export * from './repositories';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,cAAc,cAAc,CAAC;AAE7B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import '@hg-ts/types';
2
+ export * from './exceptions';
3
+ export * from './repositories';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,cAAc,cAAc,CAAC;AAE7B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { BaseAggregate } from '@hg-ts/domain';
2
+ import { BaseRepository } from './base.repository';
3
+ import type { BaseFindOptions, AggregateId } from './repository';
4
+ export declare abstract class BaseMemoryRepository<Aggregate extends BaseAggregate<any>, FindOptions extends BaseFindOptions<Aggregate> = BaseFindOptions<Aggregate>> extends BaseRepository<Aggregate, FindOptions> {
5
+ protected lastId: Nullable<AggregateId<Aggregate>>;
6
+ private readonly entitiesMap;
7
+ save(aggregate: Aggregate | Aggregate[]): Promise<void>;
8
+ delete(aggregate: Aggregate | Aggregate[]): Promise<void>;
9
+ clear(): Promise<void>;
10
+ protected findEntities(options: FindOptions): Promise<Aggregate[]>;
11
+ }
12
+ //# sourceMappingURL=base.memory.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.memory.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/base.memory.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACX,eAAe,EACf,WAAW,EACX,MAAM,cAAc,CAAC;AAWtB,8BAAsB,oBAAoB,CAAC,SAAS,SAAS,aAAa,CAAC,GAAG,CAAC,EAC3E,WAAW,SAAS,eAAe,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAC9E,SAAQ,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC;IAC9C,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAQ;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgD;IAE/D,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cAInB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAcxE"}
@@ -0,0 +1,42 @@
1
+ import { BaseRepository } from './base.repository';
2
+ function clone(aggregate) {
3
+ const aggregatePrototype = Object.getPrototypeOf(aggregate);
4
+ const result = Object.create(aggregatePrototype);
5
+ Object.assign(result, aggregate);
6
+ return result;
7
+ }
8
+ export class BaseMemoryRepository extends BaseRepository {
9
+ lastId = null;
10
+ entitiesMap = new Map();
11
+ async save(aggregate) {
12
+ if (Array.isArray(aggregate)) {
13
+ await Promise.all(aggregate.map(async (aggregate) => this.save(aggregate)));
14
+ }
15
+ else {
16
+ this.entitiesMap.set(aggregate['id'], clone(aggregate));
17
+ }
18
+ }
19
+ async delete(aggregate) {
20
+ if (Array.isArray(aggregate)) {
21
+ await Promise.all(aggregate.map(async (aggregate) => this.delete(aggregate)));
22
+ }
23
+ else {
24
+ this.entitiesMap.delete(aggregate['id']);
25
+ }
26
+ }
27
+ async clear() {
28
+ this.entitiesMap.clear();
29
+ }
30
+ async findEntities(options) {
31
+ const { id } = options;
32
+ if (Array.isArray(id)) {
33
+ return id.filter(id => this.entitiesMap.has(id))
34
+ .map(id => this.entitiesMap.get(id));
35
+ }
36
+ if (typeof id !== 'undefined' && this.entitiesMap.has(id)) {
37
+ return [this.entitiesMap.get(id)];
38
+ }
39
+ return [];
40
+ }
41
+ }
42
+ //# sourceMappingURL=base.memory.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.memory.repository.js","sourceRoot":"","sources":["../../src/repositories/base.memory.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnD,SAAS,KAAK,CAAuC,SAAoB;IACxE,MAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEjD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEjC,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,OAAgB,oBAErB,SAAQ,cAAsC;IACpC,MAAM,GAAqC,IAAI,CAAC;IACzC,WAAW,GAAG,IAAI,GAAG,EAAqC,CAAC;IAErE,KAAK,CAAC,IAAI,CAAC,SAAkC;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC1E;aAAM;YACN,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;SACxD;IACF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAkC;QACrD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC5E;aAAM;YACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SACzC;IACF,CAAC;IAEM,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,OAAoB;QAChD,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;QAEvB,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACtB,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC9C,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;SACvC;QAED,IAAI,OAAO,EAAE,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC1D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;SACnC;QAED,OAAO,EAAE,CAAC;IACX,CAAC;CACD"}