@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,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Literal = void 0;
4
+ const _1 = require("./_");
5
+ const Literal = (of, base = _1.Empty) => {
6
+ class $Literal extends base {
7
+ value;
8
+ constructor(value) {
9
+ super();
10
+ this.value = value;
11
+ }
12
+ static $name = "literal";
13
+ serialize() {
14
+ return this.value;
15
+ }
16
+ static deserialize(value) {
17
+ return new this(this.$deserialize(value));
18
+ }
19
+ static $serialize(value) {
20
+ return value;
21
+ }
22
+ static $deserialize(value) {
23
+ return value;
24
+ }
25
+ static $inline;
26
+ }
27
+ return $Literal;
28
+ };
29
+ exports.Literal = Literal;
30
+ //# sourceMappingURL=literal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal.js","sourceRoot":"","sources":["../src/literal.ts"],"names":[],"mappings":";;;AAAA,0BAAgF;AAiBzE,MAAM,OAAO,GAAG,CAIrB,EAAK,EACL,OAAU,QAAY,EACtB,EAAE;IAGF,MAAe,QAAS,SAAS,IAA+B;QAClC;QAA5B,YAA4B,KAAqB;YAC/C,KAAK,EAAE,CAAC;YADkB,UAAK,GAAL,KAAK,CAAgB;QAEjD,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,SAAkB,CAAC;QAElC,SAAS;YACP,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,MAAM,CAAC,WAAW,CAEhB,KAAa;YAEb,OAAO,IAAK,IAAY,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAoB,CAAC;QACxE,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,KAAa;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,KAAa;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,OAAO,CAAiB;;IAWjC,OAAO,QAAmB,CAAC;AAC7B,CAAC,CAAC;AA/CW,QAAA,OAAO,WA+ClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=literal.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal.spec.d.ts","sourceRoot":"","sources":["../src/literal.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const literal_1 = require("./literal");
4
+ const dict_1 = require("./dict");
5
+ const test_1 = require("./test");
6
+ describe("Literal", () => {
7
+ it("class definition", () => {
8
+ class Test extends (0, literal_1.Literal)(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).toBe("a").ok;
21
+ // Serialization
22
+ (0, test_1.ex)(a.serialize()).toBe("a").ok;
23
+ // Instantiation
24
+ const b = new Test("a");
25
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
26
+ // Additional prototype on instantiation
27
+ (0, test_1.ex)(b.test).toBe(true).ok;
28
+ // Inherited prototype on instantiation
29
+ (0, test_1.ex)(b.value).toBe("a").ok;
30
+ });
31
+ it("inline definition", () => {
32
+ class Test extends (0, dict_1.Dict)({ a: (0, literal_1.Literal)(String) }) {
33
+ test = true;
34
+ }
35
+ // Constructor parameters
36
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
37
+ // Deserialization
38
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
39
+ const a = Test.deserialize({ a: "a" });
40
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
41
+ // Additional prototype on deserialization
42
+ (0, test_1.ex)(a.test).toBe(true).ok;
43
+ // Inherited prototype on deserialization
44
+ (0, test_1.ex)(a.a).toBe("a").ok;
45
+ // Serialization
46
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ a: "a" }).ok;
47
+ // Instantiation
48
+ const b = new Test({ a: "a" });
49
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
50
+ // Additional prototype on instantiation
51
+ (0, test_1.ex)(b.test).toBe(true).ok;
52
+ // Inherited prototype on instantiation
53
+ (0, test_1.ex)(b.a).toBe("a").ok;
54
+ });
55
+ it("referenced definition", () => {
56
+ class A extends (0, literal_1.Literal)(String) {
57
+ }
58
+ class Test extends (0, dict_1.Dict)({ a: A }) {
59
+ test = true;
60
+ }
61
+ // Constructor parameters
62
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
63
+ // Deserialization
64
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
65
+ const a = Test.deserialize({ a: "a" });
66
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
67
+ // Preserve reference
68
+ (0, test_1.ex)(a.a).toBeInstanceOf(A);
69
+ (0, test_1.ex)(a.a.value).toBe("a").ok;
70
+ // Serialization
71
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ a: "a" }).ok;
72
+ // Instantiation
73
+ const b = new Test({ a: new A("a") });
74
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
75
+ // Inherited prototype on instantiation
76
+ (0, test_1.ex)(b.a).toBeInstanceOf(A);
77
+ (0, test_1.ex)(b.a.value).toBe("a").ok;
78
+ });
79
+ it("mixin extension", () => {
80
+ const Testable = (shape) => {
81
+ class I extends (0, literal_1.Literal)(shape) {
82
+ deep = true;
83
+ static deep = true;
84
+ }
85
+ return I;
86
+ };
87
+ class Test extends Testable(Number) {
88
+ test = true;
89
+ // @ts-expect-error is not assignable to parameter of type 'true'
90
+ abstract = false;
91
+ }
92
+ // Constructor parameters
93
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
94
+ // Additional static prototype
95
+ (0, test_1.ex)(Test.deep).toBe(true).ok;
96
+ // Deserialization
97
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
98
+ const a = Test.deserialize(1);
99
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
100
+ // Additional prototype on deserialization
101
+ (0, test_1.ex)(a.test).toBe(true).ok;
102
+ (0, test_1.ex)(a.abstract).toBe(false).ok;
103
+ // Extended prototype on deserialization
104
+ (0, test_1.ex)(a.deep).toBe(true).ok;
105
+ // Inherited prototype on deserialization
106
+ (0, test_1.ex)(a.value).toStrictEqual(1).ok;
107
+ // Serialization
108
+ (0, test_1.ex)(a.serialize()).toStrictEqual(1).ok;
109
+ // Instantiation
110
+ const b = new Test(2);
111
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
112
+ // Additional prototype on instantiation
113
+ (0, test_1.ex)(b.test).toBe(true).ok;
114
+ (0, test_1.ex)(b.abstract).toBe(false).ok;
115
+ // Extended prototype on instantiation
116
+ (0, test_1.ex)(b.deep).toBe(true).ok;
117
+ // Inherited prototype on instantiation
118
+ (0, test_1.ex)(b.value).toStrictEqual(2).ok;
119
+ });
120
+ it("mixin supersede", () => {
121
+ const Testable = (shape) => {
122
+ class I {
123
+ deep = true;
124
+ static deep = true;
125
+ }
126
+ return (0, literal_1.Literal)(shape, I);
127
+ };
128
+ class Test extends Testable(Number) {
129
+ test = true;
130
+ // @ts-expect-error is not assignable to parameter of type 'true'
131
+ abstract = false;
132
+ }
133
+ // Constructor parameters
134
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
135
+ // Additional static prototype
136
+ (0, test_1.ex)(Test.deep).toBe(true).ok;
137
+ // Deserialization
138
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
139
+ const a = Test.deserialize(1);
140
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
141
+ // Additional prototype on deserialization
142
+ (0, test_1.ex)(a.test).toBe(true).ok;
143
+ (0, test_1.ex)(a.abstract).toBe(false).ok;
144
+ // Superseded prototype on deserialization
145
+ (0, test_1.ex)(a.deep).toBe(true).ok;
146
+ // Inherited prototype on deserialization
147
+ (0, test_1.ex)(a.value).toBe(1).ok;
148
+ // Serialization
149
+ (0, test_1.ex)(a.serialize()).toStrictEqual(1).ok;
150
+ // Instantiation
151
+ const b = new Test(2);
152
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
153
+ // Additional prototype on instantiation
154
+ (0, test_1.ex)(b.test).toBe(true).ok;
155
+ (0, test_1.ex)(b.abstract).toBe(false).ok;
156
+ // Superseded prototype on instantiation
157
+ (0, test_1.ex)(b.deep).toBe(true).ok;
158
+ // Inherited prototype on instantiation
159
+ (0, test_1.ex)(b.value).toBe(2).ok;
160
+ });
161
+ });
162
+ //# sourceMappingURL=literal.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal.spec.js","sourceRoot":"","sources":["../src/literal.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { Definition, Expand, Shorthand, DefinitionOf, AbstractConstructor, Empty } from "./_";
2
+ type MappingLiteralKey = [
3
+ [
4
+ StringConstructor,
5
+ string
6
+ ],
7
+ [
8
+ NumberConstructor,
9
+ number
10
+ ]
11
+ ];
12
+ type MappingKeyConstructor = MappingLiteralKey[number][0];
13
+ type MappingKeyRuntimeFromConstructor<S extends MappingKeyConstructor> = S extends StringConstructor ? string : number;
14
+ export type MappingConfiguration = [MappingKeyConstructor, Definition | Shorthand] | [Definition | Shorthand];
15
+ type MappingOf<C extends MappingConfiguration> = C extends [
16
+ infer K extends MappingKeyConstructor,
17
+ infer V extends Definition | Shorthand
18
+ ] ? {
19
+ key: K;
20
+ value: DefinitionOf<V>;
21
+ } : C extends [infer V extends Definition | Shorthand] ? {
22
+ key: StringConstructor;
23
+ value: DefinitionOf<V>;
24
+ } : never;
25
+ export declare const Mapping: <C extends MappingConfiguration, B extends AbstractConstructor<{}> = typeof Empty>(config: C, base?: B) => Omit<B, "prototype"> & Omit<(abstract new (value: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, MappingOf<C>["value"]["$inline"]>) => {
26
+ value: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, MappingOf<C>["value"]["$inline"]>;
27
+ serialize(): Expand<Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, ReturnType<MappingOf<C>["value"]["$serialize"]>>>;
28
+ }) & {
29
+ $name: "mapping";
30
+ deserialize<T extends any>(this: T, value: Expand<Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, ReturnType<MappingOf<C>["value"]["$serialize"]>>>): InstanceType<T>;
31
+ $deserialize<T_1 extends any>(this: T_1, value: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, ReturnType<MappingOf<C>["value"]["$serialize"]>>): Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, MappingOf<C>["value"]["$inline"]>;
32
+ $serialize<T_2 extends any>(this: T_2, value: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, MappingOf<C>["value"]["$inline"]>): Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, ReturnType<MappingOf<C>["value"]["$serialize"]>>;
33
+ $inline: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, MappingOf<C>["value"]["$inline"]>;
34
+ }, "prototype"> & (abstract new (value: Expand<Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, MappingOf<C>["value"]["$inline"]>>) => InstanceType<B> & {
35
+ value: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, MappingOf<C>["value"]["$inline"]>;
36
+ serialize(): Expand<Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, ReturnType<MappingOf<C>["value"]["$serialize"]>>>;
37
+ });
38
+ export {};
39
+ //# sourceMappingURL=mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,MAAM,EACN,SAAS,EACT,YAAY,EAEZ,mBAAmB,EACnB,KAAK,EAEN,MAAM,KAAK,CAAC;AAGb,KAAK,iBAAiB,GAAG;IACvB;QAAC,iBAAiB;QAAE,MAAM;KAAC;IAC3B;QAAC,iBAAiB;QAAE,MAAM;KAAC;CAC5B,CAAC;AACF,KAAK,qBAAqB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,KAAK,gCAAgC,CAAC,CAAC,SAAS,qBAAqB,IACnE,CAAC,SAAS,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhD,MAAM,MAAM,oBAAoB,GAC5B,CAAC,qBAAqB,EAAE,UAAU,GAAG,SAAS,CAAC,GAC/C,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;AAE7B,KAAK,SAAS,CAAC,CAAC,SAAS,oBAAoB,IAAI,CAAC,SAAS;IACzD,MAAM,CAAC,SAAS,qBAAqB;IACrC,MAAM,CAAC,SAAS,UAAU,GAAG,SAAS;CACvC,GACG;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;CAAE,GAClC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,UAAU,GAAG,SAAS,CAAC,GAChD;IAAE,GAAG,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;CAAE,GAClD,KAAK,CAAC;AAEZ,eAAO,MAAM,OAAO,6FAIV,CAAC,SACH,CAAC;;;;;qCA4BG,CAAC,kIAEN,aAAa,CAAC,CAAC;;;;;;;EA2CrB,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Mapping = void 0;
4
+ const _1 = require("./_");
5
+ const literal_1 = require("./literal");
6
+ const Mapping = (config, base = _1.Empty) => {
7
+ let [_key, _value] = config;
8
+ if (config.length === 1) {
9
+ _key = (0, literal_1.Literal)(String);
10
+ _value = config[0];
11
+ }
12
+ const { $key, $value } = { $key: _key, $value: _value };
13
+ class $Mapping extends base {
14
+ value;
15
+ constructor(value) {
16
+ super();
17
+ this.value = value;
18
+ }
19
+ static $name = "mapping";
20
+ serialize() {
21
+ return $Mapping.$serialize(this.value);
22
+ }
23
+ static deserialize(value) {
24
+ return new this($Mapping.$deserialize(value));
25
+ }
26
+ static $deserialize(value) {
27
+ const split = Object.entries(value);
28
+ const transform = split.map(([key, child]) => {
29
+ const longhand = (0, _1.Shape)(_value);
30
+ const deserialized = longhand.$deserialize(child);
31
+ return [key, deserialized];
32
+ });
33
+ return Object.fromEntries(transform);
34
+ }
35
+ static $serialize(value) {
36
+ const split = Object.entries(value);
37
+ const transform = split.map(([key, child]) => {
38
+ const longhand = (0, _1.Shape)($value);
39
+ const serialized = longhand.$serialize(child);
40
+ return [key, serialized];
41
+ });
42
+ const merge = Object.fromEntries(transform);
43
+ return merge;
44
+ }
45
+ static $inline;
46
+ }
47
+ return $Mapping;
48
+ };
49
+ exports.Mapping = Mapping;
50
+ //# sourceMappingURL=mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":";;;AAAA,0BAUa;AACb,uCAAoC;AAuB7B,MAAM,OAAO,GAAG,CAIrB,MAAS,EACT,OAAU,QAAY,EACtB,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,GAAG,IAAA,iBAAO,EAAC,MAAM,CAAC,CAAC;QACvB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAQxD,MAAe,QAAS,SAAS,IAA+B;QAC3C;QAAnB,YAAmB,KAAa;YAC9B,KAAK,EAAE,CAAC;YADS,UAAK,GAAL,KAAK,CAAQ;QAEhC,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,SAAkB,CAAC;QAElC,SAAS;YACP,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAQ,CAAC;QAChD,CAAC;QAED,MAAM,CAAC,WAAW,CAEhB,KAAyB;YAEzB,OAAO,IAAK,IAAY,CAAE,QAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAQ,CAAC;QACzE,CAAC;QAED,MAAM,CAAC,YAAY,CAEjB,KAAiB;YAEjB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC3C,MAAM,QAAQ,GAAG,IAAA,QAAK,EAAC,MAAM,CAAQ,CAAC;gBACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAY,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,EAAE,YAAY,CAAU,CAAC;YACtC,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,WAAW,CAAC,SAAS,CAAQ,CAAC;QAC9C,CAAC;QAED,MAAM,CAAC,UAAU,CAEf,KAAa;YAEb,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC3C,MAAM,QAAQ,GAAG,IAAA,QAAK,EAAC,MAAM,CAAQ,CAAC;gBACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAY,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,OAAO,CAAS;;IAWzB,OAAO,QAA0B,CAAC;AACpC,CAAC,CAAC;AA9EW,QAAA,OAAO,WA8ElB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mapping.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.spec.d.ts","sourceRoot":"","sources":["../src/mapping.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const dict_1 = require("./dict");
4
+ const literal_1 = require("./literal");
5
+ const mapping_1 = require("./mapping");
6
+ const test_1 = require("./test");
7
+ describe("Mapping", () => {
8
+ it("class definition, specified key", () => {
9
+ class Test extends (0, mapping_1.Mapping)([String, (0, literal_1.Literal)(Number)]) {
10
+ test = true;
11
+ }
12
+ // Constructor parameters
13
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
14
+ // Deserialization
15
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
16
+ const a = Test.deserialize({ key: 2 });
17
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
18
+ // Additional prototype on deserialization
19
+ (0, test_1.ex)(a.test).toBe(true).ok;
20
+ // Inherited prototype on deserialization
21
+ (0, test_1.ex)(a.value).toStrictEqual({ key: 2 }).ok;
22
+ // Serialization
23
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ key: 2 }).ok;
24
+ // Instantiation
25
+ const b = new Test({ key: 2 });
26
+ (0, test_1.ex)(b).toBeInstanceOf(Test);
27
+ // Additional prototype on instantiation
28
+ (0, test_1.ex)(b.test).toBe(true).ok;
29
+ // Inherited prototype on instantiation
30
+ (0, test_1.ex)(b.value).toStrictEqual({ key: 2 }).ok;
31
+ });
32
+ it("class definition, unspecified key", () => {
33
+ class Test extends (0, mapping_1.Mapping)([(0, literal_1.Literal)(Number)]) {
34
+ test = true;
35
+ }
36
+ // Constructor parameters
37
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
38
+ // Deserialization
39
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
40
+ const a = Test.deserialize({ key: 2 });
41
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
42
+ // Additional prototype on deserialization
43
+ (0, test_1.ex)(a.test).toBe(true).ok;
44
+ // Inherited prototype on deserialization
45
+ (0, test_1.ex)(a.value).toStrictEqual({ key: 2 }).ok;
46
+ // Serialization
47
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ key: 2 }).ok;
48
+ // Instantiation
49
+ const b = new Test({ key: 2 });
50
+ (0, test_1.ex)(b).toBeInstanceOf(Test);
51
+ // Additional prototype on instantiation
52
+ (0, test_1.ex)(b.test).toBe(true).ok;
53
+ // Inherited prototype on instantiation
54
+ (0, test_1.ex)(b.value).toStrictEqual({ key: 2 }).ok;
55
+ });
56
+ it("inlined definition", () => {
57
+ class Test extends (0, dict_1.Dict)({
58
+ longhand: (0, mapping_1.Mapping)([(0, literal_1.Literal)(Number)]),
59
+ shorthand: (0, mapping_1.Mapping)([Number, { nested: String }]),
60
+ }) {
61
+ test = true;
62
+ }
63
+ // Constructor parameters
64
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
65
+ // Deserialization
66
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
67
+ const a = Test.deserialize({
68
+ longhand: { key: 2 },
69
+ shorthand: { 0: { nested: "a" } },
70
+ });
71
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
72
+ // Additional prototype on deserialization
73
+ (0, test_1.ex)(a.test).toBe(true).ok;
74
+ // Inherited prototype on deserialization
75
+ (0, test_1.ex)(a.longhand).toStrictEqual({ key: 2 }).ok;
76
+ (0, test_1.ex)(a.shorthand).toStrictEqual({
77
+ 0: { nested: "a" },
78
+ }).ok;
79
+ // Serialization
80
+ (0, test_1.ex)(a.serialize()).toStrictEqual({
81
+ longhand: { key: 2 },
82
+ shorthand: { 0: { nested: "a" } },
83
+ }).ok;
84
+ // Instantiation
85
+ const b = new Test({
86
+ longhand: { key: 2 },
87
+ shorthand: { 0: { nested: "a" } },
88
+ });
89
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
90
+ // Additional prototype on instantiation
91
+ (0, test_1.ex)(b.test).toBe(true).ok;
92
+ // Inherited prototype on instantiation
93
+ (0, test_1.ex)(b.longhand).toStrictEqual({ key: 2 }).ok;
94
+ (0, test_1.ex)(b.shorthand).toStrictEqual({
95
+ 0: { nested: "a" },
96
+ }).ok;
97
+ });
98
+ it("referenced definition", () => {
99
+ class Reference extends (0, mapping_1.Mapping)([Number]) {
100
+ }
101
+ class Test extends (0, dict_1.Dict)({ reference: Reference }) {
102
+ test = true;
103
+ }
104
+ // Constructor parameters
105
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
106
+ // Deserialization
107
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
108
+ const a = Test.deserialize({ reference: { 0: 1 } });
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
+ // Inherited prototype on deserialization
113
+ (0, test_1.ex)(a.reference).toStrictEqual(new Reference({ 0: 1 })).ok;
114
+ // Serialization
115
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ reference: { 0: 1 } }).ok;
116
+ // Instantiation
117
+ const b = new Test({ reference: new Reference({ 0: 1 }) });
118
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
119
+ // Additional prototype on instantiation
120
+ (0, test_1.ex)(b.test).toBe(true).ok;
121
+ // Inherited prototype on instantiation
122
+ (0, test_1.ex)(b.reference).toStrictEqual(new Reference({ 0: 1 })).ok;
123
+ });
124
+ it("mixin extension", () => {
125
+ const Testable = (config) => {
126
+ class I extends (0, mapping_1.Mapping)(config) {
127
+ deep = true;
128
+ static deep = true;
129
+ }
130
+ return I;
131
+ };
132
+ class Test extends Testable([Number]) {
133
+ test = true;
134
+ // @ts-expect-error is not assignable to parameter of type 'true'
135
+ abstract = false;
136
+ }
137
+ // Constructor parameters
138
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
139
+ // Additional static prototype
140
+ (0, test_1.ex)(Test.deep).toBe(true).ok;
141
+ // Deserialization
142
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
143
+ const a = Test.deserialize({ key: 1 });
144
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
145
+ // Additional prototype on deserialization
146
+ (0, test_1.ex)(a.test).toBe(true).ok;
147
+ (0, test_1.ex)(a.abstract).toBe(false).ok;
148
+ // Extended prototype on deserialization
149
+ (0, test_1.ex)(a.deep).toBe(true).ok;
150
+ // Inherited prototype on deserialization
151
+ (0, test_1.ex)(a.value).toStrictEqual({ key: 1 }).ok;
152
+ // Serialization
153
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ key: 1 }).ok;
154
+ // Instantiation
155
+ const b = new Test({ key: 2 });
156
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
157
+ // Additional prototype on instantiation
158
+ (0, test_1.ex)(b.test).toBe(true).ok;
159
+ (0, test_1.ex)(b.abstract).toBe(false).ok;
160
+ // Extended prototype on instantiation
161
+ (0, test_1.ex)(b.deep).toBe(true).ok;
162
+ // Inherited prototype on instantiation
163
+ (0, test_1.ex)(b.value).toStrictEqual({ key: 2 }).ok;
164
+ });
165
+ it("mixin supersede", () => {
166
+ const Testable = (config) => {
167
+ class I {
168
+ deep = true;
169
+ static deep = true;
170
+ }
171
+ return (0, mapping_1.Mapping)(config, I);
172
+ };
173
+ class Test extends Testable([Number]) {
174
+ test = true;
175
+ // @ts-expect-error is not assignable to parameter of type 'true'
176
+ abstract = false;
177
+ }
178
+ // Constructor parameters
179
+ (0, test_1.ex)(Test).toHaveFirstParam().ok;
180
+ // Additional static prototype
181
+ (0, test_1.ex)(Test.deep).toBe(true).ok;
182
+ // Deserialization
183
+ (0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
184
+ const a = Test.deserialize({ key: 1 });
185
+ (0, test_1.ex)(a).toBeInstanceOf(Test).ok;
186
+ // Additional prototype on deserialization
187
+ (0, test_1.ex)(a.test).toBe(true).ok;
188
+ (0, test_1.ex)(a.abstract).toBe(false).ok;
189
+ // Superseeded prototype on deserialization
190
+ (0, test_1.ex)(a.deep).toBe(true).ok;
191
+ // Inherited prototype on deserialization
192
+ (0, test_1.ex)(a.value).toStrictEqual({ key: 1 }).ok;
193
+ // Serialization
194
+ (0, test_1.ex)(a.serialize()).toStrictEqual({ key: 1 }).ok;
195
+ // Instantiation
196
+ const b = new Test({ key: 2 });
197
+ (0, test_1.ex)(b).toBeInstanceOf(Test).ok;
198
+ // Additional prototype on instantiation
199
+ (0, test_1.ex)(b.test).toBe(true).ok;
200
+ (0, test_1.ex)(b.abstract).toBe(false).ok;
201
+ // Superseeded prototype on instantiation
202
+ (0, test_1.ex)(b.deep).toBe(true).ok;
203
+ // Inherited prototype on instantiation
204
+ (0, test_1.ex)(b.value).toStrictEqual({ key: 2 }).ok;
205
+ });
206
+ });
207
+ //# sourceMappingURL=mapping.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.spec.js","sourceRoot":"","sources":["../src/mapping.spec.ts"],"names":[],"mappings":"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"}