@woltz/rich-domain 0.2.2 → 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 +30 -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 +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -17
- package/dist/index.js.map +1 -1
- package/dist/mapper.js +5 -1
- package/dist/mapper.js.map +1 -1
- package/dist/paginated-result.js +7 -3
- package/dist/paginated-result.js.map +1 -1
- package/dist/repository/base-repository.js +11 -4
- package/dist/repository/base-repository.js.map +1 -1
- package/dist/repository/in-memory-repository.js +8 -4
- package/dist/repository/in-memory-repository.js.map +1 -1
- package/dist/repository/index.d.ts +1 -37
- 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.js +22 -6
- package/dist/types/index.js.map +1 -1
- package/dist/types/standard-schema.js +2 -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 +1 -3
- package/src/repository/index.ts +1 -38
- package/src/types/criteria.ts +2 -2
- 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 +4 -2
- 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/dist/pagination.js
DELETED
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// ============================================================================
|
|
3
|
-
// Pagination System
|
|
4
|
-
// ============================================================================
|
|
5
|
-
// Provides offset-based and cursor-based pagination capabilities
|
|
6
|
-
// Can be used for in-memory pagination or converted to database-specific queries
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.PaginatedResult = exports.CursorPagination = exports.OffsetPagination = void 0;
|
|
9
|
-
// ============================================================================
|
|
10
|
-
// OffsetPagination Class
|
|
11
|
-
// ============================================================================
|
|
12
|
-
/**
|
|
13
|
-
* Represents offset-based pagination (traditional page-based pagination)
|
|
14
|
-
* Uses page number and page size to calculate offset
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* const pagination = new OffsetPagination(1, 20); // page 1, 20 items per page
|
|
19
|
-
* const { skip, take } = pagination.getSkipTake();
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
class OffsetPagination {
|
|
23
|
-
constructor(page, pageSize) {
|
|
24
|
-
if (page < 1) {
|
|
25
|
-
throw new Error("Page must be greater than or equal to 1");
|
|
26
|
-
}
|
|
27
|
-
if (pageSize < 1) {
|
|
28
|
-
throw new Error("Page size must be greater than or equal to 1");
|
|
29
|
-
}
|
|
30
|
-
this._page = page;
|
|
31
|
-
this._pageSize = pageSize;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Gets the current page number (1-indexed)
|
|
35
|
-
*/
|
|
36
|
-
get page() {
|
|
37
|
-
return this._page;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Gets the page size
|
|
41
|
-
*/
|
|
42
|
-
get pageSize() {
|
|
43
|
-
return this._pageSize;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Gets the type of pagination
|
|
47
|
-
*/
|
|
48
|
-
get type() {
|
|
49
|
-
return "offset";
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Calculates skip and take values for database queries
|
|
53
|
-
*/
|
|
54
|
-
getSkipTake() {
|
|
55
|
-
return {
|
|
56
|
-
skip: (this._page - 1) * this._pageSize,
|
|
57
|
-
take: this._pageSize,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Returns configuration object for serialization
|
|
62
|
-
*/
|
|
63
|
-
toConfig() {
|
|
64
|
-
return {
|
|
65
|
-
type: "offset",
|
|
66
|
-
page: this._page,
|
|
67
|
-
pageSize: this._pageSize,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Applies pagination to an in-memory array
|
|
72
|
-
*/
|
|
73
|
-
apply(items) {
|
|
74
|
-
const { skip, take } = this.getSkipTake();
|
|
75
|
-
return items.slice(skip, skip + take);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Creates a new OffsetPagination for the next page
|
|
79
|
-
*/
|
|
80
|
-
nextPage() {
|
|
81
|
-
return new OffsetPagination(this._page + 1, this._pageSize);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Creates a new OffsetPagination for the previous page
|
|
85
|
-
*/
|
|
86
|
-
previousPage() {
|
|
87
|
-
if (this._page <= 1) {
|
|
88
|
-
throw new Error("Already on first page");
|
|
89
|
-
}
|
|
90
|
-
return new OffsetPagination(this._page - 1, this._pageSize);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
exports.OffsetPagination = OffsetPagination;
|
|
94
|
-
// ============================================================================
|
|
95
|
-
// CursorPagination Class
|
|
96
|
-
// ============================================================================
|
|
97
|
-
/**
|
|
98
|
-
* Represents cursor-based pagination
|
|
99
|
-
* Uses a cursor (typically an encoded string) to determine the starting point
|
|
100
|
-
* More efficient for large datasets and real-time data
|
|
101
|
-
*
|
|
102
|
-
* @example
|
|
103
|
-
* ```typescript
|
|
104
|
-
* const pagination = new CursorPagination('cursor_abc123', 20);
|
|
105
|
-
* ```
|
|
106
|
-
*/
|
|
107
|
-
class CursorPagination {
|
|
108
|
-
constructor(cursor, pageSize, direction = "forward") {
|
|
109
|
-
if (pageSize < 1) {
|
|
110
|
-
throw new Error("Page size must be greater than or equal to 1");
|
|
111
|
-
}
|
|
112
|
-
this._cursor = cursor;
|
|
113
|
-
this._pageSize = pageSize;
|
|
114
|
-
this._direction = direction;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Gets the cursor (undefined for first page)
|
|
118
|
-
*/
|
|
119
|
-
get cursor() {
|
|
120
|
-
return this._cursor;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Gets the page size
|
|
124
|
-
*/
|
|
125
|
-
get pageSize() {
|
|
126
|
-
return this._pageSize;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Gets the pagination direction
|
|
130
|
-
*/
|
|
131
|
-
get direction() {
|
|
132
|
-
return this._direction;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Gets the type of pagination
|
|
136
|
-
*/
|
|
137
|
-
get type() {
|
|
138
|
-
return "cursor";
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Checks if this is the first page (no cursor)
|
|
142
|
-
*/
|
|
143
|
-
isFirstPage() {
|
|
144
|
-
return this._cursor === undefined;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Returns configuration object for serialization
|
|
148
|
-
*/
|
|
149
|
-
toConfig() {
|
|
150
|
-
return {
|
|
151
|
-
type: "cursor",
|
|
152
|
-
cursor: this._cursor,
|
|
153
|
-
pageSize: this._pageSize,
|
|
154
|
-
direction: this._direction,
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Creates a new CursorPagination with a different cursor
|
|
159
|
-
*/
|
|
160
|
-
withCursor(cursor) {
|
|
161
|
-
return new CursorPagination(cursor, this._pageSize, this._direction);
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Creates a new CursorPagination for backward navigation
|
|
165
|
-
*/
|
|
166
|
-
backward() {
|
|
167
|
-
return new CursorPagination(this._cursor, this._pageSize, "backward");
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Creates a new CursorPagination for forward navigation
|
|
171
|
-
*/
|
|
172
|
-
forward() {
|
|
173
|
-
return new CursorPagination(this._cursor, this._pageSize, "forward");
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
exports.CursorPagination = CursorPagination;
|
|
177
|
-
/**
|
|
178
|
-
* Represents a paginated result set
|
|
179
|
-
* Contains the data items and metadata about the pagination
|
|
180
|
-
*
|
|
181
|
-
* @example
|
|
182
|
-
* ```typescript
|
|
183
|
-
* const result = new PaginatedResult(users, {
|
|
184
|
-
* type: 'offset',
|
|
185
|
-
* page: 1,
|
|
186
|
-
* pageSize: 20,
|
|
187
|
-
* total: 100,
|
|
188
|
-
* totalPages: 5,
|
|
189
|
-
* hasNextPage: true,
|
|
190
|
-
* hasPreviousPage: false
|
|
191
|
-
* });
|
|
192
|
-
* ```
|
|
193
|
-
*/
|
|
194
|
-
class PaginatedResult {
|
|
195
|
-
constructor(data, meta) {
|
|
196
|
-
this._data = data;
|
|
197
|
-
this._meta = meta;
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Gets the data items
|
|
201
|
-
*/
|
|
202
|
-
get data() {
|
|
203
|
-
return this._data;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Gets the pagination metadata
|
|
207
|
-
*/
|
|
208
|
-
get meta() {
|
|
209
|
-
return this._meta;
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Gets the count of items in current page
|
|
213
|
-
*/
|
|
214
|
-
get count() {
|
|
215
|
-
return this._data.length;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Checks if there is a next page
|
|
219
|
-
*/
|
|
220
|
-
hasNextPage() {
|
|
221
|
-
return this._meta.hasNextPage;
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Checks if there is a previous page
|
|
225
|
-
*/
|
|
226
|
-
hasPreviousPage() {
|
|
227
|
-
return this._meta.hasPreviousPage;
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Maps the data items to a new type
|
|
231
|
-
*/
|
|
232
|
-
map(fn) {
|
|
233
|
-
return new PaginatedResult(this._data.map(fn), this._meta);
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Converts to plain object for serialization
|
|
237
|
-
*/
|
|
238
|
-
toJson() {
|
|
239
|
-
return {
|
|
240
|
-
data: this._data,
|
|
241
|
-
meta: this._meta,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Creates an offset-based paginated result from an array and pagination config
|
|
246
|
-
* Automatically calculates metadata
|
|
247
|
-
*/
|
|
248
|
-
static fromArray(allItems, pagination) {
|
|
249
|
-
const { skip, take } = pagination.getSkipTake();
|
|
250
|
-
const data = allItems.slice(skip, skip + take);
|
|
251
|
-
const total = allItems.length;
|
|
252
|
-
const totalPages = Math.ceil(total / pagination.pageSize);
|
|
253
|
-
const meta = {
|
|
254
|
-
type: "offset",
|
|
255
|
-
page: pagination.page,
|
|
256
|
-
pageSize: pagination.pageSize,
|
|
257
|
-
total,
|
|
258
|
-
totalPages,
|
|
259
|
-
hasNextPage: pagination.page < totalPages,
|
|
260
|
-
hasPreviousPage: pagination.page > 1,
|
|
261
|
-
};
|
|
262
|
-
return new PaginatedResult(data, meta);
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Creates a cursor-based paginated result
|
|
266
|
-
* Requires cursors to be calculated externally
|
|
267
|
-
*/
|
|
268
|
-
static fromCursor(data, pagination, nextCursor, previousCursor) {
|
|
269
|
-
const meta = {
|
|
270
|
-
type: "cursor",
|
|
271
|
-
pageSize: pagination.pageSize,
|
|
272
|
-
hasNextPage: nextCursor !== undefined,
|
|
273
|
-
hasPreviousPage: previousCursor !== undefined,
|
|
274
|
-
nextCursor,
|
|
275
|
-
previousCursor,
|
|
276
|
-
};
|
|
277
|
-
return new PaginatedResult(data, meta);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
exports.PaginatedResult = PaginatedResult;
|
|
281
|
-
//# sourceMappingURL=pagination.js.map
|
package/dist/pagination.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { Aggregate } from "../entity";
|
|
2
|
-
/**
|
|
3
|
-
* Mapper interface for converting between Domain and Persistence models
|
|
4
|
-
*
|
|
5
|
-
* @template TDomain - Domain aggregate/entity
|
|
6
|
-
* @template TPersistence - Database model (Prisma, TypeORM, etc.)
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```ts
|
|
10
|
-
* class UserMapper implements IMapper<User, PrismaUser> {
|
|
11
|
-
* toDomain(persistence: PrismaUser): User {
|
|
12
|
-
* return new User({
|
|
13
|
-
* id: Id.from(persistence.id),
|
|
14
|
-
* name: persistence.name,
|
|
15
|
-
* email: persistence.email,
|
|
16
|
-
* });
|
|
17
|
-
* }
|
|
18
|
-
*
|
|
19
|
-
* toPersistence(domain: User): PrismaUser {
|
|
20
|
-
* return {
|
|
21
|
-
* id: domain.id.value,
|
|
22
|
-
* name: domain.props.name,
|
|
23
|
-
* email: domain.props.email,
|
|
24
|
-
* };
|
|
25
|
-
* }
|
|
26
|
-
* }
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export interface IMapper<TDomain extends Aggregate<any>, TPersistence = any> {
|
|
30
|
-
/**
|
|
31
|
-
* Convert from persistence model to domain aggregate
|
|
32
|
-
*/
|
|
33
|
-
toDomain(persistence: TPersistence): TDomain;
|
|
34
|
-
/**
|
|
35
|
-
* Convert from domain aggregate to persistence model
|
|
36
|
-
*/
|
|
37
|
-
toPersistence(domain: TDomain): TPersistence;
|
|
38
|
-
/**
|
|
39
|
-
* Convert array of persistence models to domain aggregates
|
|
40
|
-
*/
|
|
41
|
-
toDomainList?(persistence: TPersistence[]): TDomain[];
|
|
42
|
-
/**
|
|
43
|
-
* Convert array of domain aggregates to persistence models
|
|
44
|
-
*/
|
|
45
|
-
toPersistenceList?(domain: TDomain[]): TPersistence[];
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Base mapper with default array implementations
|
|
49
|
-
*/
|
|
50
|
-
export declare abstract class BaseMapper<TDomain extends Aggregate<any>, TPersistence = any> implements IMapper<TDomain, TPersistence> {
|
|
51
|
-
abstract toDomain(persistence: TPersistence): TDomain;
|
|
52
|
-
abstract toPersistence(domain: TDomain): TPersistence;
|
|
53
|
-
toDomainList(persistence: TPersistence[]): TDomain[];
|
|
54
|
-
toPersistenceList(domain: TDomain[]): TPersistence[];
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=mapper.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/repository/mapper.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,OAAO,CAAC,OAAO,SAAS,SAAS,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,GAAG;IACzE;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC;IAE7C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CAAC;IAE7C;;OAEG;IACH,YAAY,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,CAAC;IAEtD;;OAEG;IACH,iBAAiB,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;CACvD;AAED;;GAEG;AACH,8BAAsB,UAAU,CAC9B,OAAO,SAAS,SAAS,CAAC,GAAG,CAAC,EAC9B,YAAY,GAAG,GAAG,CAClB,YAAW,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;IAEzC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,GAAG,OAAO;IACrD,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY;IAErD,YAAY,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE;IAIpD,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE;CAGrD"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// Mapper - Domain ↔ Persistence
|
|
3
|
-
// ============================================================================
|
|
4
|
-
/**
|
|
5
|
-
* Base mapper with default array implementations
|
|
6
|
-
*/
|
|
7
|
-
export class BaseMapper {
|
|
8
|
-
toDomainList(persistence) {
|
|
9
|
-
return persistence.map((p) => this.toDomain(p));
|
|
10
|
-
}
|
|
11
|
-
toPersistenceList(domain) {
|
|
12
|
-
return domain.map((d) => this.toPersistence(d));
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=mapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/repository/mapper.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAqD/E;;GAEG;AACH,MAAM,OAAgB,UAAU;IAQ9B,YAAY,CAAC,WAA2B;QACtC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,iBAAiB,CAAC,MAAiB;QACjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import type { Id } from "../id";
|
|
2
|
-
import type { Aggregate } from "../entity";
|
|
3
|
-
import type { Criteria } from "../criteria";
|
|
4
|
-
import type { PaginatedResult } from "../paginated-result";
|
|
5
|
-
/**
|
|
6
|
-
* Base repository interface
|
|
7
|
-
* Keep it minimal - only what you actually need
|
|
8
|
-
*/
|
|
9
|
-
export interface IRepository<TDomain extends Aggregate<any>> {
|
|
10
|
-
/**
|
|
11
|
-
* Find by ID
|
|
12
|
-
*/
|
|
13
|
-
findById(id: Id): Promise<TDomain | null>;
|
|
14
|
-
/**
|
|
15
|
-
* Find using criteria (filtering, ordering, pagination)
|
|
16
|
-
*/
|
|
17
|
-
find(criteria: Criteria<TDomain>): Promise<PaginatedResult<TDomain>>;
|
|
18
|
-
/**
|
|
19
|
-
* Find all (with optional criteria)
|
|
20
|
-
*/
|
|
21
|
-
findAll(criteria?: Criteria<TDomain>): Promise<TDomain[]>;
|
|
22
|
-
/**
|
|
23
|
-
* Find one (first matching criteria)
|
|
24
|
-
*/
|
|
25
|
-
findOne(criteria: Criteria<TDomain>): Promise<TDomain | null>;
|
|
26
|
-
/**
|
|
27
|
-
* Save (insert or update based on aggregate.isNew)
|
|
28
|
-
*/
|
|
29
|
-
save(aggregate: TDomain): Promise<void>;
|
|
30
|
-
/**
|
|
31
|
-
* Save multiple aggregates
|
|
32
|
-
*/
|
|
33
|
-
saveMany(aggregates: TDomain[]): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Delete aggregate
|
|
36
|
-
*/
|
|
37
|
-
delete(aggregate: TDomain): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Delete by ID
|
|
40
|
-
*/
|
|
41
|
-
deleteById(id: Id): Promise<void>;
|
|
42
|
-
/**
|
|
43
|
-
* Check if exists
|
|
44
|
-
*/
|
|
45
|
-
exists(id: Id): Promise<boolean>;
|
|
46
|
-
/**
|
|
47
|
-
* Count matching criteria
|
|
48
|
-
*/
|
|
49
|
-
count(criteria?: Criteria<TDomain>): Promise<number>;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Transaction context for Unit of Work
|
|
53
|
-
*/
|
|
54
|
-
export interface TransactionContext {
|
|
55
|
-
/**
|
|
56
|
-
* Commit all changes
|
|
57
|
-
*/
|
|
58
|
-
commit(): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Rollback all changes
|
|
61
|
-
*/
|
|
62
|
-
rollback(): Promise<void>;
|
|
63
|
-
/**
|
|
64
|
-
* Check if transaction is active
|
|
65
|
-
*/
|
|
66
|
-
isActive(): boolean;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Unit of Work interface
|
|
70
|
-
* Manages transactions across multiple repositories
|
|
71
|
-
*/
|
|
72
|
-
export interface IUnitOfWork {
|
|
73
|
-
/**
|
|
74
|
-
* Start a new transaction
|
|
75
|
-
*/
|
|
76
|
-
begin(): Promise<TransactionContext>;
|
|
77
|
-
/**
|
|
78
|
-
* Execute work within a transaction
|
|
79
|
-
* Auto-commits on success, rolls back on error
|
|
80
|
-
*/
|
|
81
|
-
transaction<T>(work: (ctx: TransactionContext) => Promise<T>): Promise<T>;
|
|
82
|
-
/**
|
|
83
|
-
* Get repository within transaction context
|
|
84
|
-
*/
|
|
85
|
-
getRepository<TDomain extends Aggregate<any>>(repository: new (...args: any[]) => IRepository<TDomain>): IRepository<TDomain>;
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/repository/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,SAAS,CAAC,GAAG,CAAC;IACzD;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAErE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE1D;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE9D;;OAEG;IACH,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAErC;;;OAGG;IACH,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE1E;;OAEG;IACH,aAAa,CAAC,OAAO,SAAS,SAAS,CAAC,GAAG,CAAC,EAC1C,UAAU,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,WAAW,CAAC,OAAO,CAAC,GACvD,WAAW,CAAC,OAAO,CAAC,CAAC;CACzB"}
|
package/dist/repository/types.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// ============================================================================
|
|
3
|
-
// Repository Types - Simple and Type-Safe
|
|
4
|
-
// ============================================================================
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/repository/types.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,0CAA0C;AAC1C,+EAA+E"}
|
package/dist/repository.d.ts
DELETED
package/dist/repository.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAIA,cAAc,oBAAoB,CAAC"}
|
package/dist/repository.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// ============================================================================
|
|
3
|
-
// Repository - Main export (backward compatibility)
|
|
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
|
-
__exportStar(require("./repository/index"), exports);
|
|
21
|
-
//# sourceMappingURL=repository.js.map
|
package/dist/repository.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,oDAAoD;AACpD,+EAA+E;;;;;;;;;;;;;;;;AAE/E,qDAAmC"}
|
package/dist/specification.d.ts
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import type { BaseProps } from "./types";
|
|
2
|
-
/**
|
|
3
|
-
* Abstract base class for Specification pattern
|
|
4
|
-
* Specifications encapsulate business rules and can be composed together
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* class AdultSpecification extends BaseSpecification<User> {
|
|
9
|
-
* isSatisfiedBy(user: User): boolean {
|
|
10
|
-
* return user.age >= 18;
|
|
11
|
-
* }
|
|
12
|
-
* }
|
|
13
|
-
*
|
|
14
|
-
* const spec = new AdultSpecification();
|
|
15
|
-
* const adults = users.filter(u => spec.isSatisfiedBy(u));
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export declare abstract class BaseSpecification<T extends BaseProps> {
|
|
19
|
-
/**
|
|
20
|
-
* Checks if the given entity satisfies this specification
|
|
21
|
-
* Must be implemented by concrete specifications
|
|
22
|
-
*/
|
|
23
|
-
abstract isSatisfiedBy(entity: T): boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Combines this specification with another using AND logic
|
|
26
|
-
* Both specifications must be satisfied
|
|
27
|
-
*/
|
|
28
|
-
and(other: BaseSpecification<T>): BaseSpecification<T>;
|
|
29
|
-
/**
|
|
30
|
-
* Combines this specification with another using OR logic
|
|
31
|
-
* At least one specification must be satisfied
|
|
32
|
-
*/
|
|
33
|
-
or(other: BaseSpecification<T>): BaseSpecification<T>;
|
|
34
|
-
/**
|
|
35
|
-
* Negates this specification
|
|
36
|
-
* Returns true if this specification is NOT satisfied
|
|
37
|
-
*/
|
|
38
|
-
not(): BaseSpecification<T>;
|
|
39
|
-
/**
|
|
40
|
-
* Creates a predicate function for use with Array.filter()
|
|
41
|
-
*/
|
|
42
|
-
asPredicate(): (entity: T) => boolean;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Specification that is always satisfied
|
|
46
|
-
* Useful as a starting point for building complex specifications
|
|
47
|
-
*/
|
|
48
|
-
export declare class TrueSpecification<T extends BaseProps> extends BaseSpecification<T> {
|
|
49
|
-
isSatisfiedBy(_entity: T): boolean;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Specification that is never satisfied
|
|
53
|
-
* Useful for testing or as a placeholder
|
|
54
|
-
*/
|
|
55
|
-
export declare class FalseSpecification<T extends BaseProps> extends BaseSpecification<T> {
|
|
56
|
-
isSatisfiedBy(_entity: T): boolean;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Specification based on a predicate function
|
|
60
|
-
* Allows creating specifications from lambda expressions
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```typescript
|
|
64
|
-
* const adultSpec = new PredicateSpecification<User>(
|
|
65
|
-
* user => user.age >= 18
|
|
66
|
-
* );
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
export declare class PredicateSpecification<T extends BaseProps> extends BaseSpecification<T> {
|
|
70
|
-
private readonly predicate;
|
|
71
|
-
constructor(predicate: (entity: T) => boolean);
|
|
72
|
-
isSatisfiedBy(entity: T): boolean;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Specification that checks if a property equals a specific value
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* ```typescript
|
|
79
|
-
* const activeSpec = new PropertyEqualsSpecification<User>('status', 'active');
|
|
80
|
-
* ```
|
|
81
|
-
*/
|
|
82
|
-
export declare class PropertyEqualsSpecification<T extends BaseProps> extends BaseSpecification<T> {
|
|
83
|
-
private readonly property;
|
|
84
|
-
private readonly value;
|
|
85
|
-
constructor(property: keyof T, value: any);
|
|
86
|
-
isSatisfiedBy(entity: T): boolean;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Specification that checks if a property is in a set of values
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* ```typescript
|
|
93
|
-
* const validStatusSpec = new PropertyInSpecification<User>('status', ['active', 'pending']);
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
export declare class PropertyInSpecification<T extends BaseProps> extends BaseSpecification<T> {
|
|
97
|
-
private readonly property;
|
|
98
|
-
private readonly values;
|
|
99
|
-
constructor(property: keyof T, values: any[]);
|
|
100
|
-
isSatisfiedBy(entity: T): boolean;
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=specification.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"specification.d.ts","sourceRoot":"","sources":["../src/specification.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAMzC;;;;;;;;;;;;;;;GAeG;AACH,8BAAsB,iBAAiB,CAAC,CAAC,SAAS,SAAS;IACzD;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO;IAE1C;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAItD;;;OAGG;IACH,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAIrD;;;OAGG;IACH,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC;IAI3B;;OAEG;IACH,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO;CAGtC;AA4DD;;;GAGG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IAC9E,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO;CAGnC;AAED;;;GAGG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IAC/E,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO;CAGnC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,sBAAsB,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO;IAI9D,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO;CAGlC;AAED;;;;;;;GAOG;AACH,qBAAa,2BAA2B,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IAEtF,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,QAAQ,EAAE,MAAM,CAAC,EACjB,KAAK,EAAE,GAAG;IAK7B,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO;CAGlC;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IAElF,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,MAAM,CAAC,EACjB,MAAM,EAAE,GAAG,EAAE;IAKhC,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO;CAGlC"}
|