@cqrs-ddd/core 0.4.2 → 0.5.1
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/COMMERCIAL_LICENSE.txt +14 -10
- package/README.md +3 -3
- package/dist/application/base.command.d.ts +3 -0
- package/dist/application/base.command.d.ts.map +1 -1
- package/dist/application/base.command.js +5 -0
- package/dist/application/base.command.js.map +1 -1
- package/dist/application/base.query.d.ts +3 -0
- package/dist/application/base.query.d.ts.map +1 -1
- package/dist/application/base.query.js +5 -0
- package/dist/application/base.query.js.map +1 -1
- package/dist/application/command-base.handler.d.ts +6 -10
- package/dist/application/command-base.handler.d.ts.map +1 -1
- package/dist/application/command-base.handler.js +16 -18
- package/dist/application/command-base.handler.js.map +1 -1
- package/dist/application/ports/command-repository.port.d.ts +1 -4
- package/dist/application/ports/command-repository.port.d.ts.map +1 -1
- package/dist/application/ports/query-repository.port.d.ts +0 -1
- package/dist/application/ports/query-repository.port.d.ts.map +1 -1
- package/dist/domain/decorators/apply-mutation.decorator.d.ts.map +1 -1
- package/dist/domain/decorators/apply-mutation.decorator.js +2 -1
- package/dist/domain/decorators/apply-mutation.decorator.js.map +1 -1
- package/dist/domain/events/domain.event.d.ts +3 -0
- package/dist/domain/events/domain.event.d.ts.map +1 -1
- package/dist/domain/events/domain.event.js +5 -0
- package/dist/domain/events/domain.event.js.map +1 -1
- package/dist/domain/events/root-domain.event.d.ts.map +1 -1
- package/dist/domain/events/root-domain.event.js +35 -23
- package/dist/domain/events/root-domain.event.js.map +1 -1
- package/dist/domain/models/aggregate-root.d.ts +3 -3
- package/dist/domain/models/aggregate-root.d.ts.map +1 -1
- package/dist/domain/models/aggregate-root.js +3 -3
- package/dist/domain/models/aggregate-root.js.map +1 -1
- package/dist/domain/models/root.entity.d.ts.map +1 -1
- package/dist/domain/models/root.entity.js.map +1 -1
- package/dist/domain/request-kind.d.ts +7 -0
- package/dist/domain/request-kind.d.ts.map +1 -0
- package/dist/domain/request-kind.js +8 -0
- package/dist/domain/request-kind.js.map +1 -0
- package/dist/persistence/cache/cache-logger.d.ts +2 -2
- package/dist/persistence/cache/memory.cache.d.ts +0 -1
- package/dist/persistence/cache/memory.cache.d.ts.map +1 -1
- package/dist/persistence/cache/memory.cache.js +3 -4
- package/dist/persistence/cache/memory.cache.js.map +1 -1
- package/dist/persistence/command-repository.abstract.d.ts +2 -3
- package/dist/persistence/command-repository.abstract.d.ts.map +1 -1
- package/dist/persistence/command-repository.abstract.js +2 -3
- package/dist/persistence/command-repository.abstract.js.map +1 -1
- package/dist/persistence/decorators/acknowledge-persisted.decorator.d.ts +0 -2
- package/dist/persistence/decorators/acknowledge-persisted.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/acknowledge-persisted.decorator.js +0 -2
- package/dist/persistence/decorators/acknowledge-persisted.decorator.js.map +1 -1
- package/dist/persistence/decorators/cache.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/cache.decorator.js +149 -107
- package/dist/persistence/decorators/cache.decorator.js.map +1 -1
- package/dist/persistence/decorators/from-cache.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/from-cache.decorator.js +131 -86
- package/dist/persistence/decorators/from-cache.decorator.js.map +1 -1
- package/dist/persistence/decorators/map-persistence-errors.decorator.d.ts +0 -1
- package/dist/persistence/decorators/map-persistence-errors.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/map-persistence-errors.decorator.js +2 -2
- package/dist/persistence/decorators/map-persistence-errors.decorator.js.map +1 -1
- package/dist/persistence/helpers/cache-barrier.helper.d.ts.map +1 -1
- package/dist/persistence/helpers/cache-barrier.helper.js +7 -5
- package/dist/persistence/helpers/cache-barrier.helper.js.map +1 -1
- package/dist/persistence/helpers/cache-key.helper.d.ts.map +1 -1
- package/dist/persistence/helpers/cache-key.helper.js +2 -1
- package/dist/persistence/helpers/cache-key.helper.js.map +1 -1
- package/dist/persistence/helpers/cache-version.helper.d.ts.map +1 -1
- package/dist/persistence/helpers/cache-version.helper.js +3 -5
- package/dist/persistence/helpers/cache-version.helper.js.map +1 -1
- package/dist/persistence/query-repository.abstract.d.ts +4 -6
- package/dist/persistence/query-repository.abstract.d.ts.map +1 -1
- package/dist/persistence/query-repository.abstract.js +4 -6
- package/dist/persistence/query-repository.abstract.js.map +1 -1
- package/package.json +9 -9
|
@@ -8,6 +8,12 @@ import { isCacheNewer } from '../helpers/cache-version.helper.js';
|
|
|
8
8
|
export { isCacheNewer };
|
|
9
9
|
const defaultLogger = consoleCacheLogger('FromCacheDecorator');
|
|
10
10
|
const warnedUnversionedAdapters = new WeakSet();
|
|
11
|
+
const reportedUncacheable = new WeakSet();
|
|
12
|
+
/**
|
|
13
|
+
* Fills retried after a concurrent mutation rejects one, before the loaded
|
|
14
|
+
* result is returned uncached.
|
|
15
|
+
*/
|
|
16
|
+
const MAX_FILL_RETRIES = 2;
|
|
11
17
|
/**
|
|
12
18
|
* Reports an unversioned adapter once per instance: a silent loss of caching is
|
|
13
19
|
* harder to diagnose than the race the bypass avoids.
|
|
@@ -30,10 +36,8 @@ function isPlainData(value, ancestors = new WeakSet()) {
|
|
|
30
36
|
return typeof value !== 'function' && typeof value !== 'bigint';
|
|
31
37
|
}
|
|
32
38
|
const prototype = Object.getPrototypeOf(value);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
prototype !== Object.prototype &&
|
|
36
|
-
prototype !== null)) {
|
|
39
|
+
const isPlainObject = prototype === Object.prototype || prototype === null;
|
|
40
|
+
if (ancestors.has(value) || (!Array.isArray(value) && !isPlainObject)) {
|
|
37
41
|
return false;
|
|
38
42
|
}
|
|
39
43
|
ancestors.add(value);
|
|
@@ -72,90 +76,131 @@ export function FromCache(keyFnOrOptions, hydrateFnOrOptions, extraOptions) {
|
|
|
72
76
|
if (resolvedOptions?.alwaysHydrate && !resolvedHydrateFn) {
|
|
73
77
|
throw new TypeError('FromCache: alwaysHydrate requires a hydrateFn');
|
|
74
78
|
}
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
const settings = {
|
|
80
|
+
options: resolvedOptions,
|
|
81
|
+
keyFn: resolvedKeyFn,
|
|
82
|
+
hydrateFn: resolvedHydrateFn,
|
|
83
|
+
declaresHydrateFn,
|
|
84
|
+
declaresSerializeFn,
|
|
85
|
+
logger: resolvedOptions?.logger ?? defaultLogger,
|
|
86
|
+
};
|
|
78
87
|
return (_target, _propertyKey, descriptor) => {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const repositoryHydration = this.hydration;
|
|
96
|
-
const hydrateFn = declaresHydrateFn
|
|
97
|
-
? resolvedHydrateFn
|
|
98
|
-
: repositoryHydration?.hydrateFn;
|
|
99
|
-
const serializeFn = declaresSerializeFn
|
|
100
|
-
? resolvedOptions?.serializeFn
|
|
101
|
-
: repositoryHydration?.serializeFn;
|
|
102
|
-
const hydrateCached = (cachedValue) => hydrateFn ? hydrateFn(cachedValue) : cachedValue;
|
|
103
|
-
// A revision-fenced key can still hold a barrier written by an
|
|
104
|
-
// unversioned writer against the same store; it is a sentinel, never a
|
|
105
|
-
// snapshot, so it counts as a miss rather than something to hydrate. The
|
|
106
|
-
// same holds for `null`: this decorator never fills one, so a stored null
|
|
107
|
-
// is a leftover from another writer, not a cached absence.
|
|
108
|
-
const isUsableSnapshot = (state) => state.status === 'hit' &&
|
|
109
|
-
state.value !== undefined &&
|
|
110
|
-
state.value !== null &&
|
|
111
|
-
!isCacheMutationBarrier(state.value);
|
|
112
|
-
// 1. Versioned coordination path (capable adapters)
|
|
113
|
-
if (isVersionedCache(this.cache)) {
|
|
114
|
-
let observedState = await this.cache.readState(key);
|
|
115
|
-
if (isUsableSnapshot(observedState)) {
|
|
116
|
-
return hydrateCached(observedState.value);
|
|
117
|
-
}
|
|
118
|
-
for (let attempt = 0;; attempt++) {
|
|
119
|
-
const result = await original.call(this, query);
|
|
120
|
-
if (result === null || result === undefined) {
|
|
121
|
-
const postState = await this.cache.readState(key);
|
|
122
|
-
if (isUsableSnapshot(postState)) {
|
|
123
|
-
return hydrateCached(postState.value);
|
|
124
|
-
}
|
|
125
|
-
return result;
|
|
126
|
-
}
|
|
127
|
-
// A hit without a hydrator returns the cached data as is, so only a
|
|
128
|
-
// result that already is that data may be cached.
|
|
129
|
-
if (!hydrateFn && (serializeFn || !isPlainData(result))) {
|
|
130
|
-
if (!reportedUncacheable) {
|
|
131
|
-
reportedUncacheable = true;
|
|
132
|
-
safeWarn(logger, `${this.constructor.name} caches a result that a hit could not reproduce without a hydrateFn; ` +
|
|
133
|
-
'the result is returned uncached. Configure a hydrateFn or return plain data.');
|
|
134
|
-
}
|
|
135
|
-
return result;
|
|
136
|
-
}
|
|
137
|
-
const snapshot = toCacheSnapshot(result, serializeFn);
|
|
138
|
-
const committed = await this.cache.tryFill(key, observedState.revision, snapshot, { ttl: resolvedOptions?.ttl });
|
|
139
|
-
if (committed) {
|
|
140
|
-
return result;
|
|
141
|
-
}
|
|
142
|
-
const currentState = await this.cache.readState(key);
|
|
143
|
-
if (isUsableSnapshot(currentState)) {
|
|
144
|
-
const newerCheck = resolvedOptions?.isNewer ?? isCacheNewer;
|
|
145
|
-
if (newerCheck(currentState.value, snapshot)) {
|
|
146
|
-
return hydrateCached(currentState.value);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
if (attempt === MAX_FILL_RETRIES)
|
|
150
|
-
return result;
|
|
151
|
-
observedState = currentState;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
// 2. Unversioned adapter: with no revision to fence a fill against a
|
|
155
|
-
// concurrent invalidation, the cache is bypassed for both reads and fills.
|
|
156
|
-
warnUnversionedAdapterOnce(this.cache, logger);
|
|
88
|
+
descriptor.value = wrapFind(descriptor.value, settings);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function wrapFind(original, settings) {
|
|
92
|
+
return async function (query) {
|
|
93
|
+
if (!this.cache) {
|
|
94
|
+
reportMissingCacheProperty(this, '@FromCache', settings.options?.logger);
|
|
95
|
+
return original.call(this, query);
|
|
96
|
+
}
|
|
97
|
+
if (query.refresh)
|
|
98
|
+
return original.call(this, query);
|
|
99
|
+
const { keyFn } = settings;
|
|
100
|
+
if (!keyFn)
|
|
101
|
+
throw new TypeError('FromCache requires a keyFn');
|
|
102
|
+
const key = keyFn(query);
|
|
103
|
+
if (key === null) {
|
|
157
104
|
return original.call(this, query);
|
|
158
|
-
}
|
|
105
|
+
}
|
|
106
|
+
const hydration = methodHydration(settings, this.hydration);
|
|
107
|
+
const load = () => original.call(this, query);
|
|
108
|
+
// 1. Versioned coordination path (capable adapters)
|
|
109
|
+
if (isVersionedCache(this.cache)) {
|
|
110
|
+
return readThrough({ cache: this.cache, key, repository: this, load, ...hydration }, settings);
|
|
111
|
+
}
|
|
112
|
+
// 2. Unversioned adapter: with no revision to fence a fill against a
|
|
113
|
+
// concurrent invalidation, the cache is bypassed for both reads and fills.
|
|
114
|
+
warnUnversionedAdapterOnce(this.cache, settings.logger);
|
|
115
|
+
return original.call(this, query);
|
|
159
116
|
};
|
|
160
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Method-level options win; otherwise the repository policy applies, and a
|
|
120
|
+
* repository hydrator rehydrates every hit.
|
|
121
|
+
*/
|
|
122
|
+
function methodHydration(settings, repository) {
|
|
123
|
+
return {
|
|
124
|
+
hydrateFn: settings.declaresHydrateFn
|
|
125
|
+
? settings.hydrateFn
|
|
126
|
+
: repository?.hydrateFn,
|
|
127
|
+
serializeFn: settings.declaresSerializeFn
|
|
128
|
+
? settings.options?.serializeFn
|
|
129
|
+
: repository?.serializeFn,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Serves a usable hit, or loads and fills the key through `tryFill` against the
|
|
134
|
+
* revision observed before the load. A rejected fill re-reads the key: a newer
|
|
135
|
+
* usable snapshot wins, and otherwise the load is retried up to
|
|
136
|
+
* {@link MAX_FILL_RETRIES} times before its result is returned uncached.
|
|
137
|
+
*/
|
|
138
|
+
async function readThrough(read, settings) {
|
|
139
|
+
const { cache, key, load, hydrateFn, serializeFn } = read;
|
|
140
|
+
let observedState = await cache.readState(key);
|
|
141
|
+
if (isUsableSnapshot(observedState)) {
|
|
142
|
+
return hydrate(read, observedState.value);
|
|
143
|
+
}
|
|
144
|
+
for (let attempt = 0;; attempt++) {
|
|
145
|
+
const result = await load();
|
|
146
|
+
if (result === null || result === undefined) {
|
|
147
|
+
const postState = await cache.readState(key);
|
|
148
|
+
return isUsableSnapshot(postState)
|
|
149
|
+
? hydrate(read, postState.value)
|
|
150
|
+
: result;
|
|
151
|
+
}
|
|
152
|
+
// A hit without a hydrator returns the cached data as is, so only a
|
|
153
|
+
// result that already is that data may be cached.
|
|
154
|
+
if (!hydrateFn && (serializeFn || !isPlainData(result))) {
|
|
155
|
+
reportUncacheableOnce(settings, read.repository);
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
const snapshot = toCacheSnapshot(result, serializeFn);
|
|
159
|
+
const committed = await cache.tryFill(key, observedState.revision, snapshot, { ttl: settings.options?.ttl });
|
|
160
|
+
if (committed)
|
|
161
|
+
return result;
|
|
162
|
+
const currentState = await cache.readState(key);
|
|
163
|
+
if (isNewerSnapshot(currentState, snapshot, settings.options)) {
|
|
164
|
+
return hydrate(read, currentState.value);
|
|
165
|
+
}
|
|
166
|
+
if (attempt === MAX_FILL_RETRIES)
|
|
167
|
+
return result;
|
|
168
|
+
observedState = currentState;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function hydrate(hydration, cached) {
|
|
172
|
+
const { hydrateFn } = hydration;
|
|
173
|
+
return hydrateFn ? hydrateFn(cached) : cached;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* A revision-fenced key can still hold a barrier written by an unversioned
|
|
177
|
+
* writer against the same store; it is a sentinel, never a snapshot, so it
|
|
178
|
+
* counts as a miss rather than something to hydrate. The same holds for
|
|
179
|
+
* `null`: this decorator never fills one, so a stored null is a leftover from
|
|
180
|
+
* another writer, not a cached absence.
|
|
181
|
+
*/
|
|
182
|
+
function isUsableSnapshot(state) {
|
|
183
|
+
return (state.status === 'hit' &&
|
|
184
|
+
state.value !== undefined &&
|
|
185
|
+
state.value !== null &&
|
|
186
|
+
!isCacheMutationBarrier(state.value));
|
|
187
|
+
}
|
|
188
|
+
/** Whether the state a rejected fill re-read holds a newer usable snapshot. */
|
|
189
|
+
function isNewerSnapshot(state, snapshot, options) {
|
|
190
|
+
if (!isUsableSnapshot(state))
|
|
191
|
+
return false;
|
|
192
|
+
const newerCheck = options?.isNewer ?? isCacheNewer;
|
|
193
|
+
return newerCheck(state.value, snapshot);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Reports, once per decorator, a result a hit could not reproduce without a
|
|
197
|
+
* hydrator, so it is returned uncached.
|
|
198
|
+
*/
|
|
199
|
+
function reportUncacheableOnce(settings, repository) {
|
|
200
|
+
if (reportedUncacheable.has(settings))
|
|
201
|
+
return;
|
|
202
|
+
reportedUncacheable.add(settings);
|
|
203
|
+
safeWarn(settings.logger, `${repository.constructor.name} caches a result that a hit could not reproduce without a hydrateFn; ` +
|
|
204
|
+
'the result is returned uncached. Configure a hydrateFn or return plain data.');
|
|
205
|
+
}
|
|
161
206
|
//# sourceMappingURL=from-cache.decorator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-cache.decorator.js","sourceRoot":"","sources":["../../../persistence/decorators/from-cache.decorator.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,
|
|
1
|
+
{"version":3,"file":"from-cache.decorator.js","sourceRoot":"","sources":["../../../persistence/decorators/from-cache.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,6 @@ export type UniqueErrors<TEntity, TConstraint extends string = never> = {
|
|
|
42
42
|
*
|
|
43
43
|
* @example Mapping unique constraints in a create repository
|
|
44
44
|
* ```typescript
|
|
45
|
-
* @Injectable()
|
|
46
45
|
* export class CreateUserCommandRepository extends CommandRepository<User, UserSnapshot> {
|
|
47
46
|
* @Cache<User, UserSnapshot>((u) => `users:${u.id}`, null, (u) => [`users:email:${u.email}`])
|
|
48
47
|
* @AcknowledgePersisted<[User]>({ entity: ([user]) => user })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-persistence-errors.decorator.d.ts","sourceRoot":"","sources":["../../../persistence/decorators/map-persistence-errors.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2BAA2B,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,EAAE,WAAW,SAAS,MAAM,GAAG,KAAK,IAAI;IACtE,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAC7D,MAAM,EAAE,OAAO,KACZ,KAAK;CACX,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"map-persistence-errors.decorator.d.ts","sourceRoot":"","sources":["../../../persistence/decorators/map-persistence-errors.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2BAA2B,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,EAAE,WAAW,SAAS,MAAM,GAAG,KAAK,IAAI;IACtE,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAC7D,MAAM,EAAE,OAAO,KACZ,KAAK;CACX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,OAAO,EAAE,EACvB,OAAO,EACP,WAAW,SAAS,MAAM,GAAG,KAAK,EAClC,KAAK,GAAG,OAAO,EACf,OAAO,EAAE;IACT,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC;IACjC,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CACvE,IACmB,OAAO,WACd,MAAM,QACT,MAAM,GAAG,MAAM,cACT,uBAAuB,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,KACxE,IAAI,CAiCR"}
|
|
@@ -34,7 +34,6 @@ import { persistenceDialect, } from '../persistence-dialect.js';
|
|
|
34
34
|
*
|
|
35
35
|
* @example Mapping unique constraints in a create repository
|
|
36
36
|
* ```typescript
|
|
37
|
-
* @Injectable()
|
|
38
37
|
* export class CreateUserCommandRepository extends CommandRepository<User, UserSnapshot> {
|
|
39
38
|
* @Cache<User, UserSnapshot>((u) => `users:${u.id}`, null, (u) => [`users:email:${u.email}`])
|
|
40
39
|
* @AcknowledgePersisted<[User]>({ entity: ([user]) => user })
|
|
@@ -52,7 +51,7 @@ import { persistenceDialect, } from '../persistence-dialect.js';
|
|
|
52
51
|
* ```
|
|
53
52
|
*/
|
|
54
53
|
export function MapPersistenceErrors(options) {
|
|
55
|
-
|
|
54
|
+
const decorate = (_target, _key, descriptor) => {
|
|
56
55
|
const original = descriptor.value;
|
|
57
56
|
if (typeof original !== 'function')
|
|
58
57
|
throw new TypeError('Persistence decorators require a method.');
|
|
@@ -82,5 +81,6 @@ export function MapPersistenceErrors(options) {
|
|
|
82
81
|
}
|
|
83
82
|
};
|
|
84
83
|
};
|
|
84
|
+
return decorate;
|
|
85
85
|
}
|
|
86
86
|
//# sourceMappingURL=map-persistence-errors.decorator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-persistence-errors.decorator.js","sourceRoot":"","sources":["../../../persistence/decorators/map-persistence-errors.decorator.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAEL,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAcnC
|
|
1
|
+
{"version":3,"file":"map-persistence-errors.decorator.js","sourceRoot":"","sources":["../../../persistence/decorators/map-persistence-errors.decorator.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAEL,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAcnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,UAAU,oBAAoB,CAKlC,OAyBD;IACC,MAAM,QAAQ,GAAG,CACf,OAAe,EACf,IAAqB,EACrB,UAAyE,EACnE,EAAE;QACR,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;QAClC,IAAI,OAAO,QAAQ,KAAK,UAAU;YAChC,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACjD,UAAU,CAAC,KAAK,GAAG,KAAK,WAAW,GAAG,IAAW;YAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACxD,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,IAAI,SAAS,CACjB,0GAA0G,CAC3G,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,GAAG,GAAG,SAAS;oBACnB,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,MAAgB,CAAC;oBACnD,CAAC,CAAC,SAAS,CAAC;gBACd,MAAM,OAAO,GACX,GAAG,KAAK,SAAS;oBACf,CAAC,CAAC,SAAS;oBACX,CAAC,CAAE,MAAqD,CAAC,GAAG,CAAC,CAAC;gBAElE,IAAI,OAAO;oBAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,OAAO,CAAC,SAAS;oBACnB,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC7D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-barrier.helper.d.ts","sourceRoot":"","sources":["../../../persistence/helpers/cache-barrier.helper.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,aAAa,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,SAAS,IAAI,SAAS,GAAG,oBAAoB,CAAC;AAE3E;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,CAAC,EAAE,OAAO,GACf,oBAAoB,
|
|
1
|
+
{"version":3,"file":"cache-barrier.helper.d.ts","sourceRoot":"","sources":["../../../persistence/helpers/cache-barrier.helper.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,aAAa,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,SAAS,IAAI,SAAS,GAAG,oBAAoB,CAAC;AAE3E;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,CAAC,EAAE,OAAO,GACf,oBAAoB,CAiBtB;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,oBAAoB,CAM/B"}
|
|
@@ -18,11 +18,7 @@ export function createCacheMutationBarrier(reason, entity) {
|
|
|
18
18
|
? entity
|
|
19
19
|
: undefined;
|
|
20
20
|
const aggregateId = typeof e?.id === 'string' ? e.id : undefined;
|
|
21
|
-
const version =
|
|
22
|
-
? e.version
|
|
23
|
-
: typeof e?._version === 'number'
|
|
24
|
-
? e._version
|
|
25
|
-
: undefined;
|
|
21
|
+
const version = versionOf(e);
|
|
26
22
|
return {
|
|
27
23
|
__cacheBarrier: true,
|
|
28
24
|
token: uuidv7(),
|
|
@@ -32,6 +28,12 @@ export function createCacheMutationBarrier(reason, entity) {
|
|
|
32
28
|
...(version !== undefined ? { version } : {}),
|
|
33
29
|
};
|
|
34
30
|
}
|
|
31
|
+
/** The entity's numeric `version`, else its numeric `_version` backing field. */
|
|
32
|
+
function versionOf(entity) {
|
|
33
|
+
if (typeof entity?.version === 'number')
|
|
34
|
+
return entity.version;
|
|
35
|
+
return typeof entity?._version === 'number' ? entity._version : undefined;
|
|
36
|
+
}
|
|
35
37
|
/**
|
|
36
38
|
* Type guard verifying whether an arbitrary value is a {@link CacheMutationBarrier}.
|
|
37
39
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-barrier.helper.js","sourceRoot":"","sources":["../../../persistence/helpers/cache-barrier.helper.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmD1C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAA0B,EAC1B,MAAgB;IAEhB,MAAM,CAAC,GACL,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAC3C,CAAC,CAAE,MAAkC;QACrC,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"cache-barrier.helper.js","sourceRoot":"","sources":["../../../persistence/helpers/cache-barrier.helper.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmD1C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAA0B,EAC1B,MAAgB;IAEhB,MAAM,CAAC,GACL,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAC3C,CAAC,CAAE,MAAkC;QACrC,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAE7B,OAAO;QACL,cAAc,EAAE,IAAI;QACpB,KAAK,EAAE,MAAM,EAAE;QACf,MAAM;QACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,SAAS,CAChB,MAA2C;IAE3C,IAAI,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAC/D,OAAO,OAAO,MAAM,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAiC,CAAC,cAAc,KAAK,IAAI,CAC3D,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-key.helper.d.ts","sourceRoot":"","sources":["../../../persistence/helpers/cache-key.helper.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,sCAAsC,CAAC;AAE9C;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAmCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CACtB,gBAAgB,EAAE,sBAAsB,EACxC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,eAAe,CAAC,EAAE,oBAAoB,GACrC,MAAM,CA0BR;AAiBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,oBAAoB,GACrC,CAAC,MAAM,EAAE,CAAC,GAAG,sBAAsB,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"cache-key.helper.d.ts","sourceRoot":"","sources":["../../../persistence/helpers/cache-key.helper.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,sCAAsC,CAAC;AAE9C;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAmCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CACtB,gBAAgB,EAAE,sBAAsB,EACxC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,eAAe,CAAC,EAAE,oBAAoB,GACrC,MAAM,CA0BR;AAiBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,oBAAoB,GACrC,CAAC,MAAM,EAAE,CAAC,GAAG,sBAAsB,KAAK,MAAM,CAgChD"}
|
|
@@ -106,7 +106,7 @@ function canonicalizeValue(val) {
|
|
|
106
106
|
* ```
|
|
107
107
|
*/
|
|
108
108
|
export function cacheKeyTemplate(template, tenantOrContext) {
|
|
109
|
-
|
|
109
|
+
const keyFor = (source) => {
|
|
110
110
|
const ctx = source && typeof source === 'object' && 'request' in source
|
|
111
111
|
? source
|
|
112
112
|
: undefined;
|
|
@@ -124,5 +124,6 @@ export function cacheKeyTemplate(template, tenantOrContext) {
|
|
|
124
124
|
});
|
|
125
125
|
return `${schema}:${resolved}`;
|
|
126
126
|
};
|
|
127
|
+
return keyFor;
|
|
127
128
|
}
|
|
128
129
|
//# sourceMappingURL=cache-key.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-key.helper.js","sourceRoot":"","sources":["../../../persistence/helpers/cache-key.helper.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACL,aAAa,GAEd,MAAM,sCAAsC,CAAC;AA4B9C;;;;;;GAMG;AACH,SAAS,yBAAyB,CAChC,UAAmC;IAEnC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAE/C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IACE,OAAO,GAAG,KAAK,UAAU;YACzB,OAAO,GAAG,KAAK,QAAQ;YACvB,OAAO,GAAG,KAAK,QAAQ,EACvB,CAAC;YACD,MAAM,IAAI,SAAS,CACjB,4CAA4C,OAAO,GAAG,GAAG,CAC1D,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACxB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,QAAQ,CACtB,gBAAwC,EACxC,UAAmC,EACnC,eAAsC;IAEtC,MAAM,MAAM,GAAG,aAAa,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;IAEtE,IAAI,QAA4B,CAAC;IACjC,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QACzC,QAAQ,GAAG,gBAAgB,CAAC;IAC9B,CAAC;SAAM,IACL,gBAAgB;QAChB,CAAC,OAAO,gBAAgB,KAAK,QAAQ;YACnC,OAAO,gBAAgB,KAAK,UAAU,CAAC,EACzC,CAAC;QACD,QAAQ,GAAG,gBAAgB,CAAC,aAAa,IAAI,SAAS,CAAC;IACzD,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;IACJ,CAAC;IACD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEvC,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAExE,OAAO,GAAG,MAAM,IAAI,QAAQ,OAAO,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,GAAyB;IAClD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,eAAsC;IAEtC,
|
|
1
|
+
{"version":3,"file":"cache-key.helper.js","sourceRoot":"","sources":["../../../persistence/helpers/cache-key.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-version.helper.d.ts","sourceRoot":"","sources":["../../../persistence/helpers/cache-version.helper.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"cache-version.helper.d.ts","sourceRoot":"","sources":["../../../persistence/helpers/cache-version.helper.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAsCxE"}
|
|
@@ -28,12 +28,10 @@ import { isCacheMutationBarrier } from './cache-barrier.helper.js';
|
|
|
28
28
|
* @returns `true` if `cached` is strictly newer than `incoming`, `false` otherwise.
|
|
29
29
|
*/
|
|
30
30
|
export function isCacheNewer(cached, incoming) {
|
|
31
|
-
if (!cached ||
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
typeof incoming !== 'object') {
|
|
31
|
+
if (!cached || typeof cached !== 'object')
|
|
32
|
+
return false;
|
|
33
|
+
if (!incoming || typeof incoming !== 'object')
|
|
35
34
|
return false;
|
|
36
|
-
}
|
|
37
35
|
// A barrier records a mutation that has already been durably applied, so it
|
|
38
36
|
// outranks any snapshot: a write-through that started before a concurrent
|
|
39
37
|
// delete must not overwrite it, or the deleted aggregate would reappear in the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-version.helper.js","sourceRoot":"","sources":["../../../persistence/helpers/cache-version.helper.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,QAAiB;IAC7D,
|
|
1
|
+
{"version":3,"file":"cache-version.helper.js","sourceRoot":"","sources":["../../../persistence/helpers/cache-version.helper.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,QAAiB;IAC7D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5D,4EAA4E;IAC5E,0EAA0E;IAC1E,+EAA+E;IAC/E,4BAA4B;IAC5B,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,yEAAyE;QACzE,0BAA0B;QAC1B,OAAO,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,6DAA6D;IAC7D,IAAI,sBAAsB,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,MAAM,GAAG,GAAG,QAAmC,CAAC;IAEhD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrE,OAAO,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjE,OAAO,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAmC,CAAC,CAAC,OAAO,EAAE,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAmC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,OAAO,KAAK,GAAG,OAAO,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -26,11 +26,10 @@ export interface QueryRepositoryHydration<TResult> {
|
|
|
26
26
|
*
|
|
27
27
|
* @example Creating a query repository with the FromCache decorator
|
|
28
28
|
* ```typescript
|
|
29
|
-
* @Injectable()
|
|
30
29
|
* export class GetUserQueryRepository extends QueryRepository<GetUserQuery, User | null> {
|
|
31
30
|
* constructor(
|
|
32
|
-
*
|
|
33
|
-
*
|
|
31
|
+
* protected readonly cache: ICache<UserSnapshot>,
|
|
32
|
+
* private readonly store: MikroOrmStore,
|
|
34
33
|
* ) {
|
|
35
34
|
* super(cache);
|
|
36
35
|
* }
|
|
@@ -48,11 +47,10 @@ export interface QueryRepositoryHydration<TResult> {
|
|
|
48
47
|
*
|
|
49
48
|
* @example Declaring rehydration once for the whole repository
|
|
50
49
|
* ```typescript
|
|
51
|
-
* @Injectable()
|
|
52
50
|
* export class GetRoleQueryRepository extends QueryRepository<GetRoleQuery, Role | null> {
|
|
53
51
|
* constructor(
|
|
54
|
-
*
|
|
55
|
-
*
|
|
52
|
+
* cache: ICache<RoleSnapshot>,
|
|
53
|
+
* private readonly store: MikroOrmStore,
|
|
56
54
|
* ) {
|
|
57
55
|
* super(cache, { hydrateFn: (cached) => Role.fromJSON(cached as RoleSnapshot) });
|
|
58
56
|
* }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-repository.abstract.d.ts","sourceRoot":"","sources":["../../persistence/query-repository.abstract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,wBAAwB,CAAC,OAAO;IAC/C;;;OAGG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAExC,4DAA4D;IAC5D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CAC5C;AAED
|
|
1
|
+
{"version":3,"file":"query-repository.abstract.d.ts","sourceRoot":"","sources":["../../persistence/query-repository.abstract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,wBAAwB,CAAC,OAAO;IAC/C;;;OAGG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAExC,4DAA4D;IAC5D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,8BAAsB,eAAe,CAAC,MAAM,GAAG,aAAa,EAAE,OAAO,GAAG,OAAO,CAC7E,YAAW,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;IAG1C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC,OAAO,CAAC;IAFlE,YACqB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EACtB,SAAS,CAAC,EAAE,wBAAwB,CAAC,OAAO,CAAC,YAAA,EAC9D;IAEJ,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD"}
|
|
@@ -11,11 +11,10 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @example Creating a query repository with the FromCache decorator
|
|
13
13
|
* ```typescript
|
|
14
|
-
* @Injectable()
|
|
15
14
|
* export class GetUserQueryRepository extends QueryRepository<GetUserQuery, User | null> {
|
|
16
15
|
* constructor(
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* protected readonly cache: ICache<UserSnapshot>,
|
|
17
|
+
* private readonly store: MikroOrmStore,
|
|
19
18
|
* ) {
|
|
20
19
|
* super(cache);
|
|
21
20
|
* }
|
|
@@ -33,11 +32,10 @@
|
|
|
33
32
|
*
|
|
34
33
|
* @example Declaring rehydration once for the whole repository
|
|
35
34
|
* ```typescript
|
|
36
|
-
* @Injectable()
|
|
37
35
|
* export class GetRoleQueryRepository extends QueryRepository<GetRoleQuery, Role | null> {
|
|
38
36
|
* constructor(
|
|
39
|
-
*
|
|
40
|
-
*
|
|
37
|
+
* cache: ICache<RoleSnapshot>,
|
|
38
|
+
* private readonly store: MikroOrmStore,
|
|
41
39
|
* ) {
|
|
42
40
|
* super(cache, { hydrateFn: (cached) => Role.fromJSON(cached as RoleSnapshot) });
|
|
43
41
|
* }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-repository.abstract.js","sourceRoot":"","sources":["../../persistence/query-repository.abstract.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAqBtE
|
|
1
|
+
{"version":3,"file":"query-repository.abstract.js","sourceRoot":"","sources":["../../persistence/query-repository.abstract.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAqBtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,MAAM,OAAgB,eAAe;IAId,KAAK;IACL,SAAS;IAF9B,YACqB,KAAsB,EACtB,SAA6C;qBAD7C,KAAK;yBACL,SAAS;IAC3B,CAAC;CAGL"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cqrs-ddd/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Framework- and ORM-neutral DDD building blocks for TypeScript: aggregates and domain events, CQRS base classes and repository ports, and a revision-fenced repository cache, as separate entry points.",
|
|
5
5
|
"author": "Aristotelis",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
},
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
|
-
"url": "git+https://github.com/aristoteliss/
|
|
14
|
-
"directory": "packages/
|
|
13
|
+
"url": "git+https://github.com/aristoteliss/ddd-cqrs.git",
|
|
14
|
+
"directory": "packages/core"
|
|
15
15
|
},
|
|
16
|
-
"homepage": "https://aristoteliss.github.io/
|
|
16
|
+
"homepage": "https://aristoteliss.github.io/ddd-cqrs/packages/core/",
|
|
17
17
|
"bugs": {
|
|
18
|
-
"url": "https://github.com/aristoteliss/
|
|
18
|
+
"url": "https://github.com/aristoteliss/ddd-cqrs/issues"
|
|
19
19
|
},
|
|
20
20
|
"keywords": [
|
|
21
21
|
"ddd",
|
|
@@ -61,13 +61,13 @@
|
|
|
61
61
|
"access": "public"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@cqrs-ddd/safe-stringify": "^0.
|
|
65
|
-
"@cqrs-ddd/uuidv7": "^0.
|
|
64
|
+
"@cqrs-ddd/safe-stringify": "^0.5.1",
|
|
65
|
+
"@cqrs-ddd/uuidv7": "^0.5.1"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@vitest/coverage-v8": "^5.0.
|
|
68
|
+
"@vitest/coverage-v8": "^5.0.5",
|
|
69
69
|
"typescript": "^7.0.2",
|
|
70
|
-
"vitest": "^5.0.
|
|
70
|
+
"vitest": "^5.0.5"
|
|
71
71
|
},
|
|
72
72
|
"scripts": {
|
|
73
73
|
"build": "tsc -p tsconfig.build.json",
|