@woltz/rich-domain 0.2.1 → 1.0.0
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/CHANGELOG.md +42 -0
- package/README.md +37 -20
- package/dist/base-entity.d.ts +1 -1
- package/dist/base-entity.d.ts.map +1 -1
- package/dist/base-entity.js +21 -15
- package/dist/base-entity.js.map +1 -1
- package/dist/constants.js +4 -1
- package/dist/constants.js.map +1 -1
- package/dist/criteria.d.ts.map +1 -1
- package/dist/criteria.js +7 -3
- package/dist/criteria.js.map +1 -1
- package/dist/deep-proxy.d.ts +3 -1
- package/dist/deep-proxy.d.ts.map +1 -1
- package/dist/deep-proxy.js +110 -33
- package/dist/deep-proxy.js.map +1 -1
- package/dist/domain-event-bus.js +7 -2
- package/dist/domain-event-bus.js.map +1 -1
- package/dist/domain-event.js +7 -3
- package/dist/domain-event.js.map +1 -1
- package/dist/entity.js +8 -3
- package/dist/entity.js.map +1 -1
- package/dist/id.d.ts +3 -3
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +10 -6
- package/dist/id.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -16
- package/dist/index.js.map +1 -1
- package/dist/mapper.d.ts +4 -0
- package/dist/mapper.d.ts.map +1 -0
- package/dist/mapper.js +7 -0
- package/dist/mapper.js.map +1 -0
- package/dist/paginated-result.d.ts.map +1 -1
- package/dist/paginated-result.js +7 -6
- package/dist/paginated-result.js.map +1 -1
- package/dist/repository/base-repository.d.ts +25 -48
- package/dist/repository/base-repository.d.ts.map +1 -1
- package/dist/repository/base-repository.js +14 -51
- package/dist/repository/base-repository.js.map +1 -1
- package/dist/repository/in-memory-repository.d.ts +12 -8
- package/dist/repository/in-memory-repository.d.ts.map +1 -1
- package/dist/repository/in-memory-repository.js +24 -12
- package/dist/repository/in-memory-repository.js.map +1 -1
- package/dist/repository/index.d.ts +2 -39
- package/dist/repository/index.d.ts.map +1 -1
- package/dist/repository/index.js +26 -40
- package/dist/repository/index.js.map +1 -1
- package/dist/repository/unit-of-work.js +9 -3
- package/dist/repository/unit-of-work.js.map +1 -1
- package/dist/types/criteria.d.ts +2 -2
- package/dist/types/criteria.d.ts.map +1 -1
- package/dist/types/criteria.js +4 -1
- package/dist/types/criteria.js.map +1 -1
- package/dist/types/domain.js +2 -1
- package/dist/types/history-tracker.js +2 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +22 -7
- package/dist/types/index.js.map +1 -1
- package/dist/types/standard-schema.js +2 -1
- package/dist/types/unit-of-work.d.ts +2 -2
- package/dist/types/unit-of-work.d.ts.map +1 -1
- package/dist/types/unit-of-work.js +2 -1
- package/dist/types/utils.js +2 -1
- package/dist/validation-error.js +9 -3
- package/dist/validation-error.js.map +1 -1
- package/dist/value-object.js +9 -5
- package/dist/value-object.js.map +1 -1
- package/package.json +1 -1
- package/src/base-entity.ts +3 -2
- package/src/criteria.ts +2 -2
- package/src/deep-proxy.ts +435 -339
- package/src/id.ts +4 -4
- package/src/index.ts +2 -3
- package/src/mapper.ts +3 -0
- package/src/paginated-result.ts +1 -8
- package/src/repository/base-repository.ts +27 -115
- package/src/repository/in-memory-repository.ts +28 -16
- package/src/repository/index.ts +2 -40
- package/src/types/criteria.ts +2 -2
- package/src/types/index.ts +0 -1
- package/src/types/unit-of-work.ts +3 -3
- package/tests/entity-validation.test.ts +1 -1
- package/tests/history-tracker.spec.ts +57 -17
- package/tests/id.test.ts +341 -341
- package/tests/repository.test.ts +95 -79
- package/tests/to-json.test.ts +103 -91
- package/tests/value-objects.test.ts +52 -52
- package/tsconfig.json +2 -2
- package/dist/filtering.d.ts +0 -107
- package/dist/filtering.d.ts.map +0 -1
- package/dist/filtering.js +0 -202
- package/dist/filtering.js.map +0 -1
- package/dist/ordering.d.ts +0 -93
- package/dist/ordering.d.ts.map +0 -1
- package/dist/ordering.js +0 -154
- package/dist/ordering.js.map +0 -1
- package/dist/pagination.d.ts +0 -218
- package/dist/pagination.d.ts.map +0 -1
- package/dist/pagination.js +0 -281
- package/dist/pagination.js.map +0 -1
- package/dist/repository/mapper.d.ts +0 -56
- package/dist/repository/mapper.d.ts.map +0 -1
- package/dist/repository/mapper.js +0 -15
- package/dist/repository/mapper.js.map +0 -1
- package/dist/repository/types.d.ts +0 -87
- package/dist/repository/types.d.ts.map +0 -1
- package/dist/repository/types.js +0 -6
- package/dist/repository/types.js.map +0 -1
- package/dist/repository.d.ts +0 -2
- package/dist/repository.d.ts.map +0 -1
- package/dist/repository.js +0 -21
- package/dist/repository.js.map +0 -1
- package/dist/specification.d.ts +0 -102
- package/dist/specification.d.ts.map +0 -1
- package/dist/specification.js +0 -187
- package/dist/specification.js.map +0 -1
- package/dist/types/repository.d.ts +0 -43
- package/dist/types/repository.d.ts.map +0 -1
- package/dist/types/repository.js +0 -2
- package/dist/types/repository.js.map +0 -1
- package/dist/types.d.ts +0 -88
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -12
- package/dist/types.js.map +0 -1
- package/src/repository/mapper.ts +0 -74
- package/src/types/repository.ts +0 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paginated-result.d.ts","sourceRoot":"","sources":["../src/paginated-result.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paginated-result.d.ts","sourceRoot":"","sources":["../src/paginated-result.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAU,MAAM,SAAS,CAAC;AAMlE;;;;GAIG;AACH,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,MAAM,IAAI,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,IAAI,EAAE,cAAc,CAAC;CACtB,CAAC;AAMF,qBAAa,eAAe,CAAC,CAAC;aAEV,IAAI,EAAE,CAAC,EAAE;aACT,IAAI,EAAE,cAAc;gBADpB,IAAI,EAAE,CAAC,EAAE,EACT,IAAI,EAAE,cAAc;IAGtC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EACb,IAAI,EAAE,CAAC,EAAE,EACT,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GACZ,eAAe,CAAC,CAAC,CAAC;IAKrB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc;IAaxE;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IA0C1E;;;;;;;;OAQG;IACH,MAAM,IAAI,mBAAmB,CAAC,CAAC,CAAC;IAShC;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAI9C;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}
|
package/dist/paginated-result.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PaginatedResult = void 0;
|
|
4
|
+
const id_1 = require("./id");
|
|
5
5
|
// ============================================================================
|
|
6
6
|
// PaginatedResult Class
|
|
7
7
|
// ============================================================================
|
|
8
|
-
|
|
8
|
+
class PaginatedResult {
|
|
9
9
|
constructor(data, meta) {
|
|
10
10
|
this.data = data;
|
|
11
11
|
this.meta = meta;
|
|
@@ -85,7 +85,7 @@ export class PaginatedResult {
|
|
|
85
85
|
if (obj === null || obj === undefined)
|
|
86
86
|
return obj;
|
|
87
87
|
// Id → string
|
|
88
|
-
if (obj instanceof Id)
|
|
88
|
+
if (obj instanceof id_1.Id)
|
|
89
89
|
return obj.value;
|
|
90
90
|
// Arrays → map recursively
|
|
91
91
|
if (Array.isArray(obj)) {
|
|
@@ -127,6 +127,7 @@ export class PaginatedResult {
|
|
|
127
127
|
return this.meta.hasNext;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
+
exports.PaginatedResult = PaginatedResult;
|
|
130
131
|
// ============================================================================
|
|
131
132
|
// Helper Functions (moved from criteria.ts)
|
|
132
133
|
// ============================================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paginated-result.js","sourceRoot":"","sources":["../src/paginated-result.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"paginated-result.js","sourceRoot":"","sources":["../src/paginated-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import type { Id } from "../id";
|
|
2
1
|
import type { Aggregate } from "../entity";
|
|
3
2
|
import type { Criteria } from "../criteria";
|
|
4
3
|
import { PaginatedResult } from "../paginated-result";
|
|
5
|
-
import
|
|
6
|
-
import type { IMapper } from "./mapper";
|
|
4
|
+
import { Mapper } from "../mapper";
|
|
7
5
|
/**
|
|
8
6
|
* Abstract base repository
|
|
9
7
|
* Implements common logic, delegates persistence to subclasses
|
|
@@ -28,50 +26,29 @@ import type { IMapper } from "./mapper";
|
|
|
28
26
|
* }
|
|
29
27
|
* ```
|
|
30
28
|
*/
|
|
31
|
-
export declare abstract class
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
protected abstract
|
|
54
|
-
|
|
55
|
-
* Apply criteria to query (filtering, ordering, pagination)
|
|
56
|
-
* Returns [data, total]
|
|
57
|
-
*/
|
|
58
|
-
protected abstract applyCriteria(criteria: Criteria<TDomain>): Promise<PaginatedResult<TDomain>>;
|
|
59
|
-
/**
|
|
60
|
-
* Count records matching criteria
|
|
61
|
-
*/
|
|
62
|
-
protected abstract countByCriteria(criteria?: Criteria<TDomain>): Promise<number>;
|
|
63
|
-
/**
|
|
64
|
-
* Check if record exists by ID
|
|
65
|
-
*/
|
|
66
|
-
protected abstract existsById(id: string): Promise<boolean>;
|
|
67
|
-
findById(id: Id): Promise<TDomain | null>;
|
|
68
|
-
find(criteria: Criteria<TDomain>): Promise<PaginatedResult<TDomain>>;
|
|
69
|
-
findAll(criteria?: Criteria<TDomain>): Promise<TDomain[]>;
|
|
70
|
-
findOne(criteria: Criteria<TDomain>): Promise<TDomain | null>;
|
|
71
|
-
save(aggregate: TDomain): Promise<void>;
|
|
72
|
-
delete(aggregate: TDomain): Promise<void>;
|
|
73
|
-
deleteById(id: Id): Promise<void>;
|
|
74
|
-
exists(id: Id): Promise<boolean>;
|
|
75
|
-
count(criteria?: Criteria<TDomain>): Promise<number>;
|
|
29
|
+
export declare abstract class ReadRepository<Agg extends Aggregate<any>> {
|
|
30
|
+
abstract find(criteria: Criteria<Agg>): Promise<PaginatedResult<Agg>>;
|
|
31
|
+
abstract findById(id: string): Promise<Agg | null>;
|
|
32
|
+
abstract count(criteria: Criteria<Agg>): Promise<number>;
|
|
33
|
+
abstract exists(id: string): Promise<boolean>;
|
|
34
|
+
}
|
|
35
|
+
export declare abstract class WriteRepository<Agg extends Aggregate<any>> {
|
|
36
|
+
abstract create(entity: Agg): Promise<void>;
|
|
37
|
+
abstract update(entity: Agg): Promise<void>;
|
|
38
|
+
abstract delete(entity: Agg): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export declare abstract class WriteAndRead<Agg extends Aggregate<any>> {
|
|
41
|
+
abstract find(criteria: Criteria<Agg>): Promise<PaginatedResult<Agg>>;
|
|
42
|
+
abstract findById(id: string): Promise<Agg | null>;
|
|
43
|
+
abstract create(entity: Agg): Promise<void>;
|
|
44
|
+
abstract update(entity: Agg): Promise<void>;
|
|
45
|
+
abstract delete(entity: Agg): Promise<void>;
|
|
46
|
+
abstract count(criteria: Criteria<Agg>): Promise<number>;
|
|
47
|
+
abstract exists(id: string): Promise<boolean>;
|
|
48
|
+
}
|
|
49
|
+
export declare abstract class Repository<TDomain extends Aggregate<any>> extends WriteAndRead<TDomain> {
|
|
50
|
+
protected abstract readonly mapperToDomain: Mapper<unknown, TDomain>;
|
|
51
|
+
protected abstract readonly mapperToPersistence: Mapper<TDomain, unknown>;
|
|
52
|
+
abstract get model(): any;
|
|
76
53
|
}
|
|
77
54
|
//# sourceMappingURL=base-repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-repository.d.ts","sourceRoot":"","sources":["../../src/repository/base-repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"base-repository.d.ts","sourceRoot":"","sources":["../../src/repository/base-repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,8BAAsB,cAAc,CAAC,GAAG,SAAS,SAAS,CAAC,GAAG,CAAC;IAC7D,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAC9C;AAED,8BAAsB,eAAe,CAAC,GAAG,SAAS,SAAS,CAAC,GAAG,CAAC;IAC9D,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAC5C;AAED,8BAAsB,YAAY,CAAC,GAAG,SAAS,SAAS,CAAC,GAAG,CAAC;IAC3D,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAC9C;AAED,8BAAsB,UAAU,CAC9B,OAAO,SAAS,SAAS,CAAC,GAAG,CAAC,CAC9B,SAAQ,YAAY,CAAC,OAAO,CAAC;IAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1E,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC;CAC3B"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// ============================================================================
|
|
2
3
|
// Base Repository - Abstract implementation with common logic
|
|
3
4
|
// ============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Repository = exports.WriteAndRead = exports.WriteRepository = exports.ReadRepository = void 0;
|
|
4
7
|
/**
|
|
5
8
|
* Abstract base repository
|
|
6
9
|
* Implements common logic, delegates persistence to subclasses
|
|
@@ -25,56 +28,16 @@
|
|
|
25
28
|
* }
|
|
26
29
|
* ```
|
|
27
30
|
*/
|
|
28
|
-
|
|
29
|
-
constructor(mapper) {
|
|
30
|
-
this.mapper = mapper;
|
|
31
|
-
}
|
|
32
|
-
// ============================================================================
|
|
33
|
-
// Public API - Implemented using abstract methods
|
|
34
|
-
// ============================================================================
|
|
35
|
-
async findById(id) {
|
|
36
|
-
const domain = await this.findOneById(id.value);
|
|
37
|
-
if (!domain)
|
|
38
|
-
return null;
|
|
39
|
-
return domain;
|
|
40
|
-
}
|
|
41
|
-
async find(criteria) {
|
|
42
|
-
return await this.applyCriteria(criteria);
|
|
43
|
-
}
|
|
44
|
-
async findAll(criteria) {
|
|
45
|
-
if (criteria) {
|
|
46
|
-
const result = await this.find(criteria);
|
|
47
|
-
return result.data;
|
|
48
|
-
}
|
|
49
|
-
const domains = await this.findMany();
|
|
50
|
-
return domains;
|
|
51
|
-
}
|
|
52
|
-
async findOne(criteria) {
|
|
53
|
-
// Limit to 1 result
|
|
54
|
-
const limitedCriteria = criteria.clone().limit(1);
|
|
55
|
-
const result = await this.find(limitedCriteria);
|
|
56
|
-
return result.data.length > 0 ? result.data[0] : null;
|
|
57
|
-
}
|
|
58
|
-
async save(aggregate) {
|
|
59
|
-
const persistence = this.mapper.toPersistence(aggregate);
|
|
60
|
-
if (aggregate.isNew) {
|
|
61
|
-
await this.insertOne(persistence);
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
await this.updateOne(aggregate.id.value, persistence);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
async delete(aggregate) {
|
|
68
|
-
await this.deleteOne(aggregate.id.value);
|
|
69
|
-
}
|
|
70
|
-
async deleteById(id) {
|
|
71
|
-
await this.deleteOne(id.value);
|
|
72
|
-
}
|
|
73
|
-
async exists(id) {
|
|
74
|
-
return this.existsById(id.value);
|
|
75
|
-
}
|
|
76
|
-
async count(criteria) {
|
|
77
|
-
return this.countByCriteria(criteria);
|
|
78
|
-
}
|
|
31
|
+
class ReadRepository {
|
|
79
32
|
}
|
|
33
|
+
exports.ReadRepository = ReadRepository;
|
|
34
|
+
class WriteRepository {
|
|
35
|
+
}
|
|
36
|
+
exports.WriteRepository = WriteRepository;
|
|
37
|
+
class WriteAndRead {
|
|
38
|
+
}
|
|
39
|
+
exports.WriteAndRead = WriteAndRead;
|
|
40
|
+
class Repository extends WriteAndRead {
|
|
41
|
+
}
|
|
42
|
+
exports.Repository = Repository;
|
|
80
43
|
//# sourceMappingURL=base-repository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-repository.js","sourceRoot":"","sources":["../../src/repository/base-repository.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8DAA8D;AAC9D,+EAA+E
|
|
1
|
+
{"version":3,"file":"base-repository.js","sourceRoot":"","sources":["../../src/repository/base-repository.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,8DAA8D;AAC9D,+EAA+E;;;AAO/E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAsB,cAAc;CAKnC;AALD,wCAKC;AAED,MAAsB,eAAe;CAIpC;AAJD,0CAIC;AAED,MAAsB,YAAY;CAQjC;AARD,oCAQC;AAED,MAAsB,UAEpB,SAAQ,YAAqB;CAI9B;AAND,gCAMC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { Id } from "../id";
|
|
2
1
|
import type { Aggregate } from "../entity";
|
|
3
2
|
import type { Criteria } from "../criteria";
|
|
4
3
|
import { PaginatedResult } from "../paginated-result";
|
|
5
|
-
import
|
|
4
|
+
import { Repository } from "./base-repository";
|
|
5
|
+
import { Mapper } from "../mapper";
|
|
6
6
|
/**
|
|
7
7
|
* In-memory repository implementation
|
|
8
8
|
* Perfect for unit tests and prototyping
|
|
@@ -18,17 +18,21 @@ import type { IRepository } from "../types";
|
|
|
18
18
|
* );
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
|
-
export declare class InMemoryRepository<TDomain extends Aggregate<any>>
|
|
21
|
+
export declare class InMemoryRepository<TDomain extends Aggregate<any>> extends Repository<TDomain> {
|
|
22
|
+
protected readonly mapperToDomain: Mapper<unknown, TDomain>;
|
|
23
|
+
protected readonly mapperToPersistence: Mapper<TDomain, unknown>;
|
|
22
24
|
protected items: Map<string, TDomain>;
|
|
23
|
-
|
|
25
|
+
constructor(mapperToDomain: Mapper<unknown, TDomain>, mapperToPersistence: Mapper<TDomain, unknown>);
|
|
26
|
+
get model(): any;
|
|
27
|
+
findById(id: string): Promise<TDomain | null>;
|
|
24
28
|
find(criteria: Criteria<TDomain>): Promise<PaginatedResult<TDomain>>;
|
|
25
29
|
findAll(criteria?: Criteria<TDomain>): Promise<TDomain[]>;
|
|
26
30
|
findOne(criteria: Criteria<TDomain>): Promise<TDomain | null>;
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
create(aggregate: TDomain): Promise<void>;
|
|
32
|
+
update(entity: TDomain): Promise<void>;
|
|
33
|
+
createMany(aggregates: TDomain[]): Promise<void>;
|
|
29
34
|
delete(aggregate: TDomain): Promise<void>;
|
|
30
|
-
|
|
31
|
-
exists(id: Id): Promise<boolean>;
|
|
35
|
+
exists(id: string): Promise<boolean>;
|
|
32
36
|
count(criteria?: Criteria<TDomain>): Promise<number>;
|
|
33
37
|
/**
|
|
34
38
|
* Clear all items (useful for test cleanup)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-repository.d.ts","sourceRoot":"","sources":["../../src/repository/in-memory-repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"in-memory-repository.d.ts","sourceRoot":"","sources":["../../src/repository/in-memory-repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,kBAAkB,CAC7B,OAAO,SAAS,SAAS,CAAC,GAAG,CAAC,CAC9B,SAAQ,UAAU,CAAC,OAAO,CAAC;IAIzB,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3D,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;IAJlE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAa;gBAG7B,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EACxC,mBAAmB,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;IAKlE,IAAI,KAAK,IAAI,GAAG,CAGf;IAEK,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAI7C,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAKpE,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IASzD,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAK7D,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1D;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,IAAI,OAAO,EAAE;IAInB;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// ============================================================================
|
|
2
3
|
// In-Memory Repository - Perfect for testing
|
|
3
4
|
// ============================================================================
|
|
4
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.InMemoryRepository = void 0;
|
|
7
|
+
const paginated_result_1 = require("../paginated-result");
|
|
8
|
+
const base_repository_1 = require("./base-repository");
|
|
5
9
|
/**
|
|
6
10
|
* In-memory repository implementation
|
|
7
11
|
* Perfect for unit tests and prototyping
|
|
@@ -17,16 +21,23 @@ import { PaginatedResult } from "../paginated-result";
|
|
|
17
21
|
* );
|
|
18
22
|
* ```
|
|
19
23
|
*/
|
|
20
|
-
|
|
21
|
-
constructor() {
|
|
24
|
+
class InMemoryRepository extends base_repository_1.Repository {
|
|
25
|
+
constructor(mapperToDomain, mapperToPersistence) {
|
|
26
|
+
super();
|
|
27
|
+
this.mapperToDomain = mapperToDomain;
|
|
28
|
+
this.mapperToPersistence = mapperToPersistence;
|
|
22
29
|
this.items = new Map();
|
|
23
30
|
}
|
|
31
|
+
get model() {
|
|
32
|
+
// your database table name
|
|
33
|
+
return "inMemory";
|
|
34
|
+
}
|
|
24
35
|
async findById(id) {
|
|
25
|
-
return this.items.get(id
|
|
36
|
+
return this.items.get(id) || null;
|
|
26
37
|
}
|
|
27
38
|
async find(criteria) {
|
|
28
39
|
const allItems = Array.from(this.items.values());
|
|
29
|
-
return PaginatedResult.fromArray(allItems, criteria);
|
|
40
|
+
return paginated_result_1.PaginatedResult.fromArray(allItems, criteria);
|
|
30
41
|
}
|
|
31
42
|
async findAll(criteria) {
|
|
32
43
|
if (criteria) {
|
|
@@ -39,22 +50,22 @@ export class InMemoryRepository {
|
|
|
39
50
|
const result = await this.find(criteria.clone().limit(1));
|
|
40
51
|
return result.data.length > 0 ? result.data[0] : null;
|
|
41
52
|
}
|
|
42
|
-
async
|
|
53
|
+
async create(aggregate) {
|
|
43
54
|
this.items.set(aggregate.id.value, aggregate);
|
|
44
55
|
}
|
|
45
|
-
async
|
|
56
|
+
async update(entity) {
|
|
57
|
+
this.items.set(entity.id.value, entity);
|
|
58
|
+
}
|
|
59
|
+
async createMany(aggregates) {
|
|
46
60
|
for (const aggregate of aggregates) {
|
|
47
|
-
await this.
|
|
61
|
+
await this.create(aggregate);
|
|
48
62
|
}
|
|
49
63
|
}
|
|
50
64
|
async delete(aggregate) {
|
|
51
65
|
this.items.delete(aggregate.id.value);
|
|
52
66
|
}
|
|
53
|
-
async deleteById(id) {
|
|
54
|
-
this.items.delete(id.value);
|
|
55
|
-
}
|
|
56
67
|
async exists(id) {
|
|
57
|
-
return this.items.has(id
|
|
68
|
+
return this.items.has(id);
|
|
58
69
|
}
|
|
59
70
|
async count(criteria) {
|
|
60
71
|
if (criteria) {
|
|
@@ -82,4 +93,5 @@ export class InMemoryRepository {
|
|
|
82
93
|
return this.items.size;
|
|
83
94
|
}
|
|
84
95
|
}
|
|
96
|
+
exports.InMemoryRepository = InMemoryRepository;
|
|
85
97
|
//# sourceMappingURL=in-memory-repository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-repository.js","sourceRoot":"","sources":["../../src/repository/in-memory-repository.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E
|
|
1
|
+
{"version":3,"file":"in-memory-repository.js","sourceRoot":"","sources":["../../src/repository/in-memory-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +1,5 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export
|
|
3
|
-
export { BaseRepository } from "./base-repository";
|
|
1
|
+
export { Mapper } from "../mapper";
|
|
2
|
+
export * from "./base-repository";
|
|
4
3
|
export { InMemoryRepository } from "./in-memory-repository";
|
|
5
4
|
export { UnitOfWork, BaseTransactionContext, InMemoryUnitOfWork, } from "./unit-of-work";
|
|
6
|
-
/**
|
|
7
|
-
* QUICK START:
|
|
8
|
-
*
|
|
9
|
-
* 1. For Testing:
|
|
10
|
-
* ```ts
|
|
11
|
-
* import { InMemoryRepository } from 'rich-domain';
|
|
12
|
-
*
|
|
13
|
-
* const userRepo = new InMemoryRepository<User>();
|
|
14
|
-
* await userRepo.save(user);
|
|
15
|
-
* const found = await userRepo.findById(user.id);
|
|
16
|
-
* ```
|
|
17
|
-
*
|
|
18
|
-
* 2. For Production (Prisma, TypeORM, etc):
|
|
19
|
-
* - Extend BaseRepository
|
|
20
|
-
* - Implement abstract methods
|
|
21
|
-
* - Create a Mapper
|
|
22
|
-
* - See examples/ folder for reference
|
|
23
|
-
*
|
|
24
|
-
* 3. With Criteria:
|
|
25
|
-
* ```ts
|
|
26
|
-
* const result = await userRepo.find(
|
|
27
|
-
* Criteria.create<User>()
|
|
28
|
-
* .whereEquals('status', 'active')
|
|
29
|
-
* .orderByDesc('createdAt')
|
|
30
|
-
* .paginate(1, 10)
|
|
31
|
-
* );
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* 4. With Unit of Work:
|
|
35
|
-
* ```ts
|
|
36
|
-
* await uow.transaction(async (ctx) => {
|
|
37
|
-
* const userRepo = uow.getRepository(UserRepository);
|
|
38
|
-
* await userRepo.save(user);
|
|
39
|
-
* });
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
package/dist/repository/index.js
CHANGED
|
@@ -1,47 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// ============================================================================
|
|
2
3
|
// Repository Module - Clean exports
|
|
3
4
|
// ============================================================================
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.InMemoryUnitOfWork = exports.BaseTransactionContext = exports.UnitOfWork = exports.InMemoryRepository = exports.Mapper = void 0;
|
|
4
21
|
// Mapper
|
|
5
|
-
|
|
22
|
+
var mapper_1 = require("../mapper");
|
|
23
|
+
Object.defineProperty(exports, "Mapper", { enumerable: true, get: function () { return mapper_1.Mapper; } });
|
|
6
24
|
// Base implementations
|
|
7
|
-
|
|
8
|
-
|
|
25
|
+
__exportStar(require("./base-repository"), exports);
|
|
26
|
+
var in_memory_repository_1 = require("./in-memory-repository");
|
|
27
|
+
Object.defineProperty(exports, "InMemoryRepository", { enumerable: true, get: function () { return in_memory_repository_1.InMemoryRepository; } });
|
|
9
28
|
// Unit of Work
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* 1. For Testing:
|
|
15
|
-
* ```ts
|
|
16
|
-
* import { InMemoryRepository } from 'rich-domain';
|
|
17
|
-
*
|
|
18
|
-
* const userRepo = new InMemoryRepository<User>();
|
|
19
|
-
* await userRepo.save(user);
|
|
20
|
-
* const found = await userRepo.findById(user.id);
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* 2. For Production (Prisma, TypeORM, etc):
|
|
24
|
-
* - Extend BaseRepository
|
|
25
|
-
* - Implement abstract methods
|
|
26
|
-
* - Create a Mapper
|
|
27
|
-
* - See examples/ folder for reference
|
|
28
|
-
*
|
|
29
|
-
* 3. With Criteria:
|
|
30
|
-
* ```ts
|
|
31
|
-
* const result = await userRepo.find(
|
|
32
|
-
* Criteria.create<User>()
|
|
33
|
-
* .whereEquals('status', 'active')
|
|
34
|
-
* .orderByDesc('createdAt')
|
|
35
|
-
* .paginate(1, 10)
|
|
36
|
-
* );
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* 4. With Unit of Work:
|
|
40
|
-
* ```ts
|
|
41
|
-
* await uow.transaction(async (ctx) => {
|
|
42
|
-
* const userRepo = uow.getRepository(UserRepository);
|
|
43
|
-
* await userRepo.save(user);
|
|
44
|
-
* });
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
29
|
+
var unit_of_work_1 = require("./unit-of-work");
|
|
30
|
+
Object.defineProperty(exports, "UnitOfWork", { enumerable: true, get: function () { return unit_of_work_1.UnitOfWork; } });
|
|
31
|
+
Object.defineProperty(exports, "BaseTransactionContext", { enumerable: true, get: function () { return unit_of_work_1.BaseTransactionContext; } });
|
|
32
|
+
Object.defineProperty(exports, "InMemoryUnitOfWork", { enumerable: true, get: function () { return unit_of_work_1.InMemoryUnitOfWork; } });
|
|
47
33
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;;;;;;;;;;;;;;;;;AAE/E,SAAS;AACT,oCAAmC;AAA1B,gGAAA,MAAM,OAAA;AAEf,uBAAuB;AACvB,oDAAkC;AAClC,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAE3B,eAAe;AACf,+CAIwB;AAHtB,0GAAA,UAAU,OAAA;AACV,sHAAA,sBAAsB,OAAA;AACtB,kHAAA,kBAAkB,OAAA"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// ============================================================================
|
|
2
3
|
// Unit of Work - Simple transaction management
|
|
3
4
|
// ============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.InMemoryUnitOfWork = exports.BaseTransactionContext = exports.UnitOfWork = void 0;
|
|
4
7
|
/**
|
|
5
8
|
* Abstract Unit of Work
|
|
6
9
|
* Provides transaction management across multiple repositories
|
|
@@ -30,7 +33,7 @@
|
|
|
30
33
|
* }
|
|
31
34
|
* ```
|
|
32
35
|
*/
|
|
33
|
-
|
|
36
|
+
class UnitOfWork {
|
|
34
37
|
constructor() {
|
|
35
38
|
this.currentContext = null;
|
|
36
39
|
this.repositoryCache = new Map();
|
|
@@ -70,10 +73,11 @@ export class UnitOfWork {
|
|
|
70
73
|
return repo;
|
|
71
74
|
}
|
|
72
75
|
}
|
|
76
|
+
exports.UnitOfWork = UnitOfWork;
|
|
73
77
|
/**
|
|
74
78
|
* Base Transaction Context
|
|
75
79
|
*/
|
|
76
|
-
|
|
80
|
+
class BaseTransactionContext {
|
|
77
81
|
constructor() {
|
|
78
82
|
this._isActive = true;
|
|
79
83
|
}
|
|
@@ -84,10 +88,11 @@ export class BaseTransactionContext {
|
|
|
84
88
|
this._isActive = false;
|
|
85
89
|
}
|
|
86
90
|
}
|
|
91
|
+
exports.BaseTransactionContext = BaseTransactionContext;
|
|
87
92
|
/**
|
|
88
93
|
* In-Memory Unit of Work (for testing)
|
|
89
94
|
*/
|
|
90
|
-
|
|
95
|
+
class InMemoryUnitOfWork extends UnitOfWork {
|
|
91
96
|
constructor() {
|
|
92
97
|
super(...arguments);
|
|
93
98
|
this.committed = false;
|
|
@@ -111,6 +116,7 @@ export class InMemoryUnitOfWork extends UnitOfWork {
|
|
|
111
116
|
return this.rolledBack;
|
|
112
117
|
}
|
|
113
118
|
}
|
|
119
|
+
exports.InMemoryUnitOfWork = InMemoryUnitOfWork;
|
|
114
120
|
class InMemoryTransactionContext extends BaseTransactionContext {
|
|
115
121
|
async commit() {
|
|
116
122
|
this.markInactive();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-of-work.js","sourceRoot":"","sources":["../../src/repository/unit-of-work.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E
|
|
1
|
+
{"version":3,"file":"unit-of-work.js","sourceRoot":"","sources":["../../src/repository/unit-of-work.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;;;AAI/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAsB,UAAU;IAAhC;QACY,mBAAc,GAA8B,IAAI,CAAC;QACjD,oBAAe,GAAqB,IAAI,GAAG,EAAE,CAAC;IAmD1D,CAAC;IA/CC;;;OAGG;IACH,KAAK,CAAC,WAAW,CACf,IAA6C;QAE7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACnB,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;YACvB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CACX,eAA8C;QAE9C,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC;QAEjC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;CAQF;AArDD,gCAqDC;AAED;;GAEG;AACH,MAAsB,sBAAsB;IAA5C;QACY,cAAS,GAAG,IAAI,CAAC;IAY7B,CAAC;IAPC,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;CACF;AAbD,wDAaC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,UAAU;IAAlD;;QACU,cAAS,GAAG,KAAK,CAAC;QAClB,eAAU,GAAG,KAAK,CAAC;IAwB7B,CAAC;IAtBC,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,cAAc,GAAG,IAAI,0BAA0B,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAES,gBAAgB,CACxB,eAA8C;QAE9C,4CAA4C;QAC5C,kDAAkD;QAClD,OAAO,IAAI,eAAe,EAAE,CAAC;IAC/B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF;AA1BD,gDA0BC;AAED,MAAM,0BAA2B,SAAQ,sBAAsB;IAC7D,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;CACF"}
|
package/dist/types/criteria.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Primitive } from "./utils";
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const FILTER_OPERATORS: readonly ["equals", "notEquals", "greaterThan", "greaterThanOrEqual", "lessThan", "lessThanOrEqual", "contains", "startsWith", "endsWith", "in", "notIn", "between", "isNull", "isNotNull"];
|
|
3
3
|
export type FilterValueFor<T> = T | (T extends number | Date ? [T, T] : never) | T[] | null;
|
|
4
4
|
export type PathValue<T, P extends string> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? PathValue<T[K], Rest> : never : P extends keyof T ? T[P] : never;
|
|
5
|
-
export type FilterOperator = (typeof
|
|
5
|
+
export type FilterOperator = (typeof FILTER_OPERATORS)[number];
|
|
6
6
|
export interface Filter<TField = string, TValue = unknown> {
|
|
7
7
|
field: TField;
|
|
8
8
|
operator: FilterOperator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../src/types/criteria.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../src/types/criteria.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,eAAO,MAAM,gBAAgB,6LAenB,CAAC;AAEX,MAAM,MAAM,cAAc,CAAC,CAAC,IACxB,CAAC,GACD,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,GACpB,CAAC,CAAC,EAAE,CAAC,CAAC,GACN,KAAK,CAAC,GACV,CAAC,EAAE,GACH,IAAI,CAAC;AAET,MAAM,MAAM,SAAS,CACnB,CAAC,EACD,CAAC,SAAS,MAAM,IACd,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,EAAE,GACpC,CAAC,SAAS,MAAM,CAAC,GACf,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GACrB,KAAK,GACP,CAAC,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,WAAW,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,OAAO;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAChE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAC3C,CAAC,GACD,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAC3B,CAAC,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,GAC1B,CAAC,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;CAClC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC"}
|