@meticoeus/ddd-es 0.2.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/LICENSE +21 -0
- package/README.md +43 -0
- package/dist/package.json +81 -0
- package/dist/src/AbstractEventProcessManager.d.ts +32 -0
- package/dist/src/AbstractEventProcessManager.d.ts.map +1 -0
- package/dist/src/AbstractEventProcessManager.js +142 -0
- package/dist/src/AbstractEventProcessManager.js.map +1 -0
- package/dist/src/AbstractEventProcessManager.mocks.d.ts +27 -0
- package/dist/src/AbstractEventProcessManager.mocks.d.ts.map +1 -0
- package/dist/src/AbstractEventProcessManager.mocks.js +86 -0
- package/dist/src/AbstractEventProcessManager.mocks.js.map +1 -0
- package/dist/src/AbstractEventProcessManager.test.d.ts +2 -0
- package/dist/src/AbstractEventProcessManager.test.d.ts.map +1 -0
- package/dist/src/AbstractEventProcessManager.test.js +109 -0
- package/dist/src/AbstractEventProcessManager.test.js.map +1 -0
- package/dist/src/AggregateRoot.d.ts +52 -0
- package/dist/src/AggregateRoot.d.ts.map +1 -0
- package/dist/src/AggregateRoot.fixtures.d.ts +4 -0
- package/dist/src/AggregateRoot.fixtures.d.ts.map +1 -0
- package/dist/src/AggregateRoot.fixtures.js +45 -0
- package/dist/src/AggregateRoot.fixtures.js.map +1 -0
- package/dist/src/AggregateRoot.js +136 -0
- package/dist/src/AggregateRoot.js.map +1 -0
- package/dist/src/AggregateRoot.mocks.d.ts +26 -0
- package/dist/src/AggregateRoot.mocks.d.ts.map +1 -0
- package/dist/src/AggregateRoot.mocks.js +82 -0
- package/dist/src/AggregateRoot.mocks.js.map +1 -0
- package/dist/src/EventProcessor.d.ts +40 -0
- package/dist/src/EventProcessor.d.ts.map +1 -0
- package/dist/src/EventProcessor.js +112 -0
- package/dist/src/EventProcessor.js.map +1 -0
- package/dist/src/EventProcessor.mocks.d.ts +11 -0
- package/dist/src/EventProcessor.mocks.d.ts.map +1 -0
- package/dist/src/EventProcessor.mocks.js +50 -0
- package/dist/src/EventProcessor.mocks.js.map +1 -0
- package/dist/src/EventProcessor.test.d.ts +2 -0
- package/dist/src/EventProcessor.test.d.ts.map +1 -0
- package/dist/src/EventProcessor.test.js +37 -0
- package/dist/src/EventProcessor.test.js.map +1 -0
- package/dist/src/IRepository.d.ts +14 -0
- package/dist/src/IRepository.d.ts.map +1 -0
- package/dist/src/IRepository.js +25 -0
- package/dist/src/IRepository.js.map +1 -0
- package/dist/src/Repository.d.ts +20 -0
- package/dist/src/Repository.d.ts.map +1 -0
- package/dist/src/Repository.js +127 -0
- package/dist/src/Repository.js.map +1 -0
- package/dist/src/Repository.mocks.d.ts +13 -0
- package/dist/src/Repository.mocks.d.ts.map +1 -0
- package/dist/src/Repository.mocks.js +55 -0
- package/dist/src/Repository.mocks.js.map +1 -0
- package/dist/src/Repository.test.d.ts +2 -0
- package/dist/src/Repository.test.d.ts.map +1 -0
- package/dist/src/Repository.test.js +108 -0
- package/dist/src/Repository.test.js.map +1 -0
- package/dist/src/entities.d.ts +37 -0
- package/dist/src/entities.d.ts.map +1 -0
- package/dist/src/entities.js +25 -0
- package/dist/src/entities.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +34 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/logger.d.ts +23 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +37 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/mocks.d.ts +4 -0
- package/dist/src/mocks.d.ts.map +1 -0
- package/dist/src/mocks.js +27 -0
- package/dist/src/mocks.js.map +1 -0
- package/dist/src/otel/AbstractEventProcessManager.d.ts +6 -0
- package/dist/src/otel/AbstractEventProcessManager.d.ts.map +1 -0
- package/dist/src/otel/AbstractEventProcessManager.js +63 -0
- package/dist/src/otel/AbstractEventProcessManager.js.map +1 -0
- package/dist/src/otel/EventProcessor.d.ts +13 -0
- package/dist/src/otel/EventProcessor.d.ts.map +1 -0
- package/dist/src/otel/EventProcessor.js +59 -0
- package/dist/src/otel/EventProcessor.js.map +1 -0
- package/dist/src/otel/Repository.d.ts +12 -0
- package/dist/src/otel/Repository.d.ts.map +1 -0
- package/dist/src/otel/Repository.js +80 -0
- package/dist/src/otel/Repository.js.map +1 -0
- package/dist/src/otel/index.d.ts +6 -0
- package/dist/src/otel/index.d.ts.map +1 -0
- package/dist/src/otel/index.js +29 -0
- package/dist/src/otel/index.js.map +1 -0
- package/dist/src/otel/tracer.d.ts +2 -0
- package/dist/src/otel/tracer.d.ts.map +1 -0
- package/dist/src/otel/tracer.js +27 -0
- package/dist/src/otel/tracer.js.map +1 -0
- package/dist/src/otel/utils.d.ts +8 -0
- package/dist/src/otel/utils.d.ts.map +1 -0
- package/dist/src/otel/utils.js +70 -0
- package/dist/src/otel/utils.js.map +1 -0
- package/dist/src/schemas.d.ts +83 -0
- package/dist/src/schemas.d.ts.map +1 -0
- package/dist/src/schemas.js +77 -0
- package/dist/src/schemas.js.map +1 -0
- package/dist/src/schemas.test.d.ts +2 -0
- package/dist/src/schemas.test.d.ts.map +1 -0
- package/dist/src/schemas.test.js +110 -0
- package/dist/src/schemas.test.js.map +1 -0
- package/dist/src/types.d.ts +124 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.fixtures.d.ts +3 -0
- package/dist/src/types.fixtures.d.ts.map +1 -0
- package/dist/src/types.fixtures.js +28 -0
- package/dist/src/types.fixtures.js.map +1 -0
- package/dist/src/types.js +130 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/types.mocks.d.ts +14 -0
- package/dist/src/types.mocks.d.ts.map +1 -0
- package/dist/src/types.mocks.js +239 -0
- package/dist/src/types.mocks.js.map +1 -0
- package/dist/src/utils.d.ts +11 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +64 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2024 Justin Bailey
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
23
|
+
*/
|
|
24
|
+
import { mockMetadata } from './types.fixtures.js';
|
|
25
|
+
import { ConcurrencyException, Err, EventExistenceRevision, Ok, } from './types.js';
|
|
26
|
+
export function mockEvent(data) {
|
|
27
|
+
return {
|
|
28
|
+
metadata: mockMetadata,
|
|
29
|
+
...data, // keep real metadata if it was already provided.
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function mockPersistedEvent(data, revision) {
|
|
33
|
+
return {
|
|
34
|
+
id: 'Event:1',
|
|
35
|
+
...mockEvent(data),
|
|
36
|
+
revision,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function mockPersistedEvents(events, revision) {
|
|
40
|
+
return events.map((data) => ({
|
|
41
|
+
id: 'Event:1',
|
|
42
|
+
...mockEvent(data),
|
|
43
|
+
revision: revision++,
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
export class MockEventStore {
|
|
47
|
+
_events;
|
|
48
|
+
constructor(events) {
|
|
49
|
+
this._events = new Map();
|
|
50
|
+
if (events) {
|
|
51
|
+
for (const [id, list] of events.entries()) {
|
|
52
|
+
let revision = 0n;
|
|
53
|
+
const persisted = [];
|
|
54
|
+
this._events.set(id, persisted);
|
|
55
|
+
for (const event of list) {
|
|
56
|
+
persisted.push({
|
|
57
|
+
id: 'Event:1',
|
|
58
|
+
...event,
|
|
59
|
+
revision: revision++,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async saveEvents(streamName, events, eventRevision) {
|
|
66
|
+
let revision = -1n;
|
|
67
|
+
let commited;
|
|
68
|
+
if (!this._events.has(streamName)) {
|
|
69
|
+
switch (true) {
|
|
70
|
+
case eventRevision === EventExistenceRevision.StreamExists:
|
|
71
|
+
case typeof eventRevision === 'bigint':
|
|
72
|
+
return Err(new ConcurrencyException(streamName, eventRevision, undefined));
|
|
73
|
+
}
|
|
74
|
+
commited = [];
|
|
75
|
+
this._events.set(streamName, commited);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
commited = this._events.get(streamName);
|
|
79
|
+
revision = BigInt(commited.length - 1);
|
|
80
|
+
switch (true) {
|
|
81
|
+
case eventRevision === EventExistenceRevision.NoStream:
|
|
82
|
+
case typeof eventRevision === 'bigint' && revision !== eventRevision:
|
|
83
|
+
return Err(new ConcurrencyException(streamName, eventRevision, revision));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
for (const event of events) {
|
|
87
|
+
revision++;
|
|
88
|
+
commited.push({ id: 'Event:1', ...event, revision });
|
|
89
|
+
}
|
|
90
|
+
return Ok({ nextExpectedRevision: revision });
|
|
91
|
+
}
|
|
92
|
+
async deleteStream(streamName, eventRevision) {
|
|
93
|
+
if (!this._events.has(streamName)) {
|
|
94
|
+
switch (true) {
|
|
95
|
+
case eventRevision === EventExistenceRevision.StreamExists:
|
|
96
|
+
case typeof eventRevision === 'bigint':
|
|
97
|
+
return Err(new ConcurrencyException(streamName, eventRevision, undefined));
|
|
98
|
+
}
|
|
99
|
+
return Ok();
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const commited = this._events.get(streamName);
|
|
103
|
+
let revision = BigInt(commited.length - 1);
|
|
104
|
+
switch (true) {
|
|
105
|
+
case eventRevision === EventExistenceRevision.NoStream:
|
|
106
|
+
case typeof eventRevision === 'bigint' && revision !== eventRevision:
|
|
107
|
+
return Err(new ConcurrencyException(streamName, eventRevision, revision));
|
|
108
|
+
}
|
|
109
|
+
this._events.delete(streamName);
|
|
110
|
+
return Ok();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async getEventsForAggregate(streamName, expectedRevision) {
|
|
114
|
+
const events = (this._events.get(streamName) ?? []);
|
|
115
|
+
if (typeof expectedRevision === 'undefined') {
|
|
116
|
+
return events;
|
|
117
|
+
}
|
|
118
|
+
const results = [];
|
|
119
|
+
for (const event of events) {
|
|
120
|
+
if (event.revision <= expectedRevision) {
|
|
121
|
+
results.push(event);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
return results;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return results;
|
|
128
|
+
}
|
|
129
|
+
async getEventsForAggregateFromRevision(streamName, fromRevision) {
|
|
130
|
+
const events = await this.getEventsForAggregate(streamName);
|
|
131
|
+
const next = [];
|
|
132
|
+
for (const event of events) {
|
|
133
|
+
if (event.revision >= fromRevision) {
|
|
134
|
+
next.push(event);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return next;
|
|
138
|
+
}
|
|
139
|
+
// We needs a way to get all data in memory in tests
|
|
140
|
+
getAllIds() {
|
|
141
|
+
return [...this._events.keys()];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (import.meta.vitest) {
|
|
145
|
+
const { test, expect, describe } = import.meta.vitest;
|
|
146
|
+
// ensure the mock event store is working correctly for other tests
|
|
147
|
+
describe('MockEventStore', () => {
|
|
148
|
+
describe('saveEvents', () => {
|
|
149
|
+
const event1 = {
|
|
150
|
+
type: 'TestStarted',
|
|
151
|
+
data: { id: '1' },
|
|
152
|
+
metadata: mockMetadata,
|
|
153
|
+
};
|
|
154
|
+
const event2 = {
|
|
155
|
+
type: 'TestAmended',
|
|
156
|
+
data: { id: '1' },
|
|
157
|
+
metadata: mockMetadata,
|
|
158
|
+
};
|
|
159
|
+
const event3 = {
|
|
160
|
+
type: 'TestAmended',
|
|
161
|
+
data: { id: '1' },
|
|
162
|
+
metadata: mockMetadata,
|
|
163
|
+
};
|
|
164
|
+
test('should assign an incrementing revision to events', async () => {
|
|
165
|
+
const store = new MockEventStore();
|
|
166
|
+
const res = await store.saveEvents('test', [event1, event2], EventExistenceRevision.NoStream);
|
|
167
|
+
expect(res.error?.message).not.toBeDefined();
|
|
168
|
+
expect(res.ok, 'Should not return an error').toBe(true);
|
|
169
|
+
if (res.ok === false)
|
|
170
|
+
return;
|
|
171
|
+
const events = await store.getEventsForAggregate('test');
|
|
172
|
+
expect(events.length, 'should have 2 events saved').toEqual(2);
|
|
173
|
+
expect(events[0]).toEqual({ id: 'Event:1', ...event1, revision: 0n });
|
|
174
|
+
expect(events[1]).toEqual({ id: 'Event:1', ...event2, revision: 1n });
|
|
175
|
+
expect(res.value).toEqual({ nextExpectedRevision: 1n });
|
|
176
|
+
});
|
|
177
|
+
test('should assign an incrementing revision to events saved successively', async () => {
|
|
178
|
+
const store = new MockEventStore();
|
|
179
|
+
const data = [
|
|
180
|
+
[event1, EventExistenceRevision.NoStream],
|
|
181
|
+
[event2, 0n],
|
|
182
|
+
[event3, 1n],
|
|
183
|
+
];
|
|
184
|
+
for (const [event, revision] of data) {
|
|
185
|
+
const res = await store.saveEvents('test', [event], revision);
|
|
186
|
+
expect(res.error?.message).not.toBeDefined();
|
|
187
|
+
expect(res.ok, 'Should not return an error').toBe(true);
|
|
188
|
+
if (res.ok === false)
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const events = await store.getEventsForAggregate('test');
|
|
192
|
+
expect(events.length, 'should have 3 events saved').toEqual(3);
|
|
193
|
+
expect(events[0]).toEqual({ id: 'Event:1', ...event1, revision: 0n });
|
|
194
|
+
expect(events[1]).toEqual({ id: 'Event:1', ...event2, revision: 1n });
|
|
195
|
+
expect(events[2]).toEqual({ id: 'Event:1', ...event3, revision: 2n });
|
|
196
|
+
});
|
|
197
|
+
test.each([
|
|
198
|
+
{
|
|
199
|
+
msg: `the expected revision is out of date`,
|
|
200
|
+
data: [
|
|
201
|
+
[event1, EventExistenceRevision.NoStream, Ok({ nextExpectedRevision: 0n })],
|
|
202
|
+
[event2, 0n, Ok({ nextExpectedRevision: 1n })],
|
|
203
|
+
[event3, 0n, Err(new ConcurrencyException('test', 0n, 1n))],
|
|
204
|
+
],
|
|
205
|
+
map: undefined,
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
msg: `the stream doesn't exists`,
|
|
209
|
+
data: [
|
|
210
|
+
[
|
|
211
|
+
event1,
|
|
212
|
+
EventExistenceRevision.StreamExists,
|
|
213
|
+
Err(new ConcurrencyException('test', EventExistenceRevision.StreamExists, undefined)),
|
|
214
|
+
],
|
|
215
|
+
],
|
|
216
|
+
map: undefined,
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
msg: `the stream already exists`,
|
|
220
|
+
data: [
|
|
221
|
+
[
|
|
222
|
+
event1,
|
|
223
|
+
EventExistenceRevision.NoStream,
|
|
224
|
+
Err(new ConcurrencyException('test', EventExistenceRevision.NoStream, 0n)),
|
|
225
|
+
],
|
|
226
|
+
],
|
|
227
|
+
map: new Map([['test', [event1]]]),
|
|
228
|
+
},
|
|
229
|
+
])(`should fail with a concurrency exception when $msg`, async ({ data, map }) => {
|
|
230
|
+
const store = new MockEventStore(map);
|
|
231
|
+
for (const [event, revision, result] of data) {
|
|
232
|
+
const res = await store.saveEvents('test', [event], revision);
|
|
233
|
+
expect(res).toEqual(result);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=types.mocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mocks.js","sourceRoot":"","sources":["../../src/types.mocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ZodError } from 'zod';
|
|
2
|
+
import { Link, VersionedLink } from './entities.js';
|
|
3
|
+
import { Result } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* schema should be a Zod Schema type. Causing issues with TS compiler.
|
|
6
|
+
* */
|
|
7
|
+
export declare function parse<T>(schema: any, value: T): Result<T, ZodError>;
|
|
8
|
+
export declare function serializeBigIntJson(value: any, space?: string | number): string;
|
|
9
|
+
export declare function linkToString<Type extends string, ID extends string>(link: Link<Type, ID>): string;
|
|
10
|
+
export declare function versionedLinkToString<Type extends string, ID extends string>(link: VersionedLink<Type, ID>): string;
|
|
11
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,QAAQ,EAAK,MAAM,KAAK,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAW,MAAM,EAAE,MAAM,YAAY,CAAA;AAI5C;;KAEK;AACL,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAGnE;AAuBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,CAEjG;AAED,wBAAgB,qBAAqB,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,EAC1E,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,GAC5B,MAAM,CAER"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2024 Justin Bailey
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
23
|
+
*/
|
|
24
|
+
import { z } from 'zod';
|
|
25
|
+
import { Err, Ok } from './types.js';
|
|
26
|
+
// The schema type is broken: https://github.com/colinhacks/zod/issues/3293
|
|
27
|
+
// Passing T to Schema results in invalid optional properties where they should be required.
|
|
28
|
+
/**
|
|
29
|
+
* schema should be a Zod Schema type. Causing issues with TS compiler.
|
|
30
|
+
* */
|
|
31
|
+
export function parse(schema, value) {
|
|
32
|
+
const res = schema.safeParse(value);
|
|
33
|
+
return res.success && !res.error ? Ok(res.data) : Err(res.error);
|
|
34
|
+
}
|
|
35
|
+
if (import.meta.vitest) {
|
|
36
|
+
const { test, expect, describe } = import.meta.vitest;
|
|
37
|
+
describe('zod parse to Result', () => {
|
|
38
|
+
const schema = z.string();
|
|
39
|
+
test('should successfully parse a valid value', () => {
|
|
40
|
+
const res = parse(schema, 'test');
|
|
41
|
+
expect(res.ok).toStrictEqual(true);
|
|
42
|
+
if (!res.ok)
|
|
43
|
+
return;
|
|
44
|
+
expect(res.value).toStrictEqual('test');
|
|
45
|
+
});
|
|
46
|
+
test('should return an error for an invalid value instead of throwing', () => {
|
|
47
|
+
const res = parse(schema, 55);
|
|
48
|
+
expect(res.ok).toStrictEqual(false);
|
|
49
|
+
if (res.ok === true)
|
|
50
|
+
return;
|
|
51
|
+
expect(res.error).toBeDefined();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export function serializeBigIntJson(value, space) {
|
|
56
|
+
return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v), space);
|
|
57
|
+
}
|
|
58
|
+
export function linkToString(link) {
|
|
59
|
+
return `${link.type}:${link.id}`;
|
|
60
|
+
}
|
|
61
|
+
export function versionedLinkToString(link) {
|
|
62
|
+
return `${link.type}:${link.id}@${link.revision}`;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;EAsBE;AAEF,OAAO,EAAY,CAAC,EAAE,MAAM,KAAK,CAAA;AAEjC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAU,MAAM,YAAY,CAAA;AAE5C,2EAA2E;AAC3E,4FAA4F;AAC5F;;KAEK;AACL,MAAM,UAAU,KAAK,CAAI,MAAW,EAAE,KAAQ;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACnC,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAClF,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAA;IAErD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;QAEzB,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACnD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACjC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAClC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAM;YACnB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;YAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,EAAuB,CAAC,CAAA;YAClD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YACnC,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI;gBAAE,OAAM;YAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAU,EAAE,KAAuB;IACrE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC3F,CAAC;AAED,MAAM,UAAU,YAAY,CAAyC,IAAoB;IACvF,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAA6B;IAE7B,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAA;AACnD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@meticoeus/ddd-es",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "A Typescript library for using Event Sourcing and Domain Driven Design.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"DDD",
|
|
7
|
+
"Domain Driven Design",
|
|
8
|
+
"Event Sourcing"
|
|
9
|
+
],
|
|
10
|
+
"author": "meticoeus",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/meticoeus/ddd-es.git"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/meticoeus/ddd-es/issues"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/meticoeus/ddd-es#readme",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"type": "module",
|
|
21
|
+
"main": "./dist/src/index.js",
|
|
22
|
+
"types": "./dist/src/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
"./package.json": "./package.json",
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./dist/src/index.d.ts",
|
|
27
|
+
"import": "./dist/src/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./mocks": {
|
|
30
|
+
"types": "./dist/src/mocks.d.ts",
|
|
31
|
+
"import": "./dist/src/mocks.js"
|
|
32
|
+
},
|
|
33
|
+
"./otel": {
|
|
34
|
+
"types": "./dist/src/otel/index.d.ts",
|
|
35
|
+
"import": "./dist/src/otel/index.js"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"dist/",
|
|
40
|
+
"README.md",
|
|
41
|
+
"LICENSE"
|
|
42
|
+
],
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=20.12.0"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"test": "vitest",
|
|
48
|
+
"build": "tsc",
|
|
49
|
+
"format": "prettier --write .",
|
|
50
|
+
"postinstall": "husky install",
|
|
51
|
+
"prepare": "npm run build",
|
|
52
|
+
"prepublishOnly": "npm test -- --run"
|
|
53
|
+
},
|
|
54
|
+
"lint-staged": {
|
|
55
|
+
"**/*.ts": [
|
|
56
|
+
"npx prettier --write"
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
"peerDependencies": {
|
|
60
|
+
"@opentelemetry/api": "^1.8.0"
|
|
61
|
+
},
|
|
62
|
+
"peerDependenciesMeta": {
|
|
63
|
+
"@opentelemetry/api": {
|
|
64
|
+
"optional": true
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"zod": "^3.23.8"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@types/node": "^20.12.12",
|
|
72
|
+
"husky": "^8.0.0",
|
|
73
|
+
"lint-staged": "^15.2.5",
|
|
74
|
+
"pino": "^9.1.0",
|
|
75
|
+
"pino-pretty": "^11.0.0",
|
|
76
|
+
"prettier": "^3.2.5",
|
|
77
|
+
"prettier-plugin-organize-imports": "^3.2.4",
|
|
78
|
+
"typescript": "^5.4.5",
|
|
79
|
+
"vitest": "^1.6.0"
|
|
80
|
+
}
|
|
81
|
+
}
|