@woltz/rich-domain 0.2.2 → 1.1.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 +23 -75
- package/LICENSE +20 -20
- package/README.md +37 -20
- package/dist/base-entity.d.ts +2 -2
- package/dist/base-entity.d.ts.map +1 -1
- package/dist/base-entity.js +6 -4
- package/dist/base-entity.js.map +1 -1
- package/dist/criteria.d.ts +5 -11
- package/dist/criteria.d.ts.map +1 -1
- package/dist/criteria.js +4 -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 +116 -29
- package/dist/deep-proxy.js.map +1 -1
- package/dist/domain-event-bus.d.ts +5 -6
- package/dist/domain-event-bus.d.ts.map +1 -1
- package/dist/domain-event-bus.js +3 -11
- package/dist/domain-event-bus.js.map +1 -1
- package/dist/domain-event.d.ts +1 -31
- package/dist/domain-event.d.ts.map +1 -1
- package/dist/domain-event.js +2 -1
- package/dist/domain-event.js.map +1 -1
- package/dist/entity.d.ts +2 -2
- package/dist/entity.js +1 -1
- package/dist/exceptions.d.ts +251 -0
- package/dist/exceptions.d.ts.map +1 -0
- package/dist/exceptions.js +321 -0
- package/dist/exceptions.js.map +1 -0
- package/dist/id.d.ts +3 -3
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +15 -4
- package/dist/id.js.map +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -8
- package/dist/index.js.map +1 -1
- package/dist/paginated-result.d.ts.map +1 -1
- package/dist/paginated-result.js +12 -1
- package/dist/paginated-result.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 +2 -39
- package/dist/repository/index.js.map +1 -1
- package/dist/repository/unit-of-work.d.ts +0 -11
- package/dist/repository/unit-of-work.d.ts.map +1 -1
- package/dist/repository/unit-of-work.js +0 -35
- package/dist/repository/unit-of-work.js.map +1 -1
- package/dist/types/criteria.d.ts +6 -2
- package/dist/types/criteria.d.ts.map +1 -1
- package/dist/types/criteria.js +1 -1
- package/dist/types/criteria.js.map +1 -1
- package/dist/types/domain-event.d.ts +32 -0
- package/dist/types/domain-event.d.ts.map +1 -0
- package/dist/types/domain-event.js +2 -0
- package/dist/types/domain-event.js.map +1 -0
- package/dist/types/domain.d.ts +2 -2
- package/dist/types/domain.d.ts.map +1 -1
- package/dist/types/history-tracker.d.ts +1 -1
- package/dist/types/history-tracker.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/value-object.d.ts +1 -1
- package/dist/value-object.d.ts.map +1 -1
- package/dist/value-object.js +2 -5
- package/dist/value-object.js.map +1 -1
- package/eslint.config.js +3 -3
- package/jest.config.js +1 -1
- package/package.json +14 -20
- package/src/base-entity.ts +6 -5
- package/src/criteria.ts +11 -11
- package/src/deep-proxy.ts +447 -339
- package/src/domain-event-bus.ts +152 -166
- package/src/domain-event.ts +53 -90
- package/src/entity.ts +16 -16
- package/src/exceptions.ts +435 -0
- package/src/id.ts +107 -94
- package/src/index.ts +26 -9
- package/src/paginated-result.ts +14 -1
- package/src/repository/index.ts +2 -44
- package/src/repository/unit-of-work.ts +1 -44
- package/src/types/criteria.ts +7 -2
- package/src/types/domain-event.ts +38 -0
- package/src/types/domain.ts +2 -3
- package/src/types/history-tracker.ts +1 -1
- package/src/types/index.ts +1 -0
- package/src/validation-error.ts +97 -97
- package/src/value-object.ts +3 -6
- package/tests/criteria.test.ts +8 -0
- package/tests/domain-events.test.ts +431 -445
- package/tests/entity-validation.test.ts +2 -2
- package/tests/entity.test.ts +33 -33
- package/tests/history-tracker.spec.ts +57 -17
- package/tests/id.test.ts +341 -341
- package/tests/repository.test.ts +8 -4
- package/tests/to-json.test.ts +103 -91
- package/tests/utils.ts +254 -151
- package/tests/value-object-validation.test.ts +0 -9
- package/tests/value-objects.test.ts +52 -52
- package/tsconfig.json +2 -24
- package/.github/workflows/ci.yml +0 -40
- package/.husky/commit-msg +0 -1
- package/.husky/pre-commit +0 -1
- package/.vscode/settings.json +0 -3
- package/commitlint.config.js +0 -23
- 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/in-memory-repository.d.ts +0 -50
- package/dist/repository/in-memory-repository.d.ts.map +0 -1
- package/dist/repository/in-memory-repository.js +0 -93
- package/dist/repository/in-memory-repository.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/in-memory-repository.ts +0 -116
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"specification.js","sourceRoot":"","sources":["../src/specification.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { Criteria } from "../criteria";
|
|
2
|
-
import { Aggregate } from "../entity";
|
|
3
|
-
import { Id } from "../id";
|
|
4
|
-
import { PaginatedResult } from "../paginated-result";
|
|
5
|
-
export interface IRepository<TDomain extends Aggregate<any>> {
|
|
6
|
-
/**
|
|
7
|
-
* Find by ID
|
|
8
|
-
*/
|
|
9
|
-
findById(id: Id): Promise<TDomain | null>;
|
|
10
|
-
/**
|
|
11
|
-
* Find using criteria (filtering, ordering, pagination)
|
|
12
|
-
*/
|
|
13
|
-
find(criteria: Criteria<TDomain>): Promise<PaginatedResult<TDomain>>;
|
|
14
|
-
/**
|
|
15
|
-
* Find all (with optional criteria)
|
|
16
|
-
*/
|
|
17
|
-
findAll(criteria?: Criteria<TDomain>): Promise<TDomain[]>;
|
|
18
|
-
/**
|
|
19
|
-
* Find one (first matching criteria)
|
|
20
|
-
*/
|
|
21
|
-
findOne(criteria: Criteria<TDomain>): Promise<TDomain | null>;
|
|
22
|
-
/**
|
|
23
|
-
* Save (insert or update based on aggregate.isNew)
|
|
24
|
-
*/
|
|
25
|
-
save(aggregate: TDomain): Promise<void>;
|
|
26
|
-
/**
|
|
27
|
-
* Delete aggregate
|
|
28
|
-
*/
|
|
29
|
-
delete(aggregate: TDomain): Promise<void>;
|
|
30
|
-
/**
|
|
31
|
-
* Delete by ID
|
|
32
|
-
*/
|
|
33
|
-
deleteById(id: Id): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Check if exists
|
|
36
|
-
*/
|
|
37
|
-
exists(id: Id): Promise<boolean>;
|
|
38
|
-
/**
|
|
39
|
-
* Count matching criteria
|
|
40
|
-
*/
|
|
41
|
-
count(criteria?: Criteria<TDomain>): Promise<number>;
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/types/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,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,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"}
|
package/dist/types/repository.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/types/repository.ts"],"names":[],"mappings":""}
|
package/dist/types.d.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { Id } from "./id";
|
|
2
|
-
export type EntityId = string | number;
|
|
3
|
-
export interface BaseProps {
|
|
4
|
-
id: Id;
|
|
5
|
-
}
|
|
6
|
-
export interface ChangeEvent<T> {
|
|
7
|
-
previous: T | undefined;
|
|
8
|
-
current: T;
|
|
9
|
-
path: string;
|
|
10
|
-
}
|
|
11
|
-
export interface ArrayChangeEvent<T> {
|
|
12
|
-
toCreate: T[];
|
|
13
|
-
toUpdate: T[];
|
|
14
|
-
toDelete: T[];
|
|
15
|
-
path: string;
|
|
16
|
-
}
|
|
17
|
-
export type PropertySubscriber<T> = (event: ChangeEvent<T>) => void;
|
|
18
|
-
export type ArraySubscriber<T> = (event: ArrayChangeEvent<T>) => void;
|
|
19
|
-
export interface PropertySubscription<T> {
|
|
20
|
-
onChange: PropertySubscriber<T>;
|
|
21
|
-
}
|
|
22
|
-
export interface ArraySubscription<T> {
|
|
23
|
-
onChange: ArraySubscriber<T>;
|
|
24
|
-
}
|
|
25
|
-
type UnwrapArray<T> = T extends Array<infer U> ? U : never;
|
|
26
|
-
type IsArray<T> = T extends Array<any> ? true : false;
|
|
27
|
-
type NonUndefined<T> = T extends undefined ? never : T;
|
|
28
|
-
export type SubscriptionConfig<T extends BaseProps> = {
|
|
29
|
-
[K in keyof T]?: IsArray<NonUndefined<T[K]>> extends true ? ArraySubscription<UnwrapArray<NonUndefined<T[K]>>> : PropertySubscription<NonUndefined<T[K]>>;
|
|
30
|
-
};
|
|
31
|
-
export interface ValidationConfig {
|
|
32
|
-
onCreate?: boolean;
|
|
33
|
-
onUpdate?: boolean;
|
|
34
|
-
throwOnError?: boolean;
|
|
35
|
-
}
|
|
36
|
-
export declare const DEFAULT_VALIDATION_CONFIG: Required<ValidationConfig>;
|
|
37
|
-
export interface StandardSchemaIssue {
|
|
38
|
-
message: string;
|
|
39
|
-
path?: ReadonlyArray<unknown>;
|
|
40
|
-
}
|
|
41
|
-
export interface StandardSchemaResult<T> {
|
|
42
|
-
value?: T;
|
|
43
|
-
issues?: ReadonlyArray<StandardSchemaIssue>;
|
|
44
|
-
}
|
|
45
|
-
export interface StandardSchemaProps<T> {
|
|
46
|
-
validate: (value: unknown) => StandardSchemaResult<T> | Promise<StandardSchemaResult<T>>;
|
|
47
|
-
}
|
|
48
|
-
export interface StandardSchema<T = unknown> {
|
|
49
|
-
"~standard": StandardSchemaProps<T>;
|
|
50
|
-
}
|
|
51
|
-
interface DomainValidation<T> {
|
|
52
|
-
schema: StandardSchema<T>;
|
|
53
|
-
config?: ValidationConfig;
|
|
54
|
-
}
|
|
55
|
-
export type EntityValidation<T> = DomainValidation<T>;
|
|
56
|
-
export type VOValidation<T> = DomainValidation<T>;
|
|
57
|
-
export interface VOHooks<T, E> {
|
|
58
|
-
onBeforeUpdate?: (entity: E, snapshot: T) => boolean;
|
|
59
|
-
onCreate?: (entity: E) => void;
|
|
60
|
-
rules?: (entity: E) => void;
|
|
61
|
-
defaultValues?: Partial<T>;
|
|
62
|
-
}
|
|
63
|
-
export interface EntityHooks<T extends BaseProps, E> {
|
|
64
|
-
onBeforeUpdate?: (entity: E, snapshot: T) => boolean;
|
|
65
|
-
onCreate?: (entity: E) => void;
|
|
66
|
-
rules?: (entity: E) => void;
|
|
67
|
-
defaultValues?: Partial<Omit<T, "id">>;
|
|
68
|
-
}
|
|
69
|
-
export interface HistoryEntry {
|
|
70
|
-
path: string;
|
|
71
|
-
previousValue: any;
|
|
72
|
-
currentValue: any;
|
|
73
|
-
timestamp: number;
|
|
74
|
-
}
|
|
75
|
-
export type DeepJsonResult<T> = {
|
|
76
|
-
[K in keyof T]: T[K] extends Id ? string : T[K] extends {
|
|
77
|
-
toJson(): infer U;
|
|
78
|
-
} ? U : T[K] extends Array<infer U> ? U extends {
|
|
79
|
-
toJson(): infer V;
|
|
80
|
-
} ? V[] : U extends Id ? string[] : U[] : T[K];
|
|
81
|
-
};
|
|
82
|
-
export interface EntityConstructor<T extends BaseProps, E> {
|
|
83
|
-
new (props: T): E;
|
|
84
|
-
validation?: DomainValidation<T>;
|
|
85
|
-
hooks?: EntityHooks<T, E>;
|
|
86
|
-
}
|
|
87
|
-
export {};
|
|
88
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// ============================================================================
|
|
3
|
-
// Types & Interfaces for Validation
|
|
4
|
-
// ============================================================================
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DEFAULT_VALIDATION_CONFIG = void 0;
|
|
7
|
-
exports.DEFAULT_VALIDATION_CONFIG = {
|
|
8
|
-
onCreate: true,
|
|
9
|
-
onUpdate: true,
|
|
10
|
-
throwOnError: true,
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;;;AAkElE,QAAA,yBAAyB,GAA+B;IACnE,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;CACnB,CAAC"}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// In-Memory Repository - Perfect for testing
|
|
3
|
-
// ============================================================================
|
|
4
|
-
|
|
5
|
-
import type { Aggregate } from "../entity";
|
|
6
|
-
import type { Criteria } from "../criteria";
|
|
7
|
-
import { PaginatedResult } from "../paginated-result";
|
|
8
|
-
import { Repository } from "./base-repository";
|
|
9
|
-
import { Mapper } from "../mapper";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* In-memory repository implementation
|
|
13
|
-
* Perfect for unit tests and prototyping
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```ts
|
|
17
|
-
* const userRepo = new InMemoryRepository<User>();
|
|
18
|
-
*
|
|
19
|
-
* await userRepo.save(user);
|
|
20
|
-
* const found = await userRepo.findById(user.id);
|
|
21
|
-
* const active = await userRepo.find(
|
|
22
|
-
* Criteria.create<User>().whereEquals('status', 'active')
|
|
23
|
-
* );
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export class InMemoryRepository<
|
|
27
|
-
TDomain extends Aggregate<any>
|
|
28
|
-
> extends Repository<TDomain> {
|
|
29
|
-
protected items: Map<string, TDomain> = new Map();
|
|
30
|
-
|
|
31
|
-
constructor(
|
|
32
|
-
protected readonly mapperToDomain: Mapper<unknown, TDomain>,
|
|
33
|
-
protected readonly mapperToPersistence: Mapper<TDomain, unknown>
|
|
34
|
-
) {
|
|
35
|
-
super();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
get model(): any {
|
|
39
|
-
// your database table name
|
|
40
|
-
return "inMemory";
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async findById(id: string): Promise<TDomain | null> {
|
|
44
|
-
return this.items.get(id) || null;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async find(criteria: Criteria<TDomain>): Promise<PaginatedResult<TDomain>> {
|
|
48
|
-
const allItems = Array.from(this.items.values());
|
|
49
|
-
return PaginatedResult.fromArray(allItems, criteria);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async findAll(criteria?: Criteria<TDomain>): Promise<TDomain[]> {
|
|
53
|
-
if (criteria) {
|
|
54
|
-
const result = await this.find(criteria);
|
|
55
|
-
return result.data;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return Array.from(this.items.values());
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async findOne(criteria: Criteria<TDomain>): Promise<TDomain | null> {
|
|
62
|
-
const result = await this.find(criteria.clone().limit(1));
|
|
63
|
-
return result.data.length > 0 ? result.data[0] : null;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async create(aggregate: TDomain): Promise<void> {
|
|
67
|
-
this.items.set(aggregate.id.value, aggregate);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
async update(entity: TDomain): Promise<void> {
|
|
71
|
-
this.items.set(entity.id.value, entity);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
async createMany(aggregates: TDomain[]): Promise<void> {
|
|
75
|
-
for (const aggregate of aggregates) {
|
|
76
|
-
await this.create(aggregate);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
async delete(aggregate: TDomain): Promise<void> {
|
|
81
|
-
this.items.delete(aggregate.id.value);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async exists(id: string): Promise<boolean> {
|
|
85
|
-
return this.items.has(id);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async count(criteria?: Criteria<TDomain>): Promise<number> {
|
|
89
|
-
if (criteria) {
|
|
90
|
-
const result = await this.find(criteria);
|
|
91
|
-
return result.meta.total;
|
|
92
|
-
}
|
|
93
|
-
return this.items.size;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Clear all items (useful for test cleanup)
|
|
98
|
-
*/
|
|
99
|
-
clear(): void {
|
|
100
|
-
this.items.clear();
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Get all items as array (useful for debugging)
|
|
105
|
-
*/
|
|
106
|
-
getAll(): TDomain[] {
|
|
107
|
-
return Array.from(this.items.values());
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Get items count
|
|
112
|
-
*/
|
|
113
|
-
size(): number {
|
|
114
|
-
return this.items.size;
|
|
115
|
-
}
|
|
116
|
-
}
|