@ddd-ts/shape 0.0.35 → 0.0.37
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 +15 -6
- package/dist/_.d.ts +0 -39
- package/dist/_.d.ts.map +0 -1
- package/dist/_.js +0 -55
- package/dist/_.js.map +0 -1
- package/dist/addons/microsecond-timestamp.d.ts +0 -22
- package/dist/addons/microsecond-timestamp.d.ts.map +0 -1
- package/dist/addons/microsecond-timestamp.js +0 -73
- package/dist/addons/microsecond-timestamp.js.map +0 -1
- package/dist/choice.d.ts +0 -30
- package/dist/choice.d.ts.map +0 -1
- package/dist/choice.js +0 -49
- package/dist/choice.js.map +0 -1
- package/dist/choice.spec.d.ts +0 -2
- package/dist/choice.spec.d.ts.map +0 -1
- package/dist/choice.spec.js +0 -147
- package/dist/choice.spec.js.map +0 -1
- package/dist/class.d.ts +0 -23
- package/dist/class.d.ts.map +0 -1
- package/dist/class.js +0 -31
- package/dist/class.js.map +0 -1
- package/dist/class.spec.d.ts +0 -2
- package/dist/class.spec.d.ts.map +0 -1
- package/dist/class.spec.js +0 -39
- package/dist/class.spec.js.map +0 -1
- package/dist/dict.d.ts +0 -43
- package/dist/dict.d.ts.map +0 -1
- package/dist/dict.js +0 -47
- package/dist/dict.js.map +0 -1
- package/dist/dict.spec.d.ts +0 -2
- package/dist/dict.spec.d.ts.map +0 -1
- package/dist/dict.spec.js +0 -180
- package/dist/dict.spec.js.map +0 -1
- package/dist/discriminated-union.d.ts +0 -74
- package/dist/discriminated-union.d.ts.map +0 -1
- package/dist/discriminated-union.js +0 -97
- package/dist/discriminated-union.js.map +0 -1
- package/dist/discriminated-union.spec.d.ts +0 -2
- package/dist/discriminated-union.spec.d.ts.map +0 -1
- package/dist/discriminated-union.spec.js +0 -262
- package/dist/discriminated-union.spec.js.map +0 -1
- package/dist/either.d.ts +0 -84
- package/dist/either.d.ts.map +0 -1
- package/dist/either.js +0 -62
- package/dist/either.js.map +0 -1
- package/dist/either.spec.d.ts +0 -2
- package/dist/either.spec.d.ts.map +0 -1
- package/dist/either.spec.js +0 -232
- package/dist/either.spec.js.map +0 -1
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -30
- package/dist/index.js.map +0 -1
- package/dist/literal.d.ts +0 -15
- package/dist/literal.d.ts.map +0 -1
- package/dist/literal.js +0 -27
- package/dist/literal.js.map +0 -1
- package/dist/literal.spec.d.ts +0 -2
- package/dist/literal.spec.d.ts.map +0 -1
- package/dist/literal.spec.js +0 -162
- package/dist/literal.spec.js.map +0 -1
- package/dist/mapping.d.ts +0 -43
- package/dist/mapping.d.ts.map +0 -1
- package/dist/mapping.js +0 -50
- package/dist/mapping.js.map +0 -1
- package/dist/mapping.spec.d.ts +0 -2
- package/dist/mapping.spec.d.ts.map +0 -1
- package/dist/mapping.spec.js +0 -207
- package/dist/mapping.spec.js.map +0 -1
- package/dist/multiple.d.ts +0 -20
- package/dist/multiple.d.ts.map +0 -1
- package/dist/multiple.js +0 -120
- package/dist/multiple.js.map +0 -1
- package/dist/multiple.spec.d.ts +0 -2
- package/dist/multiple.spec.d.ts.map +0 -1
- package/dist/multiple.spec.js +0 -207
- package/dist/multiple.spec.js.map +0 -1
- package/dist/nothing.d.ts +0 -14
- package/dist/nothing.d.ts.map +0 -1
- package/dist/nothing.js +0 -19
- package/dist/nothing.js.map +0 -1
- package/dist/nothing.spec.d.ts +0 -2
- package/dist/nothing.spec.d.ts.map +0 -1
- package/dist/nothing.spec.js +0 -172
- package/dist/nothing.spec.js.map +0 -1
- package/dist/optional.d.ts +0 -26
- package/dist/optional.d.ts.map +0 -1
- package/dist/optional.js +0 -41
- package/dist/optional.js.map +0 -1
- package/dist/optional.spec.d.ts +0 -2
- package/dist/optional.spec.d.ts.map +0 -1
- package/dist/optional.spec.js +0 -172
- package/dist/optional.spec.js.map +0 -1
- package/dist/primitive.d.ts +0 -38
- package/dist/primitive.d.ts.map +0 -1
- package/dist/primitive.js +0 -33
- package/dist/primitive.js.map +0 -1
- package/dist/primitive.spec.d.ts +0 -2
- package/dist/primitive.spec.d.ts.map +0 -1
- package/dist/primitive.spec.js +0 -162
- package/dist/primitive.spec.js.map +0 -1
- package/dist/test.d.ts +0 -36
- package/dist/test.d.ts.map +0 -1
- package/dist/test.js +0 -45
- package/dist/test.js.map +0 -1
package/dist/either.spec.js
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const either_1 = require("./either");
|
|
4
|
-
const dict_1 = require("./dict");
|
|
5
|
-
const test_1 = require("./test");
|
|
6
|
-
const _1 = require("./_");
|
|
7
|
-
describe("Either", () => {
|
|
8
|
-
it("class definition with two arguments", () => {
|
|
9
|
-
class A extends (0, _1.Shape)({ value: Number }) {
|
|
10
|
-
}
|
|
11
|
-
class B extends (0, _1.Shape)({ value: String }) {
|
|
12
|
-
}
|
|
13
|
-
class Test extends (0, either_1.Either)({ A, B }) {
|
|
14
|
-
test = true;
|
|
15
|
-
}
|
|
16
|
-
// Constructor parameters
|
|
17
|
-
(0, test_1.ex)(Test).toHaveFirstParam().ok;
|
|
18
|
-
// Deserialization
|
|
19
|
-
(0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
|
|
20
|
-
const a = Test.deserialize({ _key: "A", value: 1 });
|
|
21
|
-
(0, test_1.ex)(a).toBeInstanceOf(Test).ok;
|
|
22
|
-
// Additional prototype
|
|
23
|
-
(0, test_1.ex)(a.test).toBe(true).ok;
|
|
24
|
-
// Inherited prototype on deserialization
|
|
25
|
-
(0, test_1.ex)(a.value).toStrictEqual(new A({ value: 1 })).ok;
|
|
26
|
-
// Serialization
|
|
27
|
-
(0, test_1.ex)(a.serialize()).toStrictEqual({ _key: "A", value: 1 }).ok;
|
|
28
|
-
// Instantiation
|
|
29
|
-
const b = new Test(new B({ value: "1" }));
|
|
30
|
-
(0, test_1.ex)(b).toBeInstanceOf(Test).ok;
|
|
31
|
-
// Inherited prototype on instantiation
|
|
32
|
-
(0, test_1.ex)(b.value).toStrictEqual(new B({ value: "1" })).ok;
|
|
33
|
-
});
|
|
34
|
-
it("class definition with constructors", () => {
|
|
35
|
-
class A extends (0, dict_1.Dict)({ a: String }) {
|
|
36
|
-
}
|
|
37
|
-
class B {
|
|
38
|
-
a;
|
|
39
|
-
constructor({ a }) {
|
|
40
|
-
Object.assign(this, { a });
|
|
41
|
-
}
|
|
42
|
-
static deserialize({ a }) {
|
|
43
|
-
return new B({ a });
|
|
44
|
-
}
|
|
45
|
-
serialize() {
|
|
46
|
-
return { a: this.a };
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
class Test extends (0, either_1.Either)({ A, B }) {
|
|
50
|
-
test = true;
|
|
51
|
-
}
|
|
52
|
-
// Constructor parameters
|
|
53
|
-
(0, test_1.ex)(Test).toHaveFirstParam().ok;
|
|
54
|
-
// Deserialization
|
|
55
|
-
(0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
|
|
56
|
-
const a = Test.deserialize({ _key: "A", a: "test" });
|
|
57
|
-
(0, test_1.ex)(a).toBeInstanceOf(Test).ok;
|
|
58
|
-
const b = Test.deserialize({ _key: "B", a: "test" });
|
|
59
|
-
(0, test_1.ex)(b).toBeInstanceOf(Test).ok;
|
|
60
|
-
// Additional prototype
|
|
61
|
-
(0, test_1.ex)(a.match({
|
|
62
|
-
A: () => true,
|
|
63
|
-
B: () => false,
|
|
64
|
-
})).toBe(true).ok;
|
|
65
|
-
(0, test_1.ex)(a.match({
|
|
66
|
-
_: () => true,
|
|
67
|
-
})).toBe(true).ok;
|
|
68
|
-
(0, test_1.ex)(a.match({
|
|
69
|
-
B: () => true,
|
|
70
|
-
}, () => false)).toBe(false).ok;
|
|
71
|
-
(0, test_1.ex)(a.test).toBe(true).ok;
|
|
72
|
-
// Inherited prototype on deserialization
|
|
73
|
-
(0, test_1.ex)(a.value).toBeInstanceOf(A).ok;
|
|
74
|
-
(0, test_1.ex)(b.value).toBeInstanceOf(B).ok;
|
|
75
|
-
// Serialization
|
|
76
|
-
(0, test_1.ex)(a.serialize()).toStrictEqual({ _key: "A", a: "test" }).ok;
|
|
77
|
-
(0, test_1.ex)(b.serialize()).toStrictEqual({ _key: "B", a: "test" }).ok;
|
|
78
|
-
// Instantiation
|
|
79
|
-
const c = new Test(new A({ a: "test" }));
|
|
80
|
-
(0, test_1.ex)(c).toBeInstanceOf(Test).ok;
|
|
81
|
-
const d = new Test(new B({ a: "test" }));
|
|
82
|
-
(0, test_1.ex)(d).toBeInstanceOf(Test).ok;
|
|
83
|
-
// Inherited prototype
|
|
84
|
-
(0, test_1.ex)(c.value).toBeInstanceOf(A).ok;
|
|
85
|
-
(0, test_1.ex)(c.value.a).toBe("test").ok;
|
|
86
|
-
(0, test_1.ex)(d.value).toBeInstanceOf(B).ok;
|
|
87
|
-
(0, test_1.ex)(d.value.a).toBe("test").ok;
|
|
88
|
-
});
|
|
89
|
-
it("inline definition", () => {
|
|
90
|
-
class A extends (0, _1.Shape)({ value: Number }) {
|
|
91
|
-
}
|
|
92
|
-
class B extends (0, _1.Shape)({ value: String }) {
|
|
93
|
-
}
|
|
94
|
-
class Test extends (0, dict_1.Dict)({ nested: (0, either_1.Either)({ A, B }) }) {
|
|
95
|
-
}
|
|
96
|
-
// Constructor parameters
|
|
97
|
-
(0, test_1.ex)(Test).toHaveFirstParam().ok;
|
|
98
|
-
// Deserialization
|
|
99
|
-
(0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
|
|
100
|
-
const a = Test.deserialize({ nested: { _key: "A", value: 1 } });
|
|
101
|
-
(0, test_1.ex)(a).toBeInstanceOf(Test).ok;
|
|
102
|
-
// Inherited prototype on deserialization
|
|
103
|
-
(0, test_1.ex)(a.nested).toStrictEqual(new A({ value: 1 })).ok;
|
|
104
|
-
// Serialization
|
|
105
|
-
(0, test_1.ex)(a.serialize()).toStrictEqual({ nested: { _key: "A", value: 1 } })
|
|
106
|
-
.ok;
|
|
107
|
-
// Instantiation
|
|
108
|
-
const b = new Test({ nested: new B({ value: "1" }) });
|
|
109
|
-
(0, test_1.ex)(b).toBeInstanceOf(Test).ok;
|
|
110
|
-
// Inherited prototype on instantiation
|
|
111
|
-
(0, test_1.ex)(b.nested).toStrictEqual(new B({ value: "1" })).ok;
|
|
112
|
-
});
|
|
113
|
-
it("referenced definition", () => {
|
|
114
|
-
class B extends (0, _1.Shape)({ value: Number }) {
|
|
115
|
-
}
|
|
116
|
-
class C extends (0, _1.Shape)({ value: String }) {
|
|
117
|
-
}
|
|
118
|
-
class A extends (0, either_1.Either)({ B, C }) {
|
|
119
|
-
}
|
|
120
|
-
class Test extends (0, dict_1.Dict)({ nested: A }) {
|
|
121
|
-
}
|
|
122
|
-
// Constructor parameters
|
|
123
|
-
(0, test_1.ex)(Test).toHaveFirstParam().ok;
|
|
124
|
-
// Deserialization
|
|
125
|
-
(0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
|
|
126
|
-
const a = Test.deserialize({ nested: { _key: "B", "value": 1 } });
|
|
127
|
-
(0, test_1.ex)(a).toBeInstanceOf(Test).ok;
|
|
128
|
-
// Inherited prototype on deserialization
|
|
129
|
-
(0, test_1.ex)(a.nested).toBeInstanceOf(A).ok;
|
|
130
|
-
(0, test_1.ex)(a.nested.value).toStrictEqual(new B({ value: 1 })).ok;
|
|
131
|
-
// Serialization
|
|
132
|
-
(0, test_1.ex)(a.serialize()).toStrictEqual({ nested: { _key: "B", value: 1 } })
|
|
133
|
-
.ok;
|
|
134
|
-
// Instantiation
|
|
135
|
-
const b = new Test({ nested: new A(new C({ value: "1" })) });
|
|
136
|
-
(0, test_1.ex)(b).toBeInstanceOf(Test).ok;
|
|
137
|
-
// Inherited prototype on instantiation
|
|
138
|
-
(0, test_1.ex)(b.nested.value).toStrictEqual(new C({ value: "1" })).ok;
|
|
139
|
-
});
|
|
140
|
-
it("mixin extension", () => {
|
|
141
|
-
const Mixin = (either) => {
|
|
142
|
-
class Mix extends (0, either_1.Either)(either) {
|
|
143
|
-
deep = true;
|
|
144
|
-
static deep = true;
|
|
145
|
-
}
|
|
146
|
-
return Mix;
|
|
147
|
-
};
|
|
148
|
-
class A extends (0, _1.Shape)({ value: Number }) {
|
|
149
|
-
}
|
|
150
|
-
class B extends (0, _1.Shape)({ value: String }) {
|
|
151
|
-
}
|
|
152
|
-
class Test extends Mixin({ A, B }) {
|
|
153
|
-
test = true;
|
|
154
|
-
// @ts-expect-error is not assignable to parameter of type 'true'
|
|
155
|
-
abstract = false;
|
|
156
|
-
}
|
|
157
|
-
// Constructor parameters
|
|
158
|
-
(0, test_1.ex)(Test).toHaveFirstParam().ok;
|
|
159
|
-
// Additional static prototype
|
|
160
|
-
(0, test_1.ex)(Test.deep).toBe(true).ok;
|
|
161
|
-
// Deserialization
|
|
162
|
-
(0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
|
|
163
|
-
const a = Test.deserialize({ _key: "A", value: 1 });
|
|
164
|
-
(0, test_1.ex)(a).toBeInstanceOf(Test).ok;
|
|
165
|
-
// Additional prototype on deserialization
|
|
166
|
-
(0, test_1.ex)(a.test).toBe(true).ok;
|
|
167
|
-
(0, test_1.ex)(a.abstract).toBe(false).ok;
|
|
168
|
-
// Extended prototype on deserialization
|
|
169
|
-
(0, test_1.ex)(a.deep).toBe(true).ok;
|
|
170
|
-
// Inherited prototype on deserialization
|
|
171
|
-
(0, test_1.ex)(a.value).toStrictEqual(new A({ value: 1 })).ok;
|
|
172
|
-
// Serialization
|
|
173
|
-
(0, test_1.ex)(a.serialize()).toStrictEqual({ _key: "A", value: 1 }).ok;
|
|
174
|
-
// Instantiation
|
|
175
|
-
const b = new Test(new B({ value: "1" }));
|
|
176
|
-
(0, test_1.ex)(b).toBeInstanceOf(Test).ok;
|
|
177
|
-
// Additional prototype on instantiation
|
|
178
|
-
(0, test_1.ex)(b.test).toBe(true).ok;
|
|
179
|
-
(0, test_1.ex)(b.abstract).toBe(false).ok;
|
|
180
|
-
// Extended prototype on instantiation
|
|
181
|
-
(0, test_1.ex)(b.deep).toBe(true).ok;
|
|
182
|
-
// Inherited prototype on instantiation
|
|
183
|
-
(0, test_1.ex)(b.value).toStrictEqual(new B({ value: "1" })).ok;
|
|
184
|
-
});
|
|
185
|
-
it("mixin supersede", () => {
|
|
186
|
-
const Testable = (config) => {
|
|
187
|
-
class I {
|
|
188
|
-
deep = true;
|
|
189
|
-
static deep = true;
|
|
190
|
-
}
|
|
191
|
-
return (0, either_1.Either)(config, I);
|
|
192
|
-
};
|
|
193
|
-
class A extends (0, _1.Shape)({ value: Number }) {
|
|
194
|
-
}
|
|
195
|
-
class B extends (0, _1.Shape)({ value: String }) {
|
|
196
|
-
}
|
|
197
|
-
class Test extends Testable({ A, B }) {
|
|
198
|
-
test = true;
|
|
199
|
-
// @ts-expect-error is not assignable to parameter of type 'true'
|
|
200
|
-
abstract = false;
|
|
201
|
-
}
|
|
202
|
-
// Constructor type
|
|
203
|
-
(0, test_1.ex)(Test).toHaveFirstParam().ok;
|
|
204
|
-
// Additional static prototype
|
|
205
|
-
(0, test_1.ex)(Test.deep).toBe(true).ok;
|
|
206
|
-
// Deserialization
|
|
207
|
-
(0, test_1.ex)(Test.deserialize).toHaveFirstParam().ok;
|
|
208
|
-
const a = Test.deserialize({ _key: "A", value: 1 });
|
|
209
|
-
(0, test_1.ex)(a).toBeInstanceOf(Test).ok;
|
|
210
|
-
// Additional prototype on deserialization
|
|
211
|
-
(0, test_1.ex)(a.test).toBe(true).ok;
|
|
212
|
-
(0, test_1.ex)(a.abstract).toBe(false).ok;
|
|
213
|
-
// Superseded prototype on deserialization
|
|
214
|
-
(0, test_1.ex)(a.deep).toBe(true).ok;
|
|
215
|
-
// Inherited prototype on deserialization
|
|
216
|
-
(0, test_1.ex)(a.value).toStrictEqual(new A({ value: 1 })).ok;
|
|
217
|
-
// Serialization
|
|
218
|
-
(0, test_1.ex)(a.serialize()).toStrictEqual({ _key: "A", value: 1 }).ok;
|
|
219
|
-
// Instantiation
|
|
220
|
-
const b = new Test(new B({ value: "1" }));
|
|
221
|
-
(0, test_1.ex)(b).toBeInstanceOf(Test).ok;
|
|
222
|
-
// Additional prototype on instantiation
|
|
223
|
-
(0, test_1.ex)(b.test).toBe(true).ok;
|
|
224
|
-
(0, test_1.ex)(b.abstract).toBe(false).ok;
|
|
225
|
-
// Superseded prototype on instantiation
|
|
226
|
-
(0, test_1.ex)(b.deep).toBe(true).ok;
|
|
227
|
-
(0, test_1.ex)(b.abstract).toBe(false).ok;
|
|
228
|
-
// Inherited prototype on instantiation
|
|
229
|
-
(0, test_1.ex)(b.value).toStrictEqual(new B({ value: "1" })).ok;
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
//# sourceMappingURL=either.spec.js.map
|
package/dist/either.spec.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"either.spec.js","sourceRoot":"","sources":["../src/either.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { Either, EitherConfiguration } from \"./either\";\nimport { Dict } from \"./dict\";\nimport { ex } from \"./test\";\nimport { Shape } from \"./_\";\n\ndescribe(\"Either\", () => {\n it(\"class definition with two arguments\", () => {\n class A extends Shape({ value: Number }) { }\n class B extends Shape({ value: String }) { }\n class Test extends Either({ A, B }) {\n test = true as const;\n }\n\n type Serialized = { _key: \"A\", value: number } | { _key: \"B\", value: string };\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<A | B>().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a = Test.deserialize({ _key: \"A\", value: 1 });\n ex(a).toBeInstanceOf(Test).ok;\n\n // Additional prototype\n ex(a.test).toBe(true as const).ok;\n\n // Inherited prototype on deserialization\n ex(a.value).toStrictEqual<A | B>(new A({ value: 1 })).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ _key: \"A\", value: 1 }).ok;\n\n // Instantiation\n const b = new Test(new B({ value: \"1\" }));\n ex(b).toBeInstanceOf(Test).ok;\n\n // Inherited prototype on instantiation\n ex(b.value).toStrictEqual<A | B>(new B({ value: \"1\" })).ok;\n });\n\n it(\"class definition with constructors\", () => {\n class A extends Dict({ a: String }) { }\n class B {\n a!: string;\n constructor({ a }: { a: string }) {\n Object.assign(this, { a });\n }\n\n static deserialize({ a }: { a: string }) {\n return new B({ a });\n }\n\n serialize() {\n return { a: this.a };\n }\n }\n\n class Test extends Either({ A, B }) {\n test = true as const;\n }\n\n type Serialized = { _key: \"A\", a: string } | { _key: \"B\", a: string };\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<A | B>().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a = Test.deserialize({ _key: \"A\", a: \"test\" });\n ex(a).toBeInstanceOf(Test).ok;\n const b = Test.deserialize({ _key: \"B\", a: \"test\" });\n ex(b).toBeInstanceOf(Test).ok;\n\n // Additional prototype\n ex(\n a.match({\n A: () => true as const,\n B: () => false as const,\n })\n ).toBe<true | false>(true as const).ok;\n ex(\n a.match({\n _: () => true as const,\n })\n ).toBe<true>(true as const).ok;\n ex(\n a.match({\n B: () => true as const,\n }, () => false as const)\n ).toBe<true | false>(false as const).ok;\n\n ex(a.test).toBe(true as const).ok;\n // Inherited prototype on deserialization\n ex(a.value).toBeInstanceOf<typeof A | typeof B>(A).ok;\n ex(b.value).toBeInstanceOf<typeof A | typeof B>(B).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ _key: \"A\", a: \"test\" }).ok;\n ex(b.serialize()).toStrictEqual<Serialized>({ _key: \"B\", a: \"test\" }).ok;\n\n // Instantiation\n const c = new Test(new A({ a: \"test\" }));\n ex(c).toBeInstanceOf(Test).ok;\n\n const d = new Test(new B({ a: \"test\" }));\n ex(d).toBeInstanceOf(Test).ok;\n\n // Inherited prototype\n ex(c.value).toBeInstanceOf<typeof A | typeof B>(A).ok;\n ex(c.value.a).toBe(\"test\").ok;\n\n ex(d.value).toBeInstanceOf<typeof A | typeof B>(B).ok;\n ex(d.value.a).toBe(\"test\").ok;\n });\n\n it(\"inline definition\", () => {\n class A extends Shape({ value: Number }) { }\n class B extends Shape({ value: String }) { }\n class Test extends Dict({ nested: Either({ A, B }) }) { }\n\n type Serialized = { nested: { _key: \"A\", value: number } | { _key: \"B\", value: string } };\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<{ nested: A | B }>().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a: Test = Test.deserialize({ nested: { _key: \"A\", value: 1 } });\n ex(a).toBeInstanceOf(Test).ok;\n\n // Inherited prototype on deserialization\n ex(a.nested).toStrictEqual<A | B>(new A({ value: 1 })).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ nested: { _key: \"A\", value: 1 } })\n .ok;\n\n // Instantiation\n const b = new Test({ nested: new B({ value: \"1\" }) });\n ex(b).toBeInstanceOf(Test).ok;\n\n // Inherited prototype on instantiation\n ex(b.nested).toStrictEqual<A | B>(new B({ value: \"1\" })).ok;\n });\n\n it(\"referenced definition\", () => {\n class B extends Shape({ value: Number }) { }\n class C extends Shape({ value: String }) { }\n class A extends Either({ B, C }) { }\n class Test extends Dict({ nested: A }) { }\n\n type Serialized = { nested: { _key: \"B\", value: number } | { _key: \"C\", value: string } };\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<{ nested: A }>().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a: Test = Test.deserialize({ nested: { _key: \"B\", \"value\": 1 } });\n ex(a).toBeInstanceOf(Test).ok;\n\n // Inherited prototype on deserialization\n ex(a.nested).toBeInstanceOf(A).ok;\n ex(a.nested.value).toStrictEqual<B | C>(new B({ value: 1 })).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ nested: { _key: \"B\", value: 1 } })\n .ok;\n\n // Instantiation\n const b: Test = new Test({ nested: new A(new C({ value: \"1\" })) });\n ex(b).toBeInstanceOf(Test).ok;\n\n // Inherited prototype on instantiation\n ex(b.nested.value).toStrictEqual<B | C>(new C({ value: \"1\" })).ok;\n });\n\n it(\"mixin extension\", () => {\n const Mixin = <const S extends EitherConfiguration>(either: S) => {\n abstract class Mix extends Either(either) {\n deep = true as const;\n static deep = true as const;\n abstract abstract: true;\n }\n\n return Mix;\n };\n\n class A extends Shape({ value: Number }) { }\n class B extends Shape({ value: String }) { }\n class Test extends Mixin({ A, B }) {\n test = true as const;\n\n // @ts-expect-error is not assignable to parameter of type 'true'\n abstract = false as const;\n }\n\n type Serialized = { _key: \"A\", value: number } | { _key: \"B\", value: string };\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<A | B>().ok;\n\n // Additional static prototype\n ex(Test.deep).toBe(true as const).ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a = Test.deserialize({ _key: \"A\", value: 1 });\n ex(a).toBeInstanceOf(Test).ok;\n\n // Additional prototype on deserialization\n ex(a.test).toBe(true as const).ok;\n ex(a.abstract).toBe(false as const).ok;\n\n // Extended prototype on deserialization\n ex(a.deep).toBe(true as const).ok;\n\n // Inherited prototype on deserialization\n ex(a.value).toStrictEqual<A | B>(new A({ value: 1 })).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ _key: \"A\", value: 1 }).ok;\n\n // Instantiation\n const b = new Test(new B({ value: \"1\" }));\n ex(b).toBeInstanceOf(Test).ok;\n\n // Additional prototype on instantiation\n ex(b.test).toBe(true as const).ok;\n ex(b.abstract).toBe(false as const).ok;\n\n // Extended prototype on instantiation\n ex(b.deep).toBe(true as const).ok;\n\n // Inherited prototype on instantiation\n ex(b.value).toStrictEqual<A | B>(new B({ value: \"1\" })).ok;\n });\n\n it(\"mixin supersede\", () => {\n const Testable = <const C extends EitherConfiguration>(config: C) => {\n abstract class I {\n deep = true as const;\n static deep = true as const;\n\n abstract abstract: true;\n }\n\n return Either(config, I);\n };\n\n class A extends Shape({ value: Number }) { }\n class B extends Shape({ value: String }) { }\n\n class Test extends Testable({ A, B }) {\n test = true as const;\n\n // @ts-expect-error is not assignable to parameter of type 'true'\n abstract = false as const;\n }\n\n // Constructor type\n ex(Test).toHaveFirstParam<A | B>().ok;\n\n // Additional static prototype\n ex(Test.deep).toBe(true as const).ok;\n\n type Serialized = { _key: \"A\", value: number } | { _key: \"B\", value: string };\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a = Test.deserialize({ _key: \"A\", value: 1 });\n ex(a).toBeInstanceOf(Test).ok;\n\n // Additional prototype on deserialization\n ex(a.test).toBe(true as const).ok;\n ex(a.abstract).toBe(false as const).ok;\n\n // Superseded prototype on deserialization\n ex(a.deep).toBe(true as const).ok;\n\n // Inherited prototype on deserialization\n ex(a.value).toStrictEqual<A | B>(new A({ value: 1 })).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ _key: \"A\", value: 1 }).ok;\n\n // Instantiation\n const b = new Test(new B({ value: \"1\" }));\n ex(b).toBeInstanceOf(Test).ok;\n\n // Additional prototype on instantiation\n ex(b.test).toBe(true as const).ok;\n ex(b.abstract).toBe(false as const).ok;\n\n // Superseded prototype on instantiation\n ex(b.deep).toBe(true as const).ok;\n ex(b.abstract).toBe(false as const).ok;\n\n // Inherited prototype on instantiation\n ex(b.value).toStrictEqual<A | B>(new B({ value: \"1\" })).ok;\n });\n});\n"]}
|
package/dist/index.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export * from "./_";
|
|
2
|
-
export * from "./choice";
|
|
3
|
-
export * from "./class";
|
|
4
|
-
export * from "./dict";
|
|
5
|
-
export * from "./either";
|
|
6
|
-
export * from "./primitive";
|
|
7
|
-
export * from "./literal";
|
|
8
|
-
export * from "./discriminated-union";
|
|
9
|
-
export * from "./mapping";
|
|
10
|
-
export * from "./multiple";
|
|
11
|
-
export * from "./nothing";
|
|
12
|
-
export * from "./optional";
|
|
13
|
-
export * from "./addons/microsecond-timestamp";
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,KAAK,CAAC;AACpB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./_"), exports);
|
|
18
|
-
__exportStar(require("./choice"), exports);
|
|
19
|
-
__exportStar(require("./class"), exports);
|
|
20
|
-
__exportStar(require("./dict"), exports);
|
|
21
|
-
__exportStar(require("./either"), exports);
|
|
22
|
-
__exportStar(require("./primitive"), exports);
|
|
23
|
-
__exportStar(require("./literal"), exports);
|
|
24
|
-
__exportStar(require("./discriminated-union"), exports);
|
|
25
|
-
__exportStar(require("./mapping"), exports);
|
|
26
|
-
__exportStar(require("./multiple"), exports);
|
|
27
|
-
__exportStar(require("./nothing"), exports);
|
|
28
|
-
__exportStar(require("./optional"), exports);
|
|
29
|
-
__exportStar(require("./addons/microsecond-timestamp"), exports);
|
|
30
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sCAAoB;AACpB,2CAAyB;AACzB,0CAAwB;AACxB,yCAAuB;AACvB,2CAAyB;AACzB,8CAA4B;AAC5B,4CAA0B;AAC1B,wDAAsC;AACtC,4CAA0B;AAC1B,6CAA2B;AAC3B,4CAA0B;AAC1B,6CAA2B;AAC3B,iEAA+C","sourcesContent":["export * from \"./_\";\nexport * from \"./choice\";\nexport * from \"./class\";\nexport * from \"./dict\";\nexport * from \"./either\";\nexport * from \"./primitive\";\nexport * from \"./literal\";\nexport * from \"./discriminated-union\";\nexport * from \"./mapping\";\nexport * from \"./multiple\";\nexport * from \"./nothing\";\nexport * from \"./optional\";\nexport * from \"./addons/microsecond-timestamp\";\n"]}
|
package/dist/literal.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AbstractConstructor, Constructor, Empty, Expand } from "./_";
|
|
2
|
-
export type LiteralShorthand = string | number;
|
|
3
|
-
export declare const Literal: <const S extends LiteralShorthand, B extends AbstractConstructor<{}> = typeof Empty>(of: S, base?: B) => ILiteral<S, B>;
|
|
4
|
-
export type ILiteral<S extends LiteralShorthand, B extends AbstractConstructor<{}> = typeof Empty> = Omit<B, "prototype"> & {
|
|
5
|
-
value: S;
|
|
6
|
-
$shape: "literal";
|
|
7
|
-
deserialize<T extends Constructor>(this: T, value: S): InstanceType<T>;
|
|
8
|
-
$serialize(value: S): S;
|
|
9
|
-
$deserialize(value: S): S;
|
|
10
|
-
$inline: S;
|
|
11
|
-
} & (abstract new (value: Expand<S>) => InstanceType<B> & {
|
|
12
|
-
readonly value: S;
|
|
13
|
-
serialize(): S;
|
|
14
|
-
});
|
|
15
|
-
//# sourceMappingURL=literal.d.ts.map
|
package/dist/literal.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../src/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAEtE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/C,eAAO,MAAM,OAAO,SACZ,CAAC,SAAS,gBAAgB,EAChC,CAAC,SAAS,mBAAmB,CAAC,EAAE,CAAC,qBAE7B,CAAC,SACC,CAAC,KACN,QAAQ,CAAC,CAAC,EAAE,CAAC,CA8Bf,CAAC;AAEF,MAAM,MAAM,QAAQ,CAClB,CAAC,SAAS,gBAAgB,EAC1B,CAAC,SAAS,mBAAmB,CAAC,EAAE,CAAC,GAAG,OAAO,KAAK,IAC9C,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG;IACzB,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACvE,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC;CACZ,GAAG,CAAC,QAAQ,MACT,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KACb,YAAY,CAAC,CAAC,CAAC,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,SAAS,IAAI,CAAC,CAAC;CAChB,CAAC,CAAC"}
|
package/dist/literal.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
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 = of;
|
|
8
|
-
static value = of;
|
|
9
|
-
static $shape = "literal";
|
|
10
|
-
serialize() {
|
|
11
|
-
return of;
|
|
12
|
-
}
|
|
13
|
-
static deserialize(value) {
|
|
14
|
-
return new this();
|
|
15
|
-
}
|
|
16
|
-
static $serialize(value) {
|
|
17
|
-
return of;
|
|
18
|
-
}
|
|
19
|
-
static $deserialize(value) {
|
|
20
|
-
return of;
|
|
21
|
-
}
|
|
22
|
-
static $inline;
|
|
23
|
-
}
|
|
24
|
-
return $Literal;
|
|
25
|
-
};
|
|
26
|
-
exports.Literal = Literal;
|
|
27
|
-
//# sourceMappingURL=literal.js.map
|
package/dist/literal.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../src/literal.ts"],"names":[],"mappings":";;;AAAA,0BAAsE;AAI/D,MAAM,OAAO,GAAG,CAIrB,EAAK,EACL,OAAU,QAAY,EACN,EAAE;IAGlB,MAAe,QAAS,SAAS,IAA+B;QAC9C,KAAK,GAAG,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;QAClB,MAAM,CAAC,MAAM,GAAG,SAAkB,CAAC;QACnC,SAAS;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,CAAC,WAAW,CAEhB,KAAa;YAEb,OAAO,IAAK,IAAY,EAAqB,CAAC;QAChD,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,KAAa;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,KAAa;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,CAAC,OAAO,CAAS;;IAGzB,OAAO,QAAe,CAAC;AACzB,CAAC,CAAC;AApCW,QAAA,OAAO,WAoClB","sourcesContent":["import { AbstractConstructor, Constructor, Empty, Expand } from \"./_\";\n\nexport type LiteralShorthand = string | number;\n\nexport const Literal = <\n const S extends LiteralShorthand,\n B extends AbstractConstructor<{}> = typeof Empty,\n>(\n of: S,\n base: B = Empty as any,\n): ILiteral<S, B> => {\n type Inline = S;\n\n abstract class $Literal extends (base as any as Constructor<{}>) {\n public readonly value = of;\n static value = of;\n static $shape = \"literal\" as const;\n serialize(): S {\n return of;\n }\n\n static deserialize<T extends typeof $Literal>(\n this: T,\n value: Inline,\n ): InstanceType<T> {\n return new (this as any)() as InstanceType<T>;\n }\n\n static $serialize(value: Inline): Inline {\n return of;\n }\n\n static $deserialize(value: Inline): Inline {\n return of;\n }\n\n static $inline: Inline;\n }\n\n return $Literal as any;\n};\n\nexport type ILiteral<\n S extends LiteralShorthand,\n B extends AbstractConstructor<{}> = typeof Empty,\n> = Omit<B, \"prototype\"> & {\n value: S;\n $shape: \"literal\";\n deserialize<T extends Constructor>(this: T, value: S): InstanceType<T>;\n $serialize(value: S): S;\n $deserialize(value: S): S;\n $inline: S;\n} & (abstract new (\n value: Expand<S>,\n ) => InstanceType<B> & {\n readonly value: S;\n serialize(): S;\n });\n"]}
|
package/dist/literal.spec.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"literal.spec.d.ts","sourceRoot":"","sources":["../src/literal.spec.ts"],"names":[],"mappings":""}
|
package/dist/literal.spec.js
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const dict_1 = require("./dict");
|
|
4
|
-
const test_1 = require("./test");
|
|
5
|
-
const literal_1 = require("./literal");
|
|
6
|
-
describe("Literal", () => {
|
|
7
|
-
it("class definition", () => {
|
|
8
|
-
class Test extends (0, literal_1.Literal)("a") {
|
|
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)("a") }) {
|
|
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)("a") {
|
|
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(1) {
|
|
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(1);
|
|
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(1).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(1) {
|
|
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(1);
|
|
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(1).ok;
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
//# sourceMappingURL=literal.spec.js.map
|
package/dist/literal.spec.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"literal.spec.js","sourceRoot":"","sources":["../src/literal.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { Dict } from \"./dict\";\nimport { ex } from \"./test\";\nimport { Literal, type LiteralShorthand } from \"./literal\";\n\ndescribe(\"Literal\", () => {\n it(\"class definition\", () => {\n class Test extends Literal(\"a\") {\n test = true as const;\n }\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<\"a\">().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<\"a\">().ok;\n const a = Test.deserialize(\"a\");\n ex(a).toBeInstanceOf(Test).ok;\n\n // Additional prototype on deserialization\n ex(a.test).toBe(true as const).ok;\n\n // Inherited prototype on deserialization\n ex(a.value).toBe<\"a\">(\"a\").ok;\n\n // Serialization\n ex(a.serialize()).toBe<\"a\">(\"a\").ok;\n\n // Instantiation\n const b = new Test(\"a\");\n ex(b).toBeInstanceOf(Test).ok;\n\n // Additional prototype on instantiation\n ex(b.test).toBe(true as const).ok;\n\n // Inherited prototype on instantiation\n ex(b.value).toBe<\"a\">(\"a\").ok;\n });\n\n it(\"inline definition\", () => {\n class Test extends Dict({ a: Literal(\"a\") }) {\n test = true as const;\n }\n\n type Serialized = { a: \"a\" };\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<Serialized>().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a = Test.deserialize({ a: \"a\" });\n ex(a).toBeInstanceOf(Test).ok;\n\n // Additional prototype on deserialization\n ex(a.test).toBe(true as const).ok;\n\n // Inherited prototype on deserialization\n ex(a.a).toBe<\"a\">(\"a\").ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ a: \"a\" }).ok;\n\n // Instantiation\n const b = new Test({ a: \"a\" });\n ex(b).toBeInstanceOf(Test).ok;\n\n // Additional prototype on instantiation\n ex(b.test).toBe(true as const).ok;\n\n // Inherited prototype on instantiation\n ex(b.a).toBe<\"a\">(\"a\").ok;\n });\n\n it(\"referenced definition\", () => {\n class A extends Literal(\"a\") {}\n class Test extends Dict({ a: A }) {\n test = true as const;\n }\n\n type Serialized = { a: \"a\" };\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<{ a: A }>().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a = Test.deserialize({ a: \"a\" });\n ex(a).toBeInstanceOf(Test).ok;\n\n // Preserve reference\n ex(a.a).toBeInstanceOf(A);\n ex(a.a.value).toBe<\"a\">(\"a\").ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ a: \"a\" }).ok;\n\n // Instantiation\n const b = new Test({ a: new A(\"a\") });\n ex(b).toBeInstanceOf(Test).ok;\n\n // Inherited prototype on instantiation\n ex(b.a).toBeInstanceOf(A);\n ex(b.a.value).toBe<\"a\">(\"a\").ok;\n });\n\n it(\"mixin extension\", () => {\n const Testable = <S extends LiteralShorthand>(shape: S) => {\n abstract class I extends Literal(shape) {\n deep = true as const;\n static deep = true as const;\n\n abstract abstract: true;\n }\n\n return I;\n };\n\n class Test extends Testable(1) {\n test = true as const;\n\n // @ts-expect-error is not assignable to parameter of type 'true'\n abstract = false as const;\n }\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<1>().ok;\n\n // Additional static prototype\n ex(Test.deep).toBe(true as const).ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<1>().ok;\n const a = Test.deserialize(1);\n ex(a).toBeInstanceOf(Test).ok;\n\n // Additional prototype on deserialization\n ex(a.test).toBe(true as const).ok;\n ex(a.abstract).toBe(false as const).ok;\n\n // Extended prototype on deserialization\n ex(a.deep).toBe(true as const).ok;\n\n // Inherited prototype on deserialization\n ex(a.value).toStrictEqual(1 as const).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual(1 as const).ok;\n\n // Instantiation\n const b = new Test(1);\n ex(b).toBeInstanceOf(Test).ok;\n\n // Additional prototype on instantiation\n ex(b.test).toBe(true as const).ok;\n ex(b.abstract).toBe(false as const).ok;\n\n // Extended prototype on instantiation\n ex(b.deep).toBe(true as const).ok;\n\n // Inherited prototype on instantiation\n ex(b.value).toStrictEqual(1 as const).ok;\n });\n\n it(\"mixin supersede\", () => {\n const Testable = <S extends LiteralShorthand>(shape: S) => {\n abstract class I {\n deep = true as const;\n static deep = true as const;\n\n abstract abstract: true;\n }\n\n return Literal(shape, I);\n };\n\n class Test extends Testable(1) {\n test = true as const;\n\n // @ts-expect-error is not assignable to parameter of type 'true'\n abstract = false as const;\n }\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<1>().ok;\n\n // Additional static prototype\n ex(Test.deep).toBe(true as const).ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<1>().ok;\n const a = Test.deserialize(1);\n ex(a).toBeInstanceOf(Test).ok;\n\n // Additional prototype on deserialization\n ex(a.test).toBe(true as const).ok;\n ex(a.abstract).toBe(false as const).ok;\n\n // Superseded prototype on deserialization\n ex(a.deep).toBe(true as const).ok;\n\n // Inherited prototype on deserialization\n ex(a.value).toBe(1 as const).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual(1 as const).ok;\n\n // Instantiation\n const b = new Test(1);\n ex(b).toBeInstanceOf(Test).ok;\n\n // Additional prototype on instantiation\n ex(b.test).toBe(true as const).ok;\n ex(b.abstract).toBe(false as const).ok;\n\n // Superseded prototype on instantiation\n ex(b.deep).toBe(true as const).ok;\n\n // Inherited prototype on instantiation\n ex(b.value).toBe(1 as const).ok;\n });\n});\n"]}
|
package/dist/mapping.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { Definition, Expand, Shorthand, DefinitionOf, AbstractConstructor, Empty, Constructor } 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
|
-
type Internal<C extends MappingConfiguration, B extends AbstractConstructor<{}>> = {
|
|
26
|
-
Definition: MappingOf<C>["value"];
|
|
27
|
-
Serialized: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, ReturnType<MappingOf<C>["value"]["$serialize"]>>;
|
|
28
|
-
Deserializing: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, Parameters<MappingOf<C>["value"]["$deserialize"]>[0]>;
|
|
29
|
-
Inline: Record<MappingKeyRuntimeFromConstructor<MappingOf<C>["key"]>, MappingOf<C>["value"]["$inline"]>;
|
|
30
|
-
};
|
|
31
|
-
export declare const Mapping: <C extends MappingConfiguration, B extends AbstractConstructor<{}> = typeof Empty>(config: C, base?: B) => Mapping<C, B>;
|
|
32
|
-
export type Mapping<C extends MappingConfiguration, B extends AbstractConstructor<{}> = typeof Empty> = Omit<B, "prototype"> & (abstract new (value: Internal<C, B>["Inline"]) => InstanceType<B> & {
|
|
33
|
-
value: Internal<C, B>["Inline"];
|
|
34
|
-
serialize(): Expand<Internal<C, B>["Serialized"]>;
|
|
35
|
-
}) & {
|
|
36
|
-
$shape: "mapping";
|
|
37
|
-
deserialize<T extends Constructor>(this: T, value: Expand<Internal<C, B>["Serialized"]>): InstanceType<T>;
|
|
38
|
-
$deserialize<T>(this: T, value: Internal<C, B>["Deserializing"]): Internal<C, B>["Inline"];
|
|
39
|
-
$serialize<T>(this: T, value: Internal<C, B>["Inline"]): Internal<C, B>["Serialized"];
|
|
40
|
-
$inline: Internal<C, B>["Inline"];
|
|
41
|
-
};
|
|
42
|
-
export {};
|
|
43
|
-
//# sourceMappingURL=mapping.d.ts.map
|
package/dist/mapping.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"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"}
|