@ddd-ts/shape 0.0.0-feat.freeze-symbol.2220f12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/enum.d.ts ADDED
@@ -0,0 +1,25 @@
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
@@ -0,0 +1 @@
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 ADDED
@@ -0,0 +1,37 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=enum.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.spec.d.ts","sourceRoot":"","sources":["../src/enum.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,94 @@
1
+ import { Trait } from "@ddd-ts/traits";
2
+ export { Enum } from './enum';
3
+ type Constructor<T extends any = any> = new (...args: any[]) => T;
4
+ export type ShapeConstructor<T extends any = any> = Constructor<{
5
+ serialize(): T;
6
+ }> & {
7
+ deserialize(serialized: any): T;
8
+ };
9
+ type PrimitiveShape = NumberConstructor | StringConstructor | BooleanConstructor | DateConstructor | BigIntConstructor;
10
+ type PrimitiveShapeToPrimitive<T extends PrimitiveShape> = T extends NumberConstructor ? number : T extends BigIntConstructor ? bigint : T extends StringConstructor ? string : T extends BooleanConstructor ? boolean : T extends DateConstructor ? Date : never;
11
+ export type SerializedShape<S> = S extends PrimitiveShape ? PrimitiveShapeToPrimitive<S> : S extends {
12
+ optional: infer U;
13
+ } ? SerializedShape<U> | undefined : S extends ShapeConstructor ? ReturnType<InstanceType<S>['serialize']> : S extends Array<infer U> ? Array<SerializedShape<U>> : S extends readonly [...any[]] ? {
14
+ [K in keyof S]: SerializedShape<S[K]>;
15
+ } : S extends Record<string, any> ? {
16
+ [K in keyof S]: SerializedShape<S[K]>;
17
+ } : any;
18
+ export type RuntimeShape<S> = S extends PrimitiveShape ? PrimitiveShapeToPrimitive<S> : S extends {
19
+ optional: infer U;
20
+ } ? RuntimeShape<U> | undefined : S extends Constructor ? InstanceType<S> : S extends Array<infer U> ? Array<RuntimeShape<U>> : S extends readonly [...any[]] ? {
21
+ [K in keyof S]: RuntimeShape<S[K]>;
22
+ } : S extends Record<string, any> ? {
23
+ [K in keyof S]: RuntimeShape<S[K]>;
24
+ } : never;
25
+ export declare const Shaped: <S>(shape: S) => {
26
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<any, {}>) => ((abstract new (props: RuntimeShape<S>) => {
27
+ serialize(): SerializedShape<S>;
28
+ }) & {
29
+ shape: S;
30
+ deserialize<T extends Constructor<any>>(this: T, serialized: SerializedShape<S>): InstanceType<T>;
31
+ }) & (new (props: RuntimeShape<S>) => {
32
+ serialize(): SerializedShape<S>;
33
+ } & MergedProps<S>);
34
+ superTraits: Trait<any>[];
35
+ symbol: symbol;
36
+ };
37
+ type MergedProps<S> = S extends Constructor & {
38
+ shape: any;
39
+ } ? {
40
+ value: InstanceType<S>;
41
+ } : S extends {
42
+ optional: infer U extends Constructor & {
43
+ shape: any;
44
+ };
45
+ } ? {
46
+ value: InstanceType<U> | undefined;
47
+ } : S extends PrimitiveShape ? {
48
+ value: RuntimeShape<S>;
49
+ } : S extends {
50
+ optional: infer U extends PrimitiveShape;
51
+ } ? {
52
+ value: RuntimeShape<U> | undefined;
53
+ } : S extends Array<any> ? {
54
+ value: RuntimeShape<S>;
55
+ } : S extends {
56
+ optional: infer U extends Array<any>;
57
+ } ? {
58
+ value: RuntimeShape<U> | undefined;
59
+ } : S extends readonly [...any[]] ? {
60
+ value: RuntimeShape<S>;
61
+ } : S extends {
62
+ optional: infer U extends readonly [...any[]];
63
+ } ? {
64
+ value: RuntimeShape<U> | undefined;
65
+ } : S extends {
66
+ optional: infer U;
67
+ } ? {
68
+ value: RuntimeShape<U> | undefined;
69
+ } : RuntimeShape<S>;
70
+ export declare const Shape: <S>(shape: S) => (new (param: RuntimeShape<S> extends {} ? import("@ddd-ts/traits").UnionToIntersection<{} & RuntimeShape<S>> : RuntimeShape<S>) => import("@ddd-ts/traits").UnionToIntersection<{
71
+ serialize(): SerializedShape<S>;
72
+ } & MergedProps<S>>) & {
73
+ prototype: any;
74
+ shape: S;
75
+ deserialize: <T extends Constructor<any>>(this: T, serialized: SerializedShape<S>) => InstanceType<T>;
76
+ } & {
77
+ __traits__: [{
78
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<any, {}>) => ((abstract new (props: RuntimeShape<S>) => {
79
+ serialize(): SerializedShape<S>;
80
+ }) & {
81
+ shape: S;
82
+ deserialize<T extends Constructor<any>>(this: T, serialized: SerializedShape<S>): InstanceType<T>;
83
+ }) & (new (props: RuntimeShape<S>) => {
84
+ serialize(): SerializedShape<S>;
85
+ } & MergedProps<S>);
86
+ superTraits: Trait<any>[];
87
+ symbol: symbol;
88
+ }];
89
+ __traits_props__: RuntimeShape<S> extends {} ? import("@ddd-ts/traits").UnionToIntersection<{} & RuntimeShape<S>> : RuntimeShape<S>;
90
+ };
91
+ export declare const Optional: <S>(shape: S) => {
92
+ optional: S;
93
+ };
94
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Optional = exports.Shape = exports.Shaped = exports.Enum = void 0;
4
+ const traits_1 = require("@ddd-ts/traits");
5
+ var enum_1 = require("./enum");
6
+ Object.defineProperty(exports, "Enum", { enumerable: true, get: function () { return enum_1.Enum; } });
7
+ function serialize(shape, runtime) {
8
+ if (shape === Number) {
9
+ shape;
10
+ return runtime;
11
+ }
12
+ if (shape === Boolean) {
13
+ return runtime;
14
+ }
15
+ if (shape === String) {
16
+ return runtime;
17
+ }
18
+ if (shape === BigInt) {
19
+ return runtime;
20
+ }
21
+ if (shape === Date) {
22
+ return runtime;
23
+ }
24
+ if ("optional" in shape) {
25
+ if (runtime === undefined) {
26
+ return undefined;
27
+ }
28
+ return serialize(shape.optional, runtime);
29
+ }
30
+ if ("serialize" in runtime) {
31
+ return runtime.serialize();
32
+ }
33
+ if (Array.isArray(shape)) {
34
+ if (shape.length === 1) {
35
+ return runtime.map((element) => serialize(shape[0], element));
36
+ }
37
+ throw new Error("handle tuples");
38
+ }
39
+ const serialized = {};
40
+ for (const key in shape) {
41
+ const subshape = shape[key];
42
+ serialized[key] = serialize(subshape, runtime[key]);
43
+ }
44
+ return serialized;
45
+ }
46
+ function deserialize(shape, serialized) {
47
+ if (shape === Number) {
48
+ return serialized;
49
+ }
50
+ if (shape === Boolean) {
51
+ return serialized;
52
+ }
53
+ if (shape === String) {
54
+ return serialized;
55
+ }
56
+ if (shape === BigInt) {
57
+ return serialized;
58
+ }
59
+ if (shape === Date) {
60
+ return new Date(serialized);
61
+ }
62
+ if ("optional" in shape) {
63
+ if (serialized === undefined) {
64
+ return undefined;
65
+ }
66
+ return deserialize(shape.optional, serialized);
67
+ }
68
+ if ("deserialize" in shape) {
69
+ return shape.deserialize(serialized);
70
+ }
71
+ if (Array.isArray(shape)) {
72
+ if (shape.length === 1) {
73
+ return serialized.map((element) => deserialize(shape[0], element));
74
+ }
75
+ throw new Error("handle tuples");
76
+ }
77
+ const deserialized = {};
78
+ for (const key in shape) {
79
+ const subshape = shape[key];
80
+ deserialized[key] = deserialize(subshape, serialized[key]);
81
+ }
82
+ return deserialized;
83
+ }
84
+ function isNested(shape) {
85
+ const isPrimitive = shape === Number ||
86
+ shape === Boolean ||
87
+ shape === String ||
88
+ shape === Date ||
89
+ shape === BigInt;
90
+ if ("optional" in shape) {
91
+ return true;
92
+ }
93
+ if (isPrimitive)
94
+ return true;
95
+ if (Array.isArray(shape)) {
96
+ return true;
97
+ }
98
+ const isWrappingPrimitive = shape?.shape ? isNested(shape.shape) : false;
99
+ return isWrappingPrimitive;
100
+ }
101
+ const Shaped = (shape) => (0, traits_1.Trait)((base) => {
102
+ const nested = isNested(shape);
103
+ class Intermediate extends base {
104
+ static shape = shape;
105
+ constructor(props) {
106
+ super(props);
107
+ if (nested) {
108
+ this.value = props;
109
+ }
110
+ else {
111
+ Object.assign(this, props);
112
+ }
113
+ }
114
+ serialize() {
115
+ const { serialize: _, ...props } = this;
116
+ return serialize(shape, nested ? this.value : props);
117
+ }
118
+ static deserialize(serialized) {
119
+ return new this(deserialize(shape, serialized));
120
+ }
121
+ }
122
+ return Intermediate;
123
+ });
124
+ exports.Shaped = Shaped;
125
+ const Shape = (shape) => (0, traits_1.Derive)((0, exports.Shaped)(shape));
126
+ exports.Shape = Shape;
127
+ const Optional = (shape) => ({ optional: shape });
128
+ exports.Optional = Optional;
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.d.ts","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,357 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "@ddd-ts/shape",
3
+ "version": "0.0.0-feat.freeze-symbol.2220f12",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "license": "MIT",
7
+ "scripts": {
8
+ "build": "builder",
9
+ "test": "test-runner"
10
+ },
11
+ "dependencies": {
12
+ "@ddd-ts/traits": "*"
13
+ },
14
+ "devDependencies": {
15
+ "@ddd-ts/dev": "*",
16
+ "@ddd-ts/types": "*"
17
+ }
18
+ }