@ddd-ts/shape 0.0.3-61 → 0.0.3-62

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-ts/shape",
3
- "version": "0.0.3-61",
3
+ "version": "0.0.3-62",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
package/dist/enum.d.ts DELETED
@@ -1,25 +0,0 @@
1
- import { Constructor } from "@ddd-ts/traits";
2
- export declare const Enum: <const V extends string>(values: V[]) => {
3
- new (value: V): {
4
- value: V;
5
- serialize(): V;
6
- is<U extends V>(value: U): this is any & {
7
- value: U;
8
- serialize(): U;
9
- };
10
- match<T extends any, M extends MatcherParam<V>>(this: T, matcher: M): M extends Required<MatcherParam<V>> ? { [K in V]: M[K] extends () => infer R ? R : never; }[V] : { [K_1 in V]: M[K_1] extends () => infer R_1 ? R_1 : never; }[V] | (M extends {
11
- _: () => infer R_2;
12
- } ? R_2 : never);
13
- };
14
- values: V[];
15
- deserialize<T_1 extends Constructor>(this: T_1, value: V): InstanceType<T_1>;
16
- } & { [K_2 in V]: <T_2 extends Constructor>(this: T_2) => InstanceType<T_2>; };
17
- type Matcher<cases extends string> = {
18
- [K in cases]?: () => any;
19
- };
20
- type Catchall = {
21
- _: () => any;
22
- };
23
- type MatcherParam<cases extends string> = Required<Matcher<cases>> | (Matcher<cases> & Catchall);
24
- export {};
25
- //# sourceMappingURL=enum.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../src/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,IAAI;;;;;;;;;;;;;;8EA+ChB,CAAC;AAEF,KAAK,OAAO,CAAC,KAAK,SAAS,MAAM,IAAI;KACnC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG;CACxB,CAAC;AAEF,KAAK,QAAQ,GAAG;IAAE,CAAC,EAAE,MAAM,GAAG,CAAA;CAAE,CAAC;AAEjC,KAAK,YAAY,CAAC,KAAK,SAAS,MAAM,IACnC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GACxB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC"}
package/dist/enum.js DELETED
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Enum = void 0;
4
- const Enum = (values) => {
5
- const I = class EnumIntermediate {
6
- value;
7
- static values = values;
8
- constructor(value) {
9
- this.value = value;
10
- }
11
- serialize() {
12
- return this.value;
13
- }
14
- is(value) {
15
- return this.value === value;
16
- }
17
- match(matcher) {
18
- const fn = matcher[this.value];
19
- if (fn) {
20
- return fn();
21
- }
22
- const catchAll = matcher._;
23
- return catchAll();
24
- }
25
- static deserialize(value) {
26
- return new this(value);
27
- }
28
- };
29
- for (const v of values) {
30
- I[v] = function () {
31
- return new this(v);
32
- };
33
- }
34
- return I;
35
- };
36
- exports.Enum = Enum;
37
- //# sourceMappingURL=enum.js.map
package/dist/enum.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum.js","sourceRoot":"","sources":["../src/enum.ts"],"names":[],"mappings":";;;AAEO,MAAM,IAAI,GAAG,CAAyB,MAAW,EAAE,EAAE;IAC3D,MAAM,CAAC,GAAG,MAAM,gBAAgB;QAEZ;QADnB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,YAAmB,KAAQ;YAAR,UAAK,GAAL,KAAK,CAAG;QAAG,CAAC;QAE/B,SAAS;YACR,OAAO,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;QAED,EAAE,CAAc,KAAQ;YACvB,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;QAC7B,CAAC;QAED,KAAK,CAEJ,OAAU;YAUV,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,EAAE,EAAE;gBACP,OAAO,EAAE,EAAS,CAAC;aACnB;YACD,MAAM,QAAQ,GAAI,OAAe,CAAC,CAAC,CAAC;YACpC,OAAO,QAAQ,EAAS,CAAC;QAC1B,CAAC;QAED,MAAM,CAAC,WAAW,CAAiC,KAAQ;YAC1D,OAAO,IAAI,IAAI,CAAC,KAAK,CAAoB,CAAC;QAC3C,CAAC;KACD,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;QACtB,CAAS,CAAC,CAAC,CAAC,GAAG;YACf,OAAO,IAAI,IAAI,CAAC,CAAC,CAAoB,CAAC;QACvC,CAAC,CAAC;KACF;IAED,OAAO,CAEN,CAAC;AACH,CAAC,CAAC;AA/CW,QAAA,IAAI,QA+Cf"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=enum.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum.spec.d.ts","sourceRoot":"","sources":["../src/enum.spec.ts"],"names":[],"mappings":""}
package/dist/enum.spec.js DELETED
@@ -1,71 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const enum_1 = require("./enum");
4
- describe('Enum', () => {
5
- class Bool extends (0, enum_1.Enum)(['yes', 'no']) {
6
- }
7
- it('should instanciate', () => {
8
- new Bool('yes');
9
- new Bool('no');
10
- // @ts-expect-error it should not be possible to instanciate with invalid value
11
- new Bool('maybe');
12
- });
13
- it('should serialize and deserialize', () => {
14
- const test = Bool.deserialize('yes').serialize();
15
- expect(test).toBe('yes');
16
- });
17
- it('should pattern match', async () => {
18
- const test = await Bool.deserialize('yes').match({
19
- yes: async () => 'yeap',
20
- no: async () => 'nope'
21
- });
22
- expect(test).toBe('yeap');
23
- // @ts-expect-error it should not be possible to pattern match with incomplete cases
24
- Bool.deserialize('yes').match({
25
- yes: () => 'yeap',
26
- });
27
- // it should allow catch all instead of other cases
28
- Bool.deserialize('yes').match({
29
- yes: () => 'yeap',
30
- _: () => 'nope'
31
- });
32
- });
33
- it('should become predictible after conditional', () => {
34
- const value = Bool.yes();
35
- if (value.is('yes')) {
36
- const test = value.serialize();
37
- expect(test).toBe('yes');
38
- }
39
- });
40
- // For next time :p
41
- //
42
- // it.skip('should allow struct enums', () => {
43
- // class Triangle extends Shape(Number) { }
44
- // class Geometry extends Enum({
45
- // Point: null,
46
- // Circle: Number,
47
- // Rectangle: { side: Number }
48
- // Triangle,
49
- // }){}
50
- // const rect = Geometry.deserialize({
51
- // variant: 'Rectangle',
52
- // params: {
53
- // side: 2
54
- // }
55
- // }).serialize()
56
- // expect(rect).toEqual({
57
- // variant: 'Rectangle',
58
- // params: {
59
- // side: 2
60
- // }
61
- // })
62
- // const triangle = Geometry.deserialize({
63
- // variant: 'Triangle',
64
- // params: 3
65
- // })
66
- // if(triangle.is('Triangle')){
67
- // triangle.value === 3
68
- // }
69
- // })
70
- });
71
- //# sourceMappingURL=enum.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum.spec.js","sourceRoot":"","sources":["../src/enum.spec.ts"],"names":[],"mappings":";;AAAA,iCAA6B;AAE7B,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IAClB,MAAM,IAAK,SAAQ,IAAA,WAAI,EAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAAI;IAC1C,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;QACf,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;QACd,+EAA+E;QAC/E,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,IAAI,GAAiB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAA;QAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,IAAI,GAAoB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;YAC9D,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,MAAe;YAChC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,MAAe;SAClC,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEzB,oFAAoF;QACpF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;YAC1B,GAAG,EAAE,GAAG,EAAE,CAAC,MAAe;SAC7B,CAAC,CAAA;QAEF,mDAAmD;QACnD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;YAC1B,GAAG,EAAE,GAAG,EAAE,CAAC,MAAe;YAC1B,CAAC,EAAE,GAAG,EAAE,CAAC,MAAe;SAC3B,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YACjB,MAAM,IAAI,GAAU,KAAK,CAAC,SAAS,EAAE,CAAA;YACrC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAC3B;IACL,CAAC,CAAC,CAAA;IAGF,mBAAmB;IACnB,EAAE;IACF,+CAA+C;IAC/C,+CAA+C;IAE/C,oCAAoC;IACpC,uBAAuB;IACvB,0BAA0B;IAC1B,sCAAsC;IACtC,oBAAoB;IACpB,WAAW;IAEX,0CAA0C;IAC1C,gCAAgC;IAChC,oBAAoB;IACpB,sBAAsB;IACtB,YAAY;IACZ,qBAAqB;IAErB,6BAA6B;IAC7B,gCAAgC;IAChC,oBAAoB;IACpB,sBAAsB;IACtB,YAAY;IACZ,SAAS;IAET,8CAA8C;IAC9C,+BAA+B;IAC/B,oBAAoB;IACpB,SAAS;IAGT,mCAAmC;IACnC,+BAA+B;IAC/B,SAAS;IACT,KAAK;AACT,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.spec.d.ts","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":""}
@@ -1,357 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const traits_1 = require("@ddd-ts/traits");
4
- const _1 = require(".");
5
- const Value = _1.Shape;
6
- describe("Value", () => {
7
- describe("Primitive", () => {
8
- class Money extends Value(Number) {
9
- add(addend) {
10
- return new Money(this.value + addend.value);
11
- }
12
- }
13
- it("number: deserializes and reserializes", () => {
14
- const money = Money.deserialize(2);
15
- expect(money).toBeInstanceOf(Money);
16
- expect(money.serialize()).toEqual(2);
17
- });
18
- it("can execute methods", () => {
19
- const before = new Money(2);
20
- const after = before.add(new Money(2));
21
- expect(after.value).toBe(4);
22
- });
23
- class Sentence extends Value(String) {
24
- get wordCount() {
25
- return this.value.split(" ").length;
26
- }
27
- }
28
- it("string: deserializes and reserializes", () => {
29
- const sentence = Sentence.deserialize("Hello World!");
30
- expect(sentence).toBeInstanceOf(Sentence);
31
- expect(sentence.serialize()).toEqual("Hello World!");
32
- });
33
- it("can execute getters", () => {
34
- const sentence = Sentence.deserialize("Hello World!");
35
- expect(sentence.wordCount).toEqual(2);
36
- });
37
- class IsTransactionStale extends Value(Boolean) {
38
- }
39
- it("boolean: deserializes and reserializes", () => {
40
- const isStale = IsTransactionStale.deserialize(false);
41
- expect(isStale).toBeInstanceOf(IsTransactionStale);
42
- expect(isStale.serialize()).toEqual(false);
43
- });
44
- });
45
- describe("Wrapping", () => {
46
- class Amount extends Value(Number) {
47
- add(other) {
48
- return new Amount(this.value + other.value);
49
- }
50
- }
51
- class Money extends Value(Amount) {
52
- add(addend) {
53
- return new Money(this.value.add(addend.value));
54
- }
55
- }
56
- it("deserializes and reserializes", () => {
57
- const money = Money.deserialize(2);
58
- expect(money.serialize()).toEqual(2);
59
- });
60
- it("uses value internally", () => {
61
- const money = Money.deserialize(2);
62
- expect(money.value).toBeInstanceOf(Amount);
63
- });
64
- });
65
- describe("Optional", () => {
66
- it("deserializes and reserializes", () => {
67
- class Amount extends (0, traits_1.Derive)((0, _1.Shaped)((0, _1.Optional)(Number))) {
68
- do() {
69
- // @ts-expect-error - value is optional
70
- this.value.toExponential();
71
- // @ts-expect-error - no nesting
72
- this.value?.value.toExponential();
73
- }
74
- }
75
- new ((0, traits_1.Derive)((0, _1.Shaped)(Number)))(2);
76
- new Amount(2);
77
- new Amount(undefined);
78
- const empty = Amount.deserialize(undefined);
79
- expect(empty).toBeInstanceOf(Amount);
80
- expect(empty.serialize()).toEqual(undefined);
81
- const amount = Amount.deserialize(2);
82
- expect(amount).toBeInstanceOf(Amount);
83
- expect(amount.serialize()).toEqual(2);
84
- });
85
- it("support objects", () => {
86
- class Amount extends (0, traits_1.Derive)((0, _1.Shaped)((0, _1.Optional)({ age: Number }))) {
87
- do() {
88
- // @ts-expect-error - value is optional
89
- this.value.toExponential();
90
- this.value?.age;
91
- }
92
- }
93
- const empty = Amount.deserialize(undefined);
94
- expect(empty).toBeInstanceOf(Amount);
95
- expect(empty.serialize()).toEqual(undefined);
96
- const amount = Amount.deserialize({ age: 2 });
97
- expect(amount).toBeInstanceOf(Amount);
98
- expect(amount.serialize()).toEqual({ age: 2 });
99
- class Money extends Value((0, _1.Optional)(Number)) {
100
- add(addend) {
101
- return new Money((this.value || 0) + (addend.value || 0));
102
- }
103
- }
104
- class Transfer extends Value({ in: Money, out: Money }) {
105
- get flow() {
106
- return (this.in.value || 0) - (this.out.value || 0);
107
- }
108
- }
109
- const transfer = Transfer.deserialize({ in: 2, out: 3 });
110
- expect(transfer).toBeInstanceOf(Transfer);
111
- expect(transfer.serialize()).toEqual({ in: 2, out: 3 });
112
- expect(transfer.flow).toBe(-1);
113
- const emptyTransfer = Transfer.deserialize({
114
- in: undefined,
115
- out: undefined,
116
- });
117
- expect(emptyTransfer).toBeInstanceOf(Transfer);
118
- expect(emptyTransfer.serialize()).toEqual({
119
- in: undefined,
120
- out: undefined,
121
- });
122
- expect(emptyTransfer.flow).toBe(0);
123
- });
124
- });
125
- describe("Inheritance", () => {
126
- class Amount extends Value(Number) {
127
- add(other) {
128
- return new Amount(this.value + other.value);
129
- }
130
- }
131
- class Money extends Amount {
132
- add(addend) {
133
- return new Money(this.value + addend.value);
134
- }
135
- }
136
- it("deserializes and reserializes", () => {
137
- const money = Money.deserialize(2);
138
- expect(money.serialize()).toEqual(2);
139
- });
140
- });
141
- describe("Object", () => {
142
- class Money extends Value(Number) {
143
- }
144
- class Transfer extends Value({ in: Money, out: Money }) {
145
- get flow() {
146
- return this.in.serialize() - this.out.serialize();
147
- }
148
- }
149
- it("deserializes and reserializes", () => {
150
- const transfer = Transfer.deserialize({ in: 2, out: 3 });
151
- expect(transfer).toBeInstanceOf(Transfer);
152
- expect(transfer.serialize()).toEqual({ in: 2, out: 3 });
153
- });
154
- it("uses values internally", () => {
155
- const transfer = Transfer.deserialize({ in: 2, out: 3 });
156
- const { in: input, out: output } = transfer;
157
- expect(input).toBeInstanceOf(Money);
158
- expect(output).toBeInstanceOf(Money);
159
- });
160
- it("supports domain logic", () => {
161
- const transfer = Transfer.deserialize({ in: 2, out: 3 });
162
- expect(transfer.flow).toBe(-1);
163
- });
164
- });
165
- describe("Array", () => {
166
- describe("of Primitives", () => {
167
- class Prices extends Value([Number]) {
168
- }
169
- it("deserializes and reserializes", () => {
170
- const prices = Prices.deserialize([1, 2, 3]);
171
- console.log(prices);
172
- expect(prices.serialize()).toEqual([1, 2, 3]);
173
- expect(prices).toBeInstanceOf(Prices);
174
- });
175
- });
176
- describe("of Values", () => {
177
- class Money extends Value(Number) {
178
- }
179
- class Prices extends Value([Money]) {
180
- }
181
- it("deserializes and reserializes", () => {
182
- const prices = Prices.deserialize([1, 2, 3]);
183
- expect(prices).toBeInstanceOf(Prices);
184
- expect(prices.serialize()).toEqual([1, 2, 3]);
185
- });
186
- it("uses values internally", () => {
187
- const prices = Prices.deserialize([1, 2, 3]);
188
- expect(prices.value[0]).toBeInstanceOf(Money);
189
- });
190
- });
191
- describe("of Objects", () => {
192
- class Money extends Value(Number) {
193
- }
194
- class Transfer extends Value({ in: Money, out: Money }) {
195
- get flow() {
196
- return this.in.serialize() - this.out.serialize();
197
- }
198
- }
199
- class Extract extends Value([Transfer]) {
200
- get flow() {
201
- return this.value.reduce((acc, transfer) => acc + transfer.flow, 0);
202
- }
203
- }
204
- it("deserializes and reserializes", () => {
205
- const extract = Extract.deserialize([
206
- { in: 2, out: 3 },
207
- { in: 3, out: 4 },
208
- ]);
209
- expect(extract).toBeInstanceOf(Extract);
210
- expect(extract.serialize()).toEqual([
211
- { in: 2, out: 3 },
212
- { in: 3, out: 4 },
213
- ]);
214
- });
215
- it("uses values internally", () => {
216
- const extract = Extract.deserialize([{ in: 2, out: 3 }]);
217
- const [transfer] = extract.value;
218
- expect(transfer).toBeInstanceOf(Transfer);
219
- const { in: input, out: output } = transfer;
220
- expect(input).toBeInstanceOf(Money);
221
- expect(output).toBeInstanceOf(Money);
222
- });
223
- it("supports domain logic", () => {
224
- const extract = Extract.deserialize([
225
- { in: 2, out: 3 },
226
- { in: 3, out: 4 },
227
- ]);
228
- expect(extract.flow).toBe(-2);
229
- });
230
- });
231
- describe("of Arrays", () => {
232
- class Money extends Value(Number) {
233
- }
234
- class Matrix extends Value([[Money]]) {
235
- get total() {
236
- let total = 0;
237
- for (const row of this.value) {
238
- for (const cell of row) {
239
- total += cell.serialize();
240
- }
241
- }
242
- return total;
243
- }
244
- }
245
- it("deserializes and reserializes", () => {
246
- const matrix = Matrix.deserialize([
247
- [1, 2],
248
- [3, 4],
249
- ]);
250
- expect(matrix).toBeInstanceOf(Matrix);
251
- expect(matrix.serialize()).toEqual([
252
- [1, 2],
253
- [3, 4],
254
- ]);
255
- });
256
- it("uses values internally", () => {
257
- const matrix = Matrix.deserialize([
258
- [1, 2],
259
- [3, 4],
260
- ]);
261
- const [[cell]] = matrix.value;
262
- expect(cell).toBeInstanceOf(Money);
263
- });
264
- it("supports domain logic", () => {
265
- const matrix = Matrix.deserialize([
266
- [1, 2],
267
- [3, 4],
268
- ]);
269
- expect(matrix.total).toBe(10);
270
- });
271
- });
272
- });
273
- describe.skip("Tuple", () => {
274
- describe("of Primitives", () => {
275
- class Geo extends Value([Number, Number]) {
276
- get total() {
277
- const [lat, lon] = this.value;
278
- return lat + lon;
279
- }
280
- }
281
- it("deserializes and serializes", () => {
282
- const geo = Geo.deserialize([1, 1]);
283
- expect(geo).toBeInstanceOf(Geo);
284
- expect(geo.serialize()).toEqual([1, 1]);
285
- });
286
- it("supports domain logic", () => {
287
- const geo = Geo.deserialize([1, 1]);
288
- expect(geo.total).toBe(2);
289
- });
290
- });
291
- describe("of Values", () => {
292
- class Point extends Value(Number) {
293
- }
294
- class Geo extends Value([Point, Point]) {
295
- get total() {
296
- const [lat, lon] = this.value;
297
- return lat.serialize() + lon.serialize();
298
- }
299
- }
300
- it("deserializes and serializes", () => {
301
- const geo = Geo.deserialize([1, 1]);
302
- expect(geo).toBeInstanceOf(Geo);
303
- expect(geo.serialize()).toEqual([1, 1]);
304
- });
305
- it("uses values internally", () => {
306
- const geo = Geo.deserialize([1, 1]);
307
- const [lat, lon] = geo.value;
308
- expect(lat).toBeInstanceOf(Point);
309
- expect(lon).toBeInstanceOf(Point);
310
- });
311
- it("supports domain logic", () => {
312
- const geo = Geo.deserialize([1, 1]);
313
- expect(geo.total).toBe(2);
314
- });
315
- });
316
- describe("of Objects", () => {
317
- class Money extends Value(Number) {
318
- }
319
- class Transfer extends Value([
320
- { amount: Money },
321
- { message: String },
322
- ]) {
323
- get size() {
324
- const [funds, notice] = this.value;
325
- return funds.amount.serialize() + notice.message.length;
326
- }
327
- }
328
- it("deserializes and serializes", () => {
329
- const transfer = Transfer.deserialize([
330
- { amount: 2 },
331
- { message: "Thanks!" },
332
- ]);
333
- expect(transfer).toBeInstanceOf(Transfer);
334
- expect(transfer.serialize()).toEqual([
335
- { amount: 2 },
336
- { message: "Thanks!" },
337
- ]);
338
- });
339
- it("uses values internally", () => {
340
- const transfer = Transfer.deserialize([
341
- { amount: 2 },
342
- { message: "Thanks!" },
343
- ]);
344
- const [funds] = transfer.value;
345
- expect(funds.amount).toBeInstanceOf(Money);
346
- });
347
- it("supports domain logic", () => {
348
- const transfer = Transfer.deserialize([
349
- { amount: 2 },
350
- { message: "Thanks!" },
351
- ]);
352
- expect(transfer.size).toBe(9);
353
- });
354
- });
355
- });
356
- });
357
- //# sourceMappingURL=index.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":"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"}