@woltz/rich-domain 1.9.2 → 1.9.3
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/dist/cjs/constants.d.ts +1 -1
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/core/base-entity.d.ts +2 -1
- package/dist/cjs/core/base-entity.d.ts.map +1 -1
- package/dist/cjs/core/base-entity.js +9 -7
- package/dist/cjs/core/base-entity.js.map +1 -1
- package/dist/cjs/core/change-tracker.d.ts +1 -0
- package/dist/cjs/core/change-tracker.d.ts.map +1 -1
- package/dist/cjs/core/change-tracker.js +24 -15
- package/dist/cjs/core/change-tracker.js.map +1 -1
- package/dist/cjs/core/domain-event.d.ts +1 -1
- package/dist/cjs/core/domain-event.d.ts.map +1 -1
- package/dist/cjs/core/domain-event.js +2 -2
- package/dist/cjs/core/domain-event.js.map +1 -1
- package/dist/cjs/core/entities.d.ts +8 -0
- package/dist/cjs/core/entities.d.ts.map +1 -0
- package/dist/cjs/core/entities.js +12 -0
- package/dist/cjs/core/entities.js.map +1 -0
- package/dist/cjs/core/index.d.ts +9 -9
- package/dist/cjs/core/index.d.ts.map +1 -1
- package/dist/cjs/core/index.js +9 -9
- package/dist/cjs/core/index.js.map +1 -1
- package/dist/cjs/repository/base-repository.d.ts +1 -1
- package/dist/cjs/repository/base-repository.d.ts.map +1 -1
- package/dist/cjs/repository/entity-schema-registry.d.ts +1 -1
- package/dist/cjs/repository/entity-schema-registry.d.ts.map +1 -1
- package/dist/cjs/repository/entity-schema-registry.js +5 -5
- package/dist/cjs/repository/entity-schema-registry.js.map +1 -1
- package/dist/cjs/types/change-tracker.d.ts +1 -1
- package/dist/cjs/types/change-tracker.d.ts.map +1 -1
- package/dist/cjs/types/domain.d.ts +1 -1
- package/dist/cjs/types/domain.d.ts.map +1 -1
- package/dist/cjs/types/event-bus.d.ts +1 -1
- package/dist/cjs/types/event-bus.d.ts.map +1 -1
- package/dist/cjs/types/unit-of-work.d.ts +2 -2
- package/dist/cjs/types/unit-of-work.d.ts.map +1 -1
- package/dist/cjs/types/utils.d.ts +1 -1
- package/dist/cjs/types/utils.d.ts.map +1 -1
- package/dist/esm/constants.d.ts +1 -1
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/core/base-entity.d.ts +2 -1
- package/dist/esm/core/base-entity.d.ts.map +1 -1
- package/dist/esm/core/base-entity.js +3 -1
- package/dist/esm/core/base-entity.js.map +1 -1
- package/dist/esm/core/change-tracker.d.ts +1 -0
- package/dist/esm/core/change-tracker.d.ts.map +1 -1
- package/dist/esm/core/change-tracker.js +24 -15
- package/dist/esm/core/change-tracker.js.map +1 -1
- package/dist/esm/core/domain-event.d.ts +1 -1
- package/dist/esm/core/domain-event.d.ts.map +1 -1
- package/dist/esm/core/domain-event.js +1 -1
- package/dist/esm/core/domain-event.js.map +1 -1
- package/dist/esm/core/entities.d.ts +8 -0
- package/dist/esm/core/entities.d.ts.map +1 -0
- package/dist/esm/core/entities.js +7 -0
- package/dist/esm/core/entities.js.map +1 -0
- package/dist/esm/core/index.d.ts +9 -9
- package/dist/esm/core/index.d.ts.map +1 -1
- package/dist/esm/core/index.js +9 -9
- package/dist/esm/core/index.js.map +1 -1
- package/dist/esm/repository/base-repository.d.ts +1 -1
- package/dist/esm/repository/base-repository.d.ts.map +1 -1
- package/dist/esm/repository/entity-schema-registry.d.ts +1 -1
- package/dist/esm/repository/entity-schema-registry.d.ts.map +1 -1
- package/dist/esm/repository/entity-schema-registry.js +1 -1
- package/dist/esm/repository/entity-schema-registry.js.map +1 -1
- package/dist/esm/types/change-tracker.d.ts +1 -1
- package/dist/esm/types/change-tracker.d.ts.map +1 -1
- package/dist/esm/types/domain.d.ts +1 -1
- package/dist/esm/types/domain.d.ts.map +1 -1
- package/dist/esm/types/event-bus.d.ts +1 -1
- package/dist/esm/types/event-bus.d.ts.map +1 -1
- package/dist/esm/types/unit-of-work.d.ts +2 -2
- package/dist/esm/types/unit-of-work.d.ts.map +1 -1
- package/dist/esm/types/utils.d.ts +1 -1
- package/dist/esm/types/utils.d.ts.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/constants.d.ts +1 -1
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/core/base-entity.d.ts +2 -1
- package/dist/types/core/base-entity.d.ts.map +1 -1
- package/dist/types/core/change-tracker.d.ts +1 -0
- package/dist/types/core/change-tracker.d.ts.map +1 -1
- package/dist/types/core/domain-event.d.ts +1 -1
- package/dist/types/core/domain-event.d.ts.map +1 -1
- package/dist/types/core/entities.d.ts +8 -0
- package/dist/types/core/entities.d.ts.map +1 -0
- package/dist/types/core/index.d.ts +9 -9
- package/dist/types/core/index.d.ts.map +1 -1
- package/dist/types/repository/base-repository.d.ts +1 -1
- package/dist/types/repository/base-repository.d.ts.map +1 -1
- package/dist/types/repository/entity-schema-registry.d.ts +1 -1
- package/dist/types/repository/entity-schema-registry.d.ts.map +1 -1
- package/dist/types/types/change-tracker.d.ts +1 -1
- package/dist/types/types/change-tracker.d.ts.map +1 -1
- package/dist/types/types/domain.d.ts +1 -1
- package/dist/types/types/domain.d.ts.map +1 -1
- package/dist/types/types/event-bus.d.ts +1 -1
- package/dist/types/types/event-bus.d.ts.map +1 -1
- package/dist/types/types/unit-of-work.d.ts +2 -2
- package/dist/types/types/unit-of-work.d.ts.map +1 -1
- package/dist/types/types/utils.d.ts +1 -1
- package/dist/types/types/utils.d.ts.map +1 -1
- package/package.json +68 -68
- package/src/constants.ts +82 -82
- package/src/core/aggregate-changes.ts +466 -466
- package/src/core/base-entity.ts +4 -1
- package/src/core/change-tracker.ts +30 -16
- package/src/core/domain-event.ts +41 -41
- package/src/core/{entity.ts → entities.ts} +13 -13
- package/src/core/index.ts +9 -9
- package/src/core/value-object.ts +179 -179
- package/src/repository/base-repository.ts +81 -81
- package/src/repository/entity-schema-registry.ts +1 -1
- package/src/types/change-tracker.ts +268 -268
- package/src/types/domain.ts +41 -41
- package/src/types/event-bus.ts +17 -17
- package/src/types/unit-of-work.ts +46 -46
- package/src/types/utils.ts +24 -24
- package/src/utils/helpers.ts +50 -50
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import { Aggregate } from "../core/index";
|
|
2
|
-
import { Repository } from "../repository/base-repository.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Transaction context for Unit of Work
|
|
6
|
-
*/
|
|
7
|
-
export interface TransactionContext {
|
|
8
|
-
/**
|
|
9
|
-
* Commit all changes
|
|
10
|
-
*/
|
|
11
|
-
commit(): Promise<void>;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Rollback all changes
|
|
15
|
-
*/
|
|
16
|
-
rollback(): Promise<void>;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Check if transaction is active
|
|
20
|
-
*/
|
|
21
|
-
isActive(): boolean;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Unit of Work interface
|
|
26
|
-
* Manages transactions across multiple repositories
|
|
27
|
-
*/
|
|
28
|
-
export interface IUnitOfWork {
|
|
29
|
-
/**
|
|
30
|
-
* Start a new transaction
|
|
31
|
-
*/
|
|
32
|
-
begin(): Promise<TransactionContext>;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Execute work within a transaction
|
|
36
|
-
* Auto-commits on success, rolls back on error
|
|
37
|
-
*/
|
|
38
|
-
transaction<T>(work: (ctx: TransactionContext) => Promise<T>): Promise<T>;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Get repository within transaction context
|
|
42
|
-
*/
|
|
43
|
-
getRepository<TDomain extends Aggregate<any>>(
|
|
44
|
-
repository: new (...args: any[]) => Repository<TDomain>
|
|
45
|
-
): Repository<TDomain>;
|
|
46
|
-
}
|
|
1
|
+
import type { Aggregate } from "../core/index.js";
|
|
2
|
+
import type { Repository } from "../repository/base-repository.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Transaction context for Unit of Work
|
|
6
|
+
*/
|
|
7
|
+
export interface TransactionContext {
|
|
8
|
+
/**
|
|
9
|
+
* Commit all changes
|
|
10
|
+
*/
|
|
11
|
+
commit(): Promise<void>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Rollback all changes
|
|
15
|
+
*/
|
|
16
|
+
rollback(): Promise<void>;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Check if transaction is active
|
|
20
|
+
*/
|
|
21
|
+
isActive(): boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Unit of Work interface
|
|
26
|
+
* Manages transactions across multiple repositories
|
|
27
|
+
*/
|
|
28
|
+
export interface IUnitOfWork {
|
|
29
|
+
/**
|
|
30
|
+
* Start a new transaction
|
|
31
|
+
*/
|
|
32
|
+
begin(): Promise<TransactionContext>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Execute work within a transaction
|
|
36
|
+
* Auto-commits on success, rolls back on error
|
|
37
|
+
*/
|
|
38
|
+
transaction<T>(work: (ctx: TransactionContext) => Promise<T>): Promise<T>;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Get repository within transaction context
|
|
42
|
+
*/
|
|
43
|
+
getRepository<TDomain extends Aggregate<any>>(
|
|
44
|
+
repository: new (...args: any[]) => Repository<TDomain>
|
|
45
|
+
): Repository<TDomain>;
|
|
46
|
+
}
|
package/src/types/utils.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { Id, ValueObject } from "../core/index";
|
|
2
|
-
|
|
3
|
-
type JsonPrimitive = string | number | boolean | null;
|
|
4
|
-
|
|
5
|
-
export type DeepJsonResult<T> = T extends Id
|
|
6
|
-
? string
|
|
7
|
-
: T extends ValueObject<infer U>
|
|
8
|
-
? U
|
|
9
|
-
: T extends Date
|
|
10
|
-
? string
|
|
11
|
-
: T extends Array<infer U>
|
|
12
|
-
? DeepJsonResult<U>[]
|
|
13
|
-
: T extends { toJSON(): infer R }
|
|
14
|
-
? DeepJsonResult<R>
|
|
15
|
-
: T extends object
|
|
16
|
-
? { [K in keyof T]: DeepJsonResult<T[K]> }
|
|
17
|
-
: T extends JsonPrimitive
|
|
18
|
-
? T
|
|
19
|
-
: never;
|
|
20
|
-
|
|
21
|
-
export type Primitive = string | number | boolean | Date | null | undefined;
|
|
22
|
-
export type UnwrapArray<T> = T extends Array<infer U> ? U : never;
|
|
23
|
-
export type IsArray<T> = T extends Array<any> ? true : false;
|
|
24
|
-
export type NonUndefined<T> = T extends undefined ? never : T;
|
|
1
|
+
import { Id, ValueObject } from "../core/index.js";
|
|
2
|
+
|
|
3
|
+
type JsonPrimitive = string | number | boolean | null;
|
|
4
|
+
|
|
5
|
+
export type DeepJsonResult<T> = T extends Id
|
|
6
|
+
? string
|
|
7
|
+
: T extends ValueObject<infer U>
|
|
8
|
+
? U
|
|
9
|
+
: T extends Date
|
|
10
|
+
? string
|
|
11
|
+
: T extends Array<infer U>
|
|
12
|
+
? DeepJsonResult<U>[]
|
|
13
|
+
: T extends { toJSON(): infer R }
|
|
14
|
+
? DeepJsonResult<R>
|
|
15
|
+
: T extends object
|
|
16
|
+
? { [K in keyof T]: DeepJsonResult<T[K]> }
|
|
17
|
+
: T extends JsonPrimitive
|
|
18
|
+
? T
|
|
19
|
+
: never;
|
|
20
|
+
|
|
21
|
+
export type Primitive = string | number | boolean | Date | null | undefined;
|
|
22
|
+
export type UnwrapArray<T> = T extends Array<infer U> ? U : never;
|
|
23
|
+
export type IsArray<T> = T extends Array<any> ? true : false;
|
|
24
|
+
export type NonUndefined<T> = T extends undefined ? never : T;
|
package/src/utils/helpers.ts
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
export function parseQueryValue(value: unknown): any {
|
|
2
|
-
if (value === null || value === undefined) return value;
|
|
3
|
-
if (typeof value === "boolean") return value;
|
|
4
|
-
if (typeof value === "number") return value;
|
|
5
|
-
if (value instanceof Date) return value;
|
|
6
|
-
if (Array.isArray(value)) return value;
|
|
7
|
-
if (typeof value === "object") return value;
|
|
8
|
-
|
|
9
|
-
const str = String(value);
|
|
10
|
-
if (str === "true" || str === "false") return str === "true";
|
|
11
|
-
if (str.trim() !== "" && !isNaN(Number(str))) return Number(str);
|
|
12
|
-
if (!isNaN(Date.parse(str))) return new Date(str);
|
|
13
|
-
|
|
14
|
-
return str;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function levenshteinDistance(a: string, b: string): number {
|
|
18
|
-
const matrix: number[][] = [];
|
|
19
|
-
|
|
20
|
-
for (let i = 0; i <= b.length; i++) {
|
|
21
|
-
matrix[i] = [i];
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
for (let j = 0; j <= a.length; j++) {
|
|
25
|
-
matrix[0][j] = j;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
for (let i = 1; i <= b.length; i++) {
|
|
29
|
-
for (let j = 1; j <= a.length; j++) {
|
|
30
|
-
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
31
|
-
matrix[i][j] = matrix[i - 1][j - 1];
|
|
32
|
-
} else {
|
|
33
|
-
matrix[i][j] = Math.min(
|
|
34
|
-
matrix[i - 1][j - 1] + 1, // substitution
|
|
35
|
-
matrix[i][j - 1] + 1, // insertion
|
|
36
|
-
matrix[i - 1][j] + 1 // deletion
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return matrix[b.length][a.length];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function getStaticProperty<T>(
|
|
46
|
-
instance: any,
|
|
47
|
-
propertyName: string
|
|
48
|
-
): T | undefined {
|
|
49
|
-
return instance.constructor[propertyName];
|
|
50
|
-
}
|
|
1
|
+
export function parseQueryValue(value: unknown): any {
|
|
2
|
+
if (value === null || value === undefined) return value;
|
|
3
|
+
if (typeof value === "boolean") return value;
|
|
4
|
+
if (typeof value === "number") return value;
|
|
5
|
+
if (value instanceof Date) return value;
|
|
6
|
+
if (Array.isArray(value)) return value;
|
|
7
|
+
if (typeof value === "object") return value;
|
|
8
|
+
|
|
9
|
+
const str = String(value);
|
|
10
|
+
if (str === "true" || str === "false") return str === "true";
|
|
11
|
+
if (str.trim() !== "" && !isNaN(Number(str))) return Number(str);
|
|
12
|
+
if (!isNaN(Date.parse(str))) return new Date(str);
|
|
13
|
+
|
|
14
|
+
return str;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function levenshteinDistance(a: string, b: string): number {
|
|
18
|
+
const matrix: number[][] = [];
|
|
19
|
+
|
|
20
|
+
for (let i = 0; i <= b.length; i++) {
|
|
21
|
+
matrix[i] = [i];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
for (let j = 0; j <= a.length; j++) {
|
|
25
|
+
matrix[0][j] = j;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
for (let i = 1; i <= b.length; i++) {
|
|
29
|
+
for (let j = 1; j <= a.length; j++) {
|
|
30
|
+
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
31
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
32
|
+
} else {
|
|
33
|
+
matrix[i][j] = Math.min(
|
|
34
|
+
matrix[i - 1][j - 1] + 1, // substitution
|
|
35
|
+
matrix[i][j - 1] + 1, // insertion
|
|
36
|
+
matrix[i - 1][j] + 1 // deletion
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return matrix[b.length][a.length];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function getStaticProperty<T>(
|
|
46
|
+
instance: any,
|
|
47
|
+
propertyName: string
|
|
48
|
+
): T | undefined {
|
|
49
|
+
return instance.constructor[propertyName];
|
|
50
|
+
}
|