@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.
- package/.eslintcache +1 -0
- package/.eslintrc.json +3 -0
- package/.mocharc.cjs +1 -0
- package/README.md +1 -0
- package/dist/exceptions/aggregate.not-found.exception.d.ts +9 -0
- package/dist/exceptions/aggregate.not-found.exception.d.ts.map +1 -0
- package/dist/exceptions/aggregate.not-found.exception.js +18 -0
- package/dist/exceptions/aggregate.not-found.exception.js.map +1 -0
- package/dist/exceptions/index.d.ts +2 -0
- package/dist/exceptions/index.d.ts.map +1 -0
- package/dist/exceptions/index.js +5 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/base.memory.repository.d.ts +12 -0
- package/dist/repositories/base.memory.repository.d.ts.map +1 -0
- package/dist/repositories/base.memory.repository.js +46 -0
- package/dist/repositories/base.memory.repository.js.map +1 -0
- package/dist/repositories/base.repository.d.ts +18 -0
- package/dist/repositories/base.repository.d.ts.map +1 -0
- package/dist/repositories/base.repository.js +28 -0
- package/dist/repositories/base.repository.js.map +1 -0
- package/dist/repositories/index.d.ts +4 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +7 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/repository.d.ts +16 -0
- package/dist/repositories/repository.d.ts.map +1 -0
- package/dist/repositories/repository.js +7 -0
- package/dist/repositories/repository.js.map +1 -0
- package/dist/tests/base-repository.test.d.ts +9 -0
- package/dist/tests/base-repository.test.d.ts.map +1 -0
- package/dist/tests/base-repository.test.js +56 -0
- package/dist/tests/base-repository.test.js.map +1 -0
- package/dist/tests/test.aggregate.d.ts +7 -0
- package/dist/tests/test.aggregate.d.ts.map +1 -0
- package/dist/tests/test.aggregate.js +15 -0
- package/dist/tests/test.aggregate.js.map +1 -0
- package/dist/tests/test.memory.repository.d.ts +8 -0
- package/dist/tests/test.memory.repository.d.ts.map +1 -0
- package/dist/tests/test.memory.repository.js +16 -0
- package/dist/tests/test.memory.repository.js.map +1 -0
- package/dist/tests/test.not-found.exception.d.ts +6 -0
- package/dist/tests/test.not-found.exception.d.ts.map +1 -0
- package/dist/tests/test.not-found.exception.js +11 -0
- package/dist/tests/test.not-found.exception.js.map +1 -0
- package/dist-esm/exceptions/aggregate.not-found.exception.d.ts +9 -0
- package/dist-esm/exceptions/aggregate.not-found.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/aggregate.not-found.exception.js +14 -0
- package/dist-esm/exceptions/aggregate.not-found.exception.js.map +1 -0
- package/dist-esm/exceptions/index.d.ts +2 -0
- package/dist-esm/exceptions/index.d.ts.map +1 -0
- package/dist-esm/exceptions/index.js +2 -0
- package/dist-esm/exceptions/index.js.map +1 -0
- package/dist-esm/index.d.ts +4 -0
- package/dist-esm/index.d.ts.map +1 -0
- package/dist-esm/index.js +4 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/repositories/base.memory.repository.d.ts +12 -0
- package/dist-esm/repositories/base.memory.repository.d.ts.map +1 -0
- package/dist-esm/repositories/base.memory.repository.js +42 -0
- package/dist-esm/repositories/base.memory.repository.js.map +1 -0
- package/dist-esm/repositories/base.repository.d.ts +18 -0
- package/dist-esm/repositories/base.repository.d.ts.map +1 -0
- package/dist-esm/repositories/base.repository.js +24 -0
- package/dist-esm/repositories/base.repository.js.map +1 -0
- package/dist-esm/repositories/index.d.ts +4 -0
- package/dist-esm/repositories/index.d.ts.map +1 -0
- package/dist-esm/repositories/index.js +4 -0
- package/dist-esm/repositories/index.js.map +1 -0
- package/dist-esm/repositories/repository.d.ts +16 -0
- package/dist-esm/repositories/repository.d.ts.map +1 -0
- package/dist-esm/repositories/repository.js +3 -0
- package/dist-esm/repositories/repository.js.map +1 -0
- package/dist-esm/tests/base-repository.test.d.ts +9 -0
- package/dist-esm/tests/base-repository.test.d.ts.map +1 -0
- package/dist-esm/tests/base-repository.test.js +53 -0
- package/dist-esm/tests/base-repository.test.js.map +1 -0
- package/dist-esm/tests/test.aggregate.d.ts +7 -0
- package/dist-esm/tests/test.aggregate.d.ts.map +1 -0
- package/dist-esm/tests/test.aggregate.js +11 -0
- package/dist-esm/tests/test.aggregate.js.map +1 -0
- package/dist-esm/tests/test.memory.repository.d.ts +8 -0
- package/dist-esm/tests/test.memory.repository.d.ts.map +1 -0
- package/dist-esm/tests/test.memory.repository.js +12 -0
- package/dist-esm/tests/test.memory.repository.js.map +1 -0
- package/dist-esm/tests/test.not-found.exception.d.ts +6 -0
- package/dist-esm/tests/test.not-found.exception.d.ts.map +1 -0
- package/dist-esm/tests/test.not-found.exception.js +7 -0
- package/dist-esm/tests/test.not-found.exception.js.map +1 -0
- package/package.json +45 -0
- package/src/exceptions/aggregate.not-found.exception.ts +22 -0
- package/src/exceptions/index.ts +1 -0
- package/src/index.ts +5 -0
- package/src/repositories/base.memory.repository.ts +57 -0
- package/src/repositories/base.repository.ts +52 -0
- package/src/repositories/index.ts +3 -0
- package/src/repositories/repository.ts +26 -0
- package/src/tests/base-repository.test.ts +50 -0
- package/src/tests/test.aggregate.ts +13 -0
- package/src/tests/test.memory.repository.ts +17 -0
- package/src/tests/test.not-found.exception.ts +8 -0
- package/tsconfig.esm.json +9 -0
- 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
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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":";;;AAAA,0EAAgD"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
|
|
@@ -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 @@
|
|
|
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"}
|