@ddd-ts/shape 0.0.0-alpha2.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.
Files changed (85) hide show
  1. package/dist/_.d.ts +38 -0
  2. package/dist/_.d.ts.map +1 -0
  3. package/dist/_.js +51 -0
  4. package/dist/_.js.map +1 -0
  5. package/dist/choice.d.ts +42 -0
  6. package/dist/choice.d.ts.map +1 -0
  7. package/dist/choice.js +47 -0
  8. package/dist/choice.js.map +1 -0
  9. package/dist/choice.spec.d.ts +2 -0
  10. package/dist/choice.spec.d.ts.map +1 -0
  11. package/dist/choice.spec.js +147 -0
  12. package/dist/choice.spec.js.map +1 -0
  13. package/dist/class.d.ts +21 -0
  14. package/dist/class.d.ts.map +1 -0
  15. package/dist/class.js +30 -0
  16. package/dist/class.js.map +1 -0
  17. package/dist/class.spec.d.ts +2 -0
  18. package/dist/class.spec.d.ts.map +1 -0
  19. package/dist/class.spec.js +39 -0
  20. package/dist/class.spec.js.map +1 -0
  21. package/dist/dict.d.ts +18 -0
  22. package/dist/dict.d.ts.map +1 -0
  23. package/dist/dict.js +44 -0
  24. package/dist/dict.js.map +1 -0
  25. package/dist/dict.spec.d.ts +2 -0
  26. package/dist/dict.spec.d.ts.map +1 -0
  27. package/dist/dict.spec.js +180 -0
  28. package/dist/dict.spec.js.map +1 -0
  29. package/dist/either.d.ts +40 -0
  30. package/dist/either.d.ts.map +1 -0
  31. package/dist/either.js +63 -0
  32. package/dist/either.js.map +1 -0
  33. package/dist/either.spec.d.ts +2 -0
  34. package/dist/either.spec.d.ts.map +1 -0
  35. package/dist/either.spec.js +211 -0
  36. package/dist/either.spec.js.map +1 -0
  37. package/dist/index.d.ts +11 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +27 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/literal.d.ts +40 -0
  42. package/dist/literal.d.ts.map +1 -0
  43. package/dist/literal.js +30 -0
  44. package/dist/literal.js.map +1 -0
  45. package/dist/literal.spec.d.ts +2 -0
  46. package/dist/literal.spec.d.ts.map +1 -0
  47. package/dist/literal.spec.js +162 -0
  48. package/dist/literal.spec.js.map +1 -0
  49. package/dist/mapping.d.ts +39 -0
  50. package/dist/mapping.d.ts.map +1 -0
  51. package/dist/mapping.js +50 -0
  52. package/dist/mapping.js.map +1 -0
  53. package/dist/mapping.spec.d.ts +2 -0
  54. package/dist/mapping.spec.d.ts.map +1 -0
  55. package/dist/mapping.spec.js +207 -0
  56. package/dist/mapping.spec.js.map +1 -0
  57. package/dist/multiple.d.ts +105 -0
  58. package/dist/multiple.d.ts.map +1 -0
  59. package/dist/multiple.js +106 -0
  60. package/dist/multiple.js.map +1 -0
  61. package/dist/multiple.spec.d.ts +2 -0
  62. package/dist/multiple.spec.d.ts.map +1 -0
  63. package/dist/multiple.spec.js +208 -0
  64. package/dist/multiple.spec.js.map +1 -0
  65. package/dist/nothing.d.ts +14 -0
  66. package/dist/nothing.d.ts.map +1 -0
  67. package/dist/nothing.js +19 -0
  68. package/dist/nothing.js.map +1 -0
  69. package/dist/nothing.spec.d.ts +2 -0
  70. package/dist/nothing.spec.d.ts.map +1 -0
  71. package/dist/nothing.spec.js +172 -0
  72. package/dist/nothing.spec.js.map +1 -0
  73. package/dist/optional.d.ts +23 -0
  74. package/dist/optional.d.ts.map +1 -0
  75. package/dist/optional.js +39 -0
  76. package/dist/optional.js.map +1 -0
  77. package/dist/optional.spec.d.ts +2 -0
  78. package/dist/optional.spec.d.ts.map +1 -0
  79. package/dist/optional.spec.js +172 -0
  80. package/dist/optional.spec.js.map +1 -0
  81. package/dist/test.d.ts +36 -0
  82. package/dist/test.d.ts.map +1 -0
  83. package/dist/test.js +46 -0
  84. package/dist/test.js.map +1 -0
  85. package/package.json +19 -0
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const nothing_1 = require("./nothing");
4
+ const dict_1 = require("./dict");
5
+ const test_1 = require("./test");
6
+ describe("Nothing", () => {
7
+ it("class definition", () => {
8
+ class Test extends (0, nothing_1.Nothing)() {
9
+ test = true;
10
+ }
11
+ // Constructor parameters
12
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
13
+ // Deserialization
14
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
15
+ const a = Test.deserialize();
16
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
17
+ // Additional prototype on deserialization
18
+ (0, test_1.ex)(a.test).toBe(true).ok;
19
+ // Inherited prototype on deserialization
20
+ // none
21
+ // Serialization
22
+ (0, test_1.ex)(a.serialize()).toStrictEqual(undefined).ok;
23
+ // Instantiation
24
+ const b = new Test();
25
+ (0, test_1.ex)(b).toBeInstanceOf(Test);
26
+ // Additional prototype on instantiation
27
+ (0, test_1.ex)(b.test).toBe(true).ok;
28
+ // Inherited prototype on instantiation
29
+ // none
30
+ });
31
+ it("inline definition", () => {
32
+ class Test extends (0, dict_1.Dict)({
33
+ longhand: (0, nothing_1.Nothing)(),
34
+ shorthand: undefined,
35
+ }) {
36
+ test = true;
37
+ }
38
+ // Constructor parameters
39
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
40
+ // Deserialization
41
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
42
+ const a = Test.deserialize({ longhand: undefined, shorthand: undefined });
43
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
44
+ // Additional prototype on deserialization
45
+ (0, test_1.ex)(a.test).toBe(true).ok;
46
+ // Inherited prototype on deserialization
47
+ (0, test_1.ex)(a.longhand).toStrictEqual(undefined).ok;
48
+ (0, test_1.ex)(a.shorthand).toStrictEqual(undefined).ok;
49
+ // Serialization
50
+ (0, test_1.ex)(a.serialize()).toStrictEqual({
51
+ longhand: undefined,
52
+ shorthand: undefined,
53
+ }).ok;
54
+ // Instantiation
55
+ const b = new Test({ longhand: undefined, shorthand: undefined });
56
+ (0, test_1.ex)(b).toBeInstanceOf(Test);
57
+ // Additional prototype on instantiation
58
+ (0, test_1.ex)(b.test).toBe(true).ok;
59
+ // Inherited prototype on instantiation
60
+ (0, test_1.ex)(b.longhand).toStrictEqual(undefined).ok;
61
+ (0, test_1.ex)(b.shorthand).toStrictEqual(undefined).ok;
62
+ });
63
+ it("referenced definition", () => {
64
+ class Reference extends (0, nothing_1.Nothing)() {
65
+ }
66
+ class Test extends (0, dict_1.Dict)({ reference: Reference }) {
67
+ test = true;
68
+ }
69
+ // Constructor parameters
70
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
71
+ // Deserialization
72
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
73
+ const a = Test.deserialize({ reference: undefined });
74
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
75
+ // Additional prototype on deserialization
76
+ (0, test_1.ex)(a.test).toBe(true).ok;
77
+ // Inherited prototype on deserialization
78
+ (0, test_1.ex)(a.reference).toStrictEqual(new Reference()).ok;
79
+ // Serialization
80
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ reference: undefined }).ok;
81
+ // Instantiation
82
+ const b = new Test({ reference: new Reference() });
83
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
84
+ // Additional prototype on instantiation
85
+ (0, test_1.ex)(b.test).toBe(true).ok;
86
+ // Inherited prototype on instantiation
87
+ (0, test_1.ex)(b.reference).toStrictEqual(new Reference()).ok;
88
+ });
89
+ it("mixin extension", () => {
90
+ const Testable = () => {
91
+ class I extends (0, nothing_1.Nothing)() {
92
+ deep = true;
93
+ static deep = true;
94
+ }
95
+ return I;
96
+ };
97
+ class Test extends Testable() {
98
+ test = true;
99
+ // @ts-expect-error is not assignable to parameter of type 'true'
100
+ abstract = false;
101
+ }
102
+ // Constructor parameters
103
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
104
+ // Additional static prototype
105
+ (0, test_1.ex)(Test.deep).toBe(true).ok;
106
+ // Deserialization
107
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
108
+ const a = Test.deserialize();
109
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
110
+ // Additional prototype on deserialization
111
+ (0, test_1.ex)(a.test).toBe(true).ok;
112
+ (0, test_1.ex)(a.abstract).toBe(false).ok;
113
+ // Extended prototype on deserialization
114
+ (0, test_1.ex)(a.deep).toBe(true).ok;
115
+ // Inherited prototype on deserialization
116
+ // none
117
+ // Serialization
118
+ (0, test_1.ex)(a.serialize()).toStrictEqual(undefined).ok;
119
+ // Instantiation
120
+ const b = new Test();
121
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
122
+ // Additional prototype on instantiation
123
+ (0, test_1.ex)(b.test).toBe(true).ok;
124
+ (0, test_1.ex)(b.abstract).toBe(false).ok;
125
+ // Extended prototype on instantiation
126
+ (0, test_1.ex)(b.deep).toBe(true).ok;
127
+ // Inherited prototype on instantiation
128
+ // none
129
+ });
130
+ it("mixin supersede", () => {
131
+ const Testable = () => {
132
+ class I {
133
+ deep = true;
134
+ static deep = true;
135
+ }
136
+ return (0, nothing_1.Nothing)(undefined, I);
137
+ };
138
+ class Test extends Testable() {
139
+ test = true;
140
+ // @ts-expect-error is not assignable to parameter of type 'true'
141
+ abstract = false;
142
+ }
143
+ // Constructor parameters
144
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
145
+ // Additional static prototype
146
+ (0, test_1.ex)(Test.deep).toBe(true).ok;
147
+ // Deserialization
148
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
149
+ const a = Test.deserialize();
150
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
151
+ // Additional prototype on deserialization
152
+ (0, test_1.ex)(a.test).toBe(true).ok;
153
+ (0, test_1.ex)(a.abstract).toBe(false).ok;
154
+ // Extended prototype on deserialization
155
+ (0, test_1.ex)(a.deep).toBe(true).ok;
156
+ // Inherited prototype on deserialization
157
+ // none
158
+ // Serialization
159
+ (0, test_1.ex)(a.serialize()).toStrictEqual(undefined).ok;
160
+ // Instantiation
161
+ const b = new Test();
162
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
163
+ // Additional prototype on instantiation
164
+ (0, test_1.ex)(b.test).toBe(true).ok;
165
+ (0, test_1.ex)(b.abstract).toBe(false).ok;
166
+ // Extended prototype on instantiation
167
+ (0, test_1.ex)(b.deep).toBe(true).ok;
168
+ // Inherited prototype on instantiation
169
+ // none
170
+ });
171
+ });
172
+ //# sourceMappingURL=nothing.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nothing.spec.js","sourceRoot":"","sources":["../src/nothing.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Definition, Expand, Shorthand, DefinitionOf, Constructor, AbstractConstructor, Empty } from "./_";
2
+ export type OptionalConfiguration = Definition | Shorthand;
3
+ type Matcher<V> = {
4
+ some: (value: V) => any;
5
+ none: () => any;
6
+ };
7
+ export declare const Optional: <S extends Shorthand, B extends AbstractConstructor<{}> = typeof Empty>(of: S, base?: B) => Omit<B, "prototype"> & Omit<(abstract new (value: Expand<DefinitionOf<S, B>["$inline"]> | undefined) => {
8
+ value: Expand<DefinitionOf<S, B>["$inline"]> | undefined;
9
+ serialize(): Expand<ReturnType<DefinitionOf<S, B>["$serialize"]> | undefined>;
10
+ match<M extends Matcher<Expand<DefinitionOf<S, B>["$inline"]>>>(config: M): ReturnType<M["some"]> | ReturnType<M["none"]>;
11
+ }) & {
12
+ $name: "optional";
13
+ deserialize<T extends Constructor<any, any[]>>(this: T, value: DefinitionOf<S, B>["$inline"] | undefined): InstanceType<T>;
14
+ $deserialize(value: ReturnType<DefinitionOf<S, B>["$serialize"]> | undefined): DefinitionOf<S, B>["$inline"] | undefined;
15
+ $serialize<T_1 extends any>(this: T_1, value: DefinitionOf<S, B>["$inline"] | undefined): ReturnType<DefinitionOf<S, B>["$serialize"]> | undefined;
16
+ $inline: DefinitionOf<S, B>["$inline"] | undefined;
17
+ }, ""> & (abstract new (value: Expand<DefinitionOf<S, B>["$inline"]> | undefined) => InstanceType<B> & {
18
+ value: Expand<DefinitionOf<S, B>["$inline"]> | undefined;
19
+ serialize(): Expand<ReturnType<DefinitionOf<S, B>["$serialize"]> | undefined>;
20
+ match<M extends Matcher<Expand<DefinitionOf<S, B>["$inline"]>>>(config: M): ReturnType<M["some"]> | ReturnType<M["none"]>;
21
+ });
22
+ export {};
23
+ //# sourceMappingURL=optional.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../src/optional.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,SAAS,EACT,YAAY,EAEZ,WAAW,EACX,mBAAmB,EACnB,KAAK,EACN,MAAM,KAAK,CAAC;AAEb,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3D,KAAK,OAAO,CAAC,CAAC,IAAI;IAAE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,QAAQ,8EAIf,CAAC,SACC,CAAC;;;4EAiBK,CAAC,GACR,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;;;yDAQxC,CAAC,qDAEN,aAAa,CAAC,CAAC;;;;;;;4EAXR,CAAC,GACR,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;EA0CnD,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Optional = void 0;
4
+ const _1 = require("./_");
5
+ const Optional = (of, base = _1.Empty) => {
6
+ class $Optional extends base {
7
+ value;
8
+ constructor(value) {
9
+ super();
10
+ this.value = value;
11
+ }
12
+ static $name = "optional";
13
+ serialize() {
14
+ return $Optional.$serialize(this.value);
15
+ }
16
+ match(config) {
17
+ if (this.value === undefined) {
18
+ return config.none();
19
+ }
20
+ return config.some(this.value);
21
+ }
22
+ static deserialize(value) {
23
+ return new this(this.$deserialize(value));
24
+ }
25
+ static $deserialize(value) {
26
+ if (value === undefined) {
27
+ return undefined;
28
+ }
29
+ return (0, _1.Shape)(of).$deserialize(value);
30
+ }
31
+ static $serialize(value) {
32
+ return value ? (0, _1.Shape)(of).$serialize(value) : undefined;
33
+ }
34
+ static $inline;
35
+ }
36
+ return $Optional;
37
+ };
38
+ exports.Optional = Optional;
39
+ //# sourceMappingURL=optional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional.js","sourceRoot":"","sources":["../src/optional.ts"],"names":[],"mappings":";;;AAAA,0BASa;AAMN,MAAM,QAAQ,GAAG,CAItB,EAAK,EACL,OAAU,QAAY,EACtB,EAAE;IAIF,MAAe,SAAU,SAAS,IAA+B;QAC5C;QAAnB,YAAmB,KAAgD;YACjE,KAAK,EAAE,CAAC;YADS,UAAK,GAAL,KAAK,CAA2C;QAEnE,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,UAAmB,CAAC;QAEnC,SAAS;YACP,OAAO,SAAS,CAAC,UAAU,CAAE,IAAY,CAAC,KAAK,CAAQ,CAAC;QAC1D,CAAC;QAED,KAAK,CACH,MAAS;YAET,IAAK,IAAY,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACtC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAE,IAAY,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,CAAC,WAAW,CAEhB,KAAwC;YAExC,OAAO,IAAK,IAAY,CAAE,IAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAQ,CAAC;QACrE,CAAC;QAED,MAAM,CAAC,YAAY,CACjB,KAAuD;YAEvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAQ,IAAA,QAAK,EAAC,EAAE,CAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,CAAC,UAAU,CAEf,KAAwC;YAExC,OAAO,KAAK,CAAC,CAAC,CAAE,IAAA,QAAK,EAAC,EAAE,CAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC;QAED,MAAM,CAAC,OAAO,CAAoC;;IAWpD,OAAO,SAA4B,CAAC;AACtC,CAAC,CAAC;AAjEW,QAAA,QAAQ,YAiEnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=optional.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional.spec.d.ts","sourceRoot":"","sources":["../src/optional.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const optional_1 = require("./optional");
4
+ const dict_1 = require("./dict");
5
+ const test_1 = require("./test");
6
+ describe("Optional", () => {
7
+ it("class definition", () => {
8
+ class Test extends (0, optional_1.Optional)(String) {
9
+ test = true;
10
+ }
11
+ // Constructor parameters
12
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
13
+ // Deserialization
14
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
15
+ const a = Test.deserialize("a");
16
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
17
+ // Additional prototype on deserialization
18
+ (0, test_1.ex)(a.test).toBe(true).ok;
19
+ // Inherited prototype on deserialization
20
+ (0, test_1.ex)(a.value).toStrictEqual("a").ok;
21
+ (0, test_1.ex)(a.match({
22
+ some: (value) => value,
23
+ none: () => "default",
24
+ })).toBe("a").ok;
25
+ // Serialization
26
+ (0, test_1.ex)(a.serialize()).toStrictEqual("a").ok;
27
+ // Instantiation
28
+ const b = new Test(undefined);
29
+ (0, test_1.ex)(b).toBeInstanceOf(Test);
30
+ // Additional prototype on instantiation
31
+ (0, test_1.ex)(b.test).toBe(true).ok;
32
+ // Inherited prototype on instantiation
33
+ (0, test_1.ex)(b.value).toStrictEqual(undefined).ok;
34
+ (0, test_1.ex)(b.match({
35
+ some: (value) => value,
36
+ none: () => "default",
37
+ })).toBe("default").ok;
38
+ });
39
+ it("inline definition", () => {
40
+ class Test extends (0, dict_1.Dict)({ longhand: (0, optional_1.Optional)(String) }) {
41
+ test = true;
42
+ }
43
+ // Constructor parameters
44
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
45
+ // Deserialization
46
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
47
+ const a = Test.deserialize({ longhand: "a" });
48
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
49
+ // Additional prototype on deserialization
50
+ (0, test_1.ex)(a.test).toBe(true).ok;
51
+ // Inherited prototype on deserialization
52
+ (0, test_1.ex)(a.longhand).toStrictEqual("a").ok;
53
+ // Serialization
54
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ longhand: "a" }).ok;
55
+ // Instantiation
56
+ const b = new Test({ longhand: undefined });
57
+ (0, test_1.ex)(b).toBeInstanceOf(Test);
58
+ // Additional prototype on instantiation
59
+ (0, test_1.ex)(b.test).toBe(true).ok;
60
+ // Inherited prototype on instantiation
61
+ (0, test_1.ex)(b.longhand).toStrictEqual(undefined).ok;
62
+ });
63
+ it("referenced definition", () => {
64
+ class Reference extends (0, optional_1.Optional)(String) {
65
+ }
66
+ class Test extends (0, dict_1.Dict)({ reference: Reference }) {
67
+ test = true;
68
+ }
69
+ // Constructor parameters
70
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
71
+ // Deserialization
72
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
73
+ const a = Test.deserialize({ reference: "a" });
74
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
75
+ // Additional prototype on deserialization
76
+ (0, test_1.ex)(a.test).toBe(true).ok;
77
+ // Inherited prototype on deserialization
78
+ (0, test_1.ex)(a.reference).toStrictEqual(new Reference("a")).ok;
79
+ // Serialization
80
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ reference: "a" }).ok;
81
+ // Instantiation
82
+ const b = new Test({ reference: new Reference(undefined) });
83
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
84
+ // Additional prototype on instantiation
85
+ (0, test_1.ex)(b.test).toBe(true).ok;
86
+ // Inherited prototype on instantiation
87
+ (0, test_1.ex)(b.reference).toStrictEqual(new Reference(undefined)).ok;
88
+ });
89
+ it("mixin extension", () => {
90
+ const Testable = (config) => {
91
+ class I extends (0, optional_1.Optional)(config) {
92
+ deep = true;
93
+ static deep = true;
94
+ }
95
+ return I;
96
+ };
97
+ class Test extends Testable(String) {
98
+ test = true;
99
+ // @ts-expect-error is not assignable to parameter of type 'true'
100
+ abstract = false;
101
+ }
102
+ // Constructor parameters
103
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
104
+ // Additional static prototype
105
+ (0, test_1.ex)(Test.deep).toBe(true).ok;
106
+ // Deserialization
107
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
108
+ const a = Test.deserialize("a");
109
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
110
+ // Additional prototype on deserialization
111
+ (0, test_1.ex)(a.test).toBe(true).ok;
112
+ (0, test_1.ex)(a.abstract).toBe(false).ok;
113
+ // Extended prototype on deserialization
114
+ (0, test_1.ex)(a.deep).toBe(true).ok;
115
+ // Inherited prototype on deserialization
116
+ (0, test_1.ex)(a.value).toStrictEqual("a").ok;
117
+ // Serialization
118
+ (0, test_1.ex)(a.serialize()).toStrictEqual("a").ok;
119
+ // Instantiation
120
+ const b = new Test(undefined);
121
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
122
+ // Additional prototype on instantiation
123
+ (0, test_1.ex)(b.test).toBe(true).ok;
124
+ (0, test_1.ex)(b.abstract).toBe(false).ok;
125
+ // Extended prototype on instantiation
126
+ (0, test_1.ex)(b.deep).toBe(true).ok;
127
+ // Inherited prototype on instantiation
128
+ (0, test_1.ex)(b.value).toStrictEqual(undefined).ok;
129
+ });
130
+ it("mixin supersede", () => {
131
+ const Testable = (config) => {
132
+ class I {
133
+ deep = true;
134
+ static deep = true;
135
+ }
136
+ return (0, optional_1.Optional)(config, I);
137
+ };
138
+ class Test extends Testable(String) {
139
+ test = true;
140
+ // @ts-expect-error is not assignable to parameter of type 'true'
141
+ abstract = false;
142
+ }
143
+ // Constructor parameters
144
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
145
+ // Additional static prototype
146
+ (0, test_1.ex)(Test.deep).toBe(true).ok;
147
+ // Deserialization
148
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
149
+ const a = Test.deserialize("a");
150
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
151
+ // Additional prototype on deserialization
152
+ (0, test_1.ex)(a.test).toBe(true).ok;
153
+ (0, test_1.ex)(a.abstract).toBe(false).ok;
154
+ // Extended prototype on deserialization
155
+ (0, test_1.ex)(a.deep).toBe(true).ok;
156
+ // Inherited prototype on deserialization
157
+ (0, test_1.ex)(a.value).toStrictEqual("a").ok;
158
+ // Serialization
159
+ (0, test_1.ex)(a.serialize()).toStrictEqual("a").ok;
160
+ // Instantiation
161
+ const b = new Test(undefined);
162
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
163
+ // Additional prototype on instantiation
164
+ (0, test_1.ex)(b.test).toBe(true).ok;
165
+ (0, test_1.ex)(b.abstract).toBe(false).ok;
166
+ // Extended prototype on instantiation
167
+ (0, test_1.ex)(b.deep).toBe(true).ok;
168
+ // Inherited prototype on instantiation
169
+ (0, test_1.ex)(b.value).toStrictEqual(undefined).ok;
170
+ });
171
+ });
172
+ //# sourceMappingURL=optional.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional.spec.js","sourceRoot":"","sources":["../src/optional.spec.ts"],"names":[],"mappings":"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"}
package/dist/test.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ import { Constructor } from "./_";
2
+ type IfEquals<T, U, Y = unknown, N = never> = (<G>() => G extends T ? 1 : 2) extends <G>() => G extends U ? 1 : 2 ? Y : N;
3
+ export type Equals<X, Y> = IfEquals<X, Y, true, false>;
4
+ export declare function ex<Received>(received: Received): {
5
+ toBe<Expected>(expected: Expected): IfEquals<Received, Expected, true, false> extends true ? {
6
+ ok: true;
7
+ } : {
8
+ expected: Expected;
9
+ received: Received;
10
+ };
11
+ toStrictEqual<Expected_1>(expected: Expected_1): IfEquals<Received, Expected_1, true, false> extends true ? {
12
+ ok: true;
13
+ } : {
14
+ expected: Expected_1;
15
+ received: Received;
16
+ };
17
+ toBeInstanceOf<Expected_2 extends Constructor<any, any[]>>(expected: Expected_2): IfEquals<Received, InstanceType<Expected_2>, true, false> extends true ? {
18
+ ok: true;
19
+ } : {
20
+ expected: InstanceType<Expected_2>;
21
+ received: Received;
22
+ };
23
+ toHaveFirstParam<Expected_3>(): Received extends (first: infer P, ...rest: any[]) => any ? IfEquals<P, Expected_3, true, false> extends true ? {
24
+ ok: true;
25
+ } : {
26
+ expected: Expected_3;
27
+ received: P;
28
+ } : Received extends Constructor<any, [infer P_1, ...any[]]> ? IfEquals<P_1, Expected_3, true, false> extends true ? {
29
+ ok: true;
30
+ } : {
31
+ expected: Expected_3;
32
+ received: P_1;
33
+ } : "not a function or constructor";
34
+ };
35
+ export {};
36
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAU,MAAM,KAAK,CAAC;AAE1C,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAC/D,CAAC,GACD,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GACvC,CAAC,GACD,CAAC,CAAC;AAEN,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAgJvD,wBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ;6BAG/B,QAAQ;YAEV,IAAI;;kBACE,QAAQ;kBAAY,QAAQ;;;YAWlC,IAAI;;;kBACsB,QAAQ;;;YAWlC,IAAI;;;kBACoC,QAAQ;;+EAU/C,GAAG,EAAE,KACX,GAAG;YAEI,IAAI;;;;;YAIF,IAAI;;;;;EAMrB"}
package/dist/test.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ex = void 0;
4
+ const popStackTrace = (error) => {
5
+ const lines = error.stack.split("\n");
6
+ const at = lines.findIndex((line) => line.includes("at"));
7
+ lines.splice(at, 1);
8
+ error.stack = lines.join("\n");
9
+ return error;
10
+ };
11
+ function ex(received) {
12
+ return {
13
+ toBe(expected) {
14
+ try {
15
+ expect(received).toBe(expected);
16
+ }
17
+ catch (error) {
18
+ throw popStackTrace(error);
19
+ }
20
+ return { ok: true };
21
+ },
22
+ toStrictEqual(expected) {
23
+ try {
24
+ expect(received).toStrictEqual(expected);
25
+ }
26
+ catch (error) {
27
+ throw popStackTrace(error);
28
+ }
29
+ return { ok: true };
30
+ },
31
+ toBeInstanceOf(expected) {
32
+ try {
33
+ expect(received).toBeInstanceOf(expected);
34
+ }
35
+ catch (error) {
36
+ throw popStackTrace(error);
37
+ }
38
+ return { ok: true };
39
+ },
40
+ toHaveFirstParam() {
41
+ return { ok: true };
42
+ },
43
+ };
44
+ }
45
+ exports.ex = ex;
46
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;AAgJA,MAAM,aAAa,GAAG,CAAC,KAAU,EAAE,EAAE;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;IAClD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,SAAgB,EAAE,CAAW,QAAkB;IAC7C,OAAO;QACL,IAAI,CACF,QAAkB;YAIlB,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAS,CAAC;QAC7B,CAAC;QACD,aAAa,CACX,QAAkB;YAIlB,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAS,CAAC;QAC7B,CAAC;QACD,cAAc,CACZ,QAAkB;YAIlB,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAS,CAAC;QAC7B,CAAC;QACD,gBAAgB;YAYd,OAAO,EAAE,EAAE,EAAE,IAAI,EAAS,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC;AArDD,gBAqDC"}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@ddd-ts/shape",
3
+ "version": "0.0.0-alpha2.1",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "license": "MIT",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "test": "jest --config node_modules/@ddd-ts/tools/jest.config.ts"
10
+ },
11
+ "dependencies": {
12
+ "@ddd-ts/traits": "0.0.0-alpha2.1"
13
+ },
14
+ "devDependencies": {
15
+ "@ddd-ts/tools": "0.0.0-alpha2.1",
16
+ "@ddd-ts/types": "0.0.0-alpha2.1",
17
+ "@types/jest": "^29.5.1"
18
+ }
19
+ }