@ddd-ts/shape 0.0.36 → 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 -24
- package/dist/addons/microsecond-timestamp.d.ts.map +0 -1
- package/dist/addons/microsecond-timestamp.js +0 -75
- 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/optional.spec.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"optional.spec.js","sourceRoot":"","sources":["../src/optional.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { Optional, OptionalConfiguration } from \"./optional\";\nimport { Dict } from \"./dict\";\nimport { ex } from \"./test\";\n\ndescribe(\"Optional\", () => {\n it(\"class definition\", () => {\n class Test extends Optional(String) {\n test = true as const;\n }\n\n type Serialized = string | undefined;\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\");\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).toStrictEqual<string | undefined>(\"a\").ok;\n ex(\n a.match({\n some: (value) => value,\n none: () => \"default\",\n }),\n ).toBe(\"a\").ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>(\"a\").ok;\n\n // Instantiation\n const b: Test = new Test(undefined);\n ex(b).toBeInstanceOf(Test);\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).toStrictEqual<Serialized>(undefined).ok;\n ex(\n b.match({\n some: (value) => value,\n none: () => \"default\",\n }),\n ).toBe(\"default\").ok;\n });\n\n it(\"inline definition\", () => {\n class Test extends Dict({ longhand: Optional(String) }) {\n test = true as const;\n }\n\n type Serialized = { longhand: string | undefined };\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({ longhand: \"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.longhand).toStrictEqual<string | undefined>(\"a\").ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ longhand: \"a\" }).ok;\n\n // Instantiation\n const b: Test = new Test({ longhand: undefined });\n ex(b).toBeInstanceOf(Test);\n\n // Additional prototype on instantiation\n ex(b.test).toBe(true as const).ok;\n\n // Inherited prototype on instantiation\n ex(b.longhand).toStrictEqual<string | undefined>(undefined).ok;\n });\n\n it(\"referenced definition\", () => {\n class Reference extends Optional(String) {}\n class Test extends Dict({ reference: Reference }) {\n test = true as const;\n }\n\n type Serialized = { reference: string | undefined };\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<{ reference: Reference }>().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<Serialized>().ok;\n const a: Test = Test.deserialize({ reference: \"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.reference).toStrictEqual<Reference>(new Reference(\"a\")).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>({ reference: \"a\" }).ok;\n\n // Instantiation\n const b: Test = new Test({ reference: new Reference(undefined) });\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.reference).toStrictEqual<Reference>(new Reference(undefined)).ok;\n });\n\n it(\"mixin extension\", () => {\n const Testable = <const C extends OptionalConfiguration>(config: C) => {\n abstract class I extends Optional(config) {\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(String) {\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 = string | undefined;\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<Serialized>().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(\"a\");\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<Serialized>(\"a\").ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>(\"a\").ok;\n\n // Instantiation\n const b = new Test(undefined);\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<Serialized>(undefined).ok;\n });\n\n it(\"mixin supersede\", () => {\n const Testable = <C extends OptionalConfiguration>(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 Optional(config, I);\n };\n\n class Test extends Testable(String) {\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 = string | undefined;\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<Serialized>().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(\"a\");\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<Serialized>(\"a\").ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual<Serialized>(\"a\").ok;\n\n // Instantiation\n const b = new Test(undefined);\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<Serialized>(undefined).ok;\n });\n});\n"]}
|
package/dist/primitive.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { AbstractConstructor, Constructor, Empty, Expand } from "./_";
|
|
2
|
-
type PrimitiveMap = [
|
|
3
|
-
[
|
|
4
|
-
StringConstructor,
|
|
5
|
-
string
|
|
6
|
-
],
|
|
7
|
-
[
|
|
8
|
-
NumberConstructor,
|
|
9
|
-
number
|
|
10
|
-
],
|
|
11
|
-
[
|
|
12
|
-
DateConstructor,
|
|
13
|
-
Date
|
|
14
|
-
],
|
|
15
|
-
[
|
|
16
|
-
BooleanConstructor,
|
|
17
|
-
boolean
|
|
18
|
-
]
|
|
19
|
-
];
|
|
20
|
-
type PrimitiveConstructor = PrimitiveMap[number][0];
|
|
21
|
-
export type PrimitiveFromConstructor<S> = Extract<PrimitiveMap[number], [
|
|
22
|
-
S,
|
|
23
|
-
any
|
|
24
|
-
]>[1];
|
|
25
|
-
export type PrimitiveShorthand = PrimitiveConstructor;
|
|
26
|
-
export type IPrimitive<S extends PrimitiveConstructor, B extends AbstractConstructor<{}> = typeof Empty> = Omit<B, ""> & (abstract new (value: Expand<PrimitiveFromConstructor<S>>) => InstanceType<B> & {
|
|
27
|
-
readonly value: Expand<PrimitiveFromConstructor<S>>;
|
|
28
|
-
serialize(): PrimitiveFromConstructor<S>;
|
|
29
|
-
}) & {
|
|
30
|
-
$shape: "primitive";
|
|
31
|
-
deserialize<T extends Constructor<any>>(this: T, value: PrimitiveFromConstructor<S>): InstanceType<T>;
|
|
32
|
-
$serialize(value: PrimitiveFromConstructor<S>): PrimitiveFromConstructor<S>;
|
|
33
|
-
$deserialize(value: PrimitiveFromConstructor<S>): PrimitiveFromConstructor<S>;
|
|
34
|
-
$inline: Expand<PrimitiveFromConstructor<S>>;
|
|
35
|
-
};
|
|
36
|
-
export declare const Primitive: <S extends PrimitiveConstructor, B extends AbstractConstructor<{}> = typeof Empty>(of: S, base?: B) => IPrimitive<S, B>;
|
|
37
|
-
export {};
|
|
38
|
-
//# sourceMappingURL=primitive.d.ts.map
|
package/dist/primitive.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitive.d.ts","sourceRoot":"","sources":["../src/primitive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAY,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAEhF,KAAK,YAAY,GAAG;IAClB;QAAC,iBAAiB;QAAE,MAAM;KAAC;IAC3B;QAAC,iBAAiB;QAAE,MAAM;KAAC;IAC3B;QAAC,eAAe;QAAE,IAAI;KAAC;IACvB;QAAC,kBAAkB;QAAE,OAAO;KAAC;CAC9B,CAAC;AAEF,KAAK,oBAAoB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,OAAO,CAC/C,YAAY,CAAC,MAAM,CAAC,EACpB;IAAC,CAAC;IAAE,GAAG;CAAC,CACT,CAAC,CAAC,CAAC,CAAC;AAEL,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEtD,MAAM,MAAM,UAAU,CACpB,CAAC,SAAS,oBAAoB,EAC9B,CAAC,SAAS,mBAAmB,CAAC,EAAE,CAAC,GAAG,OAAO,KAAK,IAC9C,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GACb,CAAC,QAAQ,MACP,KAAK,EAAE,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,KACvC,YAAY,CAAC,CAAC,CAAC,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,SAAS,IAAI,wBAAwB,CAAC,CAAC,CAAC,CAAC;CAC1C,CAAC,GAAG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,EACpC,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACjC,YAAY,CAAC,CAAC,CAAC,CAAC;IACnB,UAAU,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAC5E,YAAY,CACV,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACjC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEJ,eAAO,MAAM,SAAS,GACpB,CAAC,SAAS,oBAAoB,EAC9B,CAAC,SAAS,mBAAmB,CAAC,EAAE,CAAC,qBAE7B,CAAC,SACC,CAAC,KACN,UAAU,CAAC,CAAC,EAAE,CAAC,CA4CjB,CAAC"}
|
package/dist/primitive.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Primitive = void 0;
|
|
4
|
-
const _1 = require("./_");
|
|
5
|
-
const Primitive = (of, base = _1.Empty) => {
|
|
6
|
-
class $Primitive extends base {
|
|
7
|
-
value;
|
|
8
|
-
constructor(value) {
|
|
9
|
-
super();
|
|
10
|
-
this.value = value;
|
|
11
|
-
}
|
|
12
|
-
static $shape = "primitive";
|
|
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
|
-
if (of === Date && typeof value === "string") {
|
|
24
|
-
return new Date(value);
|
|
25
|
-
}
|
|
26
|
-
return value;
|
|
27
|
-
}
|
|
28
|
-
static $inline;
|
|
29
|
-
}
|
|
30
|
-
return $Primitive;
|
|
31
|
-
};
|
|
32
|
-
exports.Primitive = Primitive;
|
|
33
|
-
//# sourceMappingURL=primitive.js.map
|
package/dist/primitive.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitive.js","sourceRoot":"","sources":["../src/primitive.ts"],"names":[],"mappings":";;;AAAA,0BAAgF;AAuCzE,MAAM,SAAS,GAAG,CAIvB,EAAK,EACL,OAAU,QAAY,EACJ,EAAE;IAGpB,MAAe,UAAW,SAAS,IAA+B;QACpC;QAA5B,YAA4B,KAAqB;YAC/C,KAAK,EAAE,CAAC;YADkB,UAAK,GAAL,KAAK,CAAgB;QAEjD,CAAC;QAED,MAAM,CAAC,MAAM,GAAG,WAAoB,CAAC;QAErC,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,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC7C,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,OAAO,CAAiB;;IAWjC,OAAO,UAAiB,CAAC;AAC3B,CAAC,CAAC;AAlDW,QAAA,SAAS,aAkDpB","sourcesContent":["import { AbstractConstructor, Concrete, Constructor, Empty, Expand } from \"./_\";\n\ntype PrimitiveMap = [\n [StringConstructor, string],\n [NumberConstructor, number],\n [DateConstructor, Date],\n [BooleanConstructor, boolean],\n];\n\ntype PrimitiveConstructor = PrimitiveMap[number][0];\nexport type PrimitiveFromConstructor<S> = Extract<\n PrimitiveMap[number],\n [S, any]\n>[1];\n\nexport type PrimitiveShorthand = PrimitiveConstructor;\n\nexport type IPrimitive<\n S extends PrimitiveConstructor,\n B extends AbstractConstructor<{}> = typeof Empty,\n> = Omit<B, \"\"> &\n (abstract new (\n value: Expand<PrimitiveFromConstructor<S>>,\n ) => InstanceType<B> & {\n readonly value: Expand<PrimitiveFromConstructor<S>>;\n serialize(): PrimitiveFromConstructor<S>;\n }) & {\n $shape: \"primitive\";\n deserialize<T extends Constructor<any>>(\n this: T,\n value: PrimitiveFromConstructor<S>,\n ): InstanceType<T>;\n $serialize(value: PrimitiveFromConstructor<S>): PrimitiveFromConstructor<S>;\n $deserialize(\n value: PrimitiveFromConstructor<S>,\n ): PrimitiveFromConstructor<S>;\n $inline: Expand<PrimitiveFromConstructor<S>>;\n };\n\nexport const Primitive = <\n S extends PrimitiveConstructor,\n B extends AbstractConstructor<{}> = typeof Empty,\n>(\n of: S,\n base: B = Empty as any,\n): IPrimitive<S, B> => {\n type Inline = PrimitiveFromConstructor<S>;\n\n abstract class $Primitive extends (base as any as Constructor<{}>) {\n constructor(public readonly value: Expand<Inline>) {\n super();\n }\n\n static $shape = \"primitive\" as const;\n\n serialize(): Inline {\n return this.value;\n }\n\n static deserialize<T extends typeof $Primitive>(\n this: T,\n value: Inline,\n ): InstanceType<T> {\n return new (this as any)(this.$deserialize(value)) as InstanceType<T>;\n }\n\n static $serialize(value: Inline): Inline {\n return value;\n }\n\n static $deserialize(value: Inline): Inline {\n if (of === Date && typeof value === \"string\") {\n return new Date(value);\n }\n return value;\n }\n\n static $inline: Expand<Inline>;\n }\n\n type PrimitiveConstructor = abstract new (\n value: Expand<Inline>,\n ) => InstanceType<B> & $Primitive;\n\n type Primitive = Omit<B, \"prototype\"> &\n Omit<typeof $Primitive, \"prototype\"> &\n PrimitiveConstructor;\n\n return $Primitive as any;\n};\n"]}
|
package/dist/primitive.spec.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitive.spec.d.ts","sourceRoot":"","sources":["../src/primitive.spec.ts"],"names":[],"mappings":""}
|
package/dist/primitive.spec.js
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const primitive_1 = require("./primitive");
|
|
4
|
-
const dict_1 = require("./dict");
|
|
5
|
-
const test_1 = require("./test");
|
|
6
|
-
describe("Primitive", () => {
|
|
7
|
-
it("class definition", () => {
|
|
8
|
-
class Test extends (0, primitive_1.Primitive)(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, primitive_1.Primitive)(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, primitive_1.Primitive)(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, primitive_1.Primitive)(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, primitive_1.Primitive)(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=primitive.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitive.spec.js","sourceRoot":"","sources":["../src/primitive.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { Primitive, PrimitiveShorthand } from \"./primitive\";\nimport { Dict } from \"./dict\";\nimport { ex } from \"./test\";\n\ndescribe(\"Primitive\", () => {\n it(\"class definition\", () => {\n class Test extends Primitive(String) {\n test = true as const;\n }\n\n // Constructor parameters\n ex(Test).toHaveFirstParam<string>().ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<string>().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<string>(\"a\").ok;\n\n // Serialization\n ex(a.serialize()).toBe<string>(\"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<string>(\"a\").ok;\n });\n\n it(\"inline definition\", () => {\n class Test extends Dict({ a: Primitive(String) }) {\n test = true as const;\n }\n\n type Serialized = { a: string };\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<string>(\"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<string>(\"a\").ok;\n });\n\n it(\"referenced definition\", () => {\n class A extends Primitive(String) {}\n class Test extends Dict({ a: A }) {\n test = true as const;\n }\n\n type Serialized = { a: string };\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<string>(\"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<string>(\"a\").ok;\n });\n\n it(\"mixin extension\", () => {\n const Testable = <S extends PrimitiveShorthand>(shape: S) => {\n abstract class I extends Primitive(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(Number) {\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<number>().ok;\n\n // Additional static prototype\n ex(Test.deep).toBe(true as const).ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<number>().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).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual(1).ok;\n\n // Instantiation\n const b = new Test(2);\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(2).ok;\n });\n\n it(\"mixin supersede\", () => {\n const Testable = <S extends PrimitiveShorthand>(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 Primitive(shape, I);\n };\n\n class Test extends Testable(Number) {\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<number>().ok;\n\n // Additional static prototype\n ex(Test.deep).toBe(true as const).ok;\n\n // Deserialization\n ex(Test.deserialize).toHaveFirstParam<number>().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).ok;\n\n // Serialization\n ex(a.serialize()).toStrictEqual(1).ok;\n\n // Instantiation\n const b = new Test(2);\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(2).ok;\n });\n});\n"]}
|
package/dist/test.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
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): Equals<Received, Expected> extends true ? {
|
|
6
|
-
ok: true;
|
|
7
|
-
} : {
|
|
8
|
-
expected: Expected;
|
|
9
|
-
received: Received;
|
|
10
|
-
};
|
|
11
|
-
toStrictEqual<Expected>(expected: Expected): Equals<Received, Expected> extends true ? {
|
|
12
|
-
ok: true;
|
|
13
|
-
} : {
|
|
14
|
-
expected: Expected;
|
|
15
|
-
received: Received;
|
|
16
|
-
};
|
|
17
|
-
toBeInstanceOf<Expected extends Constructor>(expected: Expected): Equals<Received, InstanceType<Expected>> extends true ? {
|
|
18
|
-
ok: true;
|
|
19
|
-
} : {
|
|
20
|
-
expected: InstanceType<Expected>;
|
|
21
|
-
received: Received;
|
|
22
|
-
};
|
|
23
|
-
toHaveFirstParam<Expected>(): Received extends (first: infer P, ...rest: any[]) => any ? Equals<P, Expected> extends true ? {
|
|
24
|
-
ok: true;
|
|
25
|
-
} : {
|
|
26
|
-
expected: Expected;
|
|
27
|
-
received: P;
|
|
28
|
-
} : Received extends Constructor<any, [infer P, ...any[]]> ? Equals<P, Expected> extends true ? {
|
|
29
|
-
ok: true;
|
|
30
|
-
} : {
|
|
31
|
-
expected: Expected;
|
|
32
|
-
received: P;
|
|
33
|
-
} : "not a function or constructor";
|
|
34
|
-
};
|
|
35
|
-
export {};
|
|
36
|
-
//# sourceMappingURL=test.d.ts.map
|
package/dist/test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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;SAEtC,QAAQ,YACD,QAAQ,GACjB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,IAAI,GACtC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GACZ;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE;kBAQhC,QAAQ,YACV,QAAQ,GACjB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,IAAI,GACtC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GACZ;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE;mBAQ/B,QAAQ,SAAS,WAAW,YAC/B,QAAQ,GACjB,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,GACpD;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GACZ;QAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE;qBAQ3C,QAAQ,KAAK,QAAQ,SAAS,CAC7C,KAAK,EAAE,MAAM,CAAC,EACd,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,GAAG,GACJ,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,IAAI,GAChC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GACZ;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,CAAC,CAAA;KAAE,GACnC,QAAQ,SAAS,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,GACtD,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,IAAI,GAChC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GACZ;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,CAAC,CAAA;KAAE,GACnC,+BAA+B;EAItC"}
|
package/dist/test.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ex = ex;
|
|
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
|
-
//# sourceMappingURL=test.js.map
|
package/dist/test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAwJA,gBAqDC;AA7DD,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","sourcesContent":["import { Constructor, Expand } from \"./_\";\n\ntype IfEquals<T, U, Y = unknown, N = never> = (<G>() => G extends T\n ? 1\n : 2) extends <G>() => G extends U ? 1 : 2\n ? Y\n : N;\n\nexport type Equals<X, Y> = IfEquals<X, Y, true, false>;\n\ntype tests = {\n // Booleans\n \"Equals<true, true> -> true\": [Equals<true, true>, true];\n \"Equals<true, false> -> false\": [Equals<true, false>, false];\n \"Equals<false, true> -> false\": [Equals<false, true>, false];\n \"Equals<false, false> -> true\": [Equals<false, false>, true];\n \"Equals<true, any> -> false\": [Equals<true, any>, false];\n \"Equals<any, true> -> false\": [Equals<any, true>, false];\n \"Equals<false, any> -> false\": [Equals<false, any>, false];\n \"Equals<any, false> -> false\": [Equals<any, false>, false];\n \"Equals<true, unknown> -> false\": [Equals<true, unknown>, false];\n \"Equals<unknown, true> -> false\": [Equals<unknown, true>, false];\n \"Equals<false, unknown> -> false\": [Equals<false, unknown>, false];\n \"Equals<unknown, false> -> false\": [Equals<unknown, false>, false];\n \"Equals<true, never> -> false\": [Equals<true, never>, false];\n \"Equals<never, true> -> false\": [Equals<never, true>, false];\n \"Equals<false, never> -> false\": [Equals<false, never>, false];\n \"Equals<never, false> -> false\": [Equals<never, false>, false];\n \"Equals<true, true | false> -> true\": [Equals<true, true | false>, false];\n \"Equals<true | false, true> -> true\": [Equals<true | false, true>, false];\n\n // Numbers\n \"Equals<1, 1> -> true\": [Equals<1, 1>, true];\n \"Equals<1, 2> -> false\": [Equals<1, 2>, false];\n \"Equals<2, 1> -> false\": [Equals<2, 1>, false];\n \"Equals<2, 2> -> true\": [Equals<2, 2>, true];\n // Strings\n \"Equals<'a', 'a'> -> true\": [Equals<\"a\", \"a\">, true];\n \"Equals<'a', 'b'> -> false\": [Equals<\"a\", \"b\">, false];\n \"Equals<'b', 'a'> -> false\": [Equals<\"b\", \"a\">, false];\n \"Equals<'b', 'b'> -> true\": [Equals<\"b\", \"b\">, true];\n // Arrays\n \"Equals<[], []> -> true\": [Equals<[], []>, true];\n \"Equals<[], [1]> -> false\": [Equals<[], [1]>, false];\n \"Equals<[1], []> -> false\": [Equals<[1], []>, false];\n \"Equals<[1], [1]> -> true\": [Equals<[1], [1]>, true];\n // Objects\n\n \"Equals<{}, {}> -> true\": [Equals<{}, {}>, true];\n \"Equals<{}, { a: 1 }> -> false\": [Equals<{}, { a: 1 }>, false];\n \"Equals<{ a: 1 }, {}> -> false\": [Equals<{ a: 1 }, {}>, false];\n \"Equals<{ a: 1 }, { a: 1 }> -> true\": [Equals<{ a: 1 }, { a: 1 }>, true];\n \"Equals<{ a: 1 }, { a: 2 }> -> false\": [Equals<{ a: 1 }, { a: 2 }>, false];\n \"Equals<{ a: 2 }, { a: 1 }> -> false\": [Equals<{ a: 2 }, { a: 1 }>, false];\n \"Equals<{ a: 2 }, { a: 2 }> -> true\": [Equals<{ a: 2 }, { a: 2 }>, true];\n \"Equals<{ a: 1 }, { b: 1 }> -> false\": [Equals<{ a: 1 }, { b: 1 }>, false];\n \"Equals<{ b: 1 }, { a: 1 }> -> false\": [Equals<{ b: 1 }, { a: 1 }>, false];\n // Objects with any, unknown, never\n \"Equals<{}, any> -> false\": [Equals<{}, any>, false];\n \"Equals<any, {}> -> false\": [Equals<any, {}>, false];\n \"Equals<{}, unknown> -> false\": [Equals<{}, unknown>, false];\n \"Equals<unknown, {}> -> false\": [Equals<unknown, {}>, false];\n \"Equals<{}, never> -> false\": [Equals<{}, never>, false];\n \"Equals<never, {}> -> false\": [Equals<never, {}>, false];\n // Objects with nested any, unknown, never and real types\n \"Equals<{ a: any }, { a: any }> -> true\": [\n Equals<{ a: any }, { a: any }>,\n true,\n ];\n \"Equals<{ a: unknown }, { a: unknown }> -> true\": [\n Equals<{ a: unknown }, { a: unknown }>,\n true,\n ];\n \"Equals<{ a: never }, { a: never }> -> true\": [\n Equals<{ a: never }, { a: never }>,\n true,\n ];\n \"Equals<{ a: any }, { a: unknown }> -> false\": [\n Equals<{ a: any }, { a: unknown }>,\n false,\n ];\n \"Equals<{ a: any }, { a: never }> -> false\": [\n Equals<{ a: any }, { a: never }>,\n false,\n ];\n \"Equals<{ a: unknown }, { a: any }> -> false\": [\n Equals<{ a: unknown }, { a: any }>,\n false,\n ];\n \"Equals<{ a: unknown }, { a: never }> -> false\": [\n Equals<{ a: unknown }, { a: never }>,\n false,\n ];\n \"Equals<{ a: never }, { a: any }> -> false\": [\n Equals<{ a: never }, { a: any }>,\n false,\n ];\n \"Equals<{ a: never }, { a: unknown }> -> false\": [\n Equals<{ a: never }, { a: unknown }>,\n false,\n ];\n \"Equals<{ a: any }, { a: 1 }> -> false\": [\n Equals<{ a: any }, { a: 1 }>,\n false,\n ];\n \"Equals<{ a: unknown }, { a: 1 }> -> false\": [\n Equals<{ a: unknown }, { a: 1 }>,\n false,\n ];\n \"Equals<{ a: never }, { a: 1 }> -> false\": [\n Equals<{ a: never }, { a: 1 }>,\n false,\n ];\n \"Equals<{ a: 1 }, { a: any }> -> false\": [\n Equals<{ a: 1 }, { a: any }>,\n false,\n ];\n \"Equals<{ a: 1 }, { a: unknown }> -> false\": [\n Equals<{ a: 1 }, { a: unknown }>,\n false,\n ];\n \"Equals<{ a: 1 }, { a: never }> -> false\": [\n Equals<{ a: 1 }, { a: never }>,\n false,\n ];\n \"Equals<{ (): string } & { (x: string): number },{ (x: string): number } & { (): string }>\": [\n Equals<\n { (): string } & { (x: string): number },\n { (x: string): number } & { (): string }\n >,\n false,\n ];\n};\n\ntype check = {\n [name in keyof tests]: Equals<tests[name][0], tests[name][1]> extends true\n ? true\n : false;\n};\n\ntype failingtests = {\n [name in keyof check]: check[name] extends true ? never : name;\n}[keyof check];\n\nconst popStackTrace = (error: any) => {\n const lines = error.stack.split(\"\\n\") as string[];\n const at = lines.findIndex((line) => line.includes(\"at\"));\n lines.splice(at, 1);\n error.stack = lines.join(\"\\n\");\n return error;\n};\n\nexport function ex<Received>(received: Received) {\n return {\n toBe<Expected>(\n expected: Expected,\n ): Equals<Received, Expected> extends true\n ? { ok: true }\n : { expected: Expected; received: Received } {\n try {\n expect(received).toBe(expected);\n } catch (error) {\n throw popStackTrace(error);\n }\n return { ok: true } as any;\n },\n toStrictEqual<Expected>(\n expected: Expected,\n ): Equals<Received, Expected> extends true\n ? { ok: true }\n : { expected: Expected; received: Received } {\n try {\n expect(received).toStrictEqual(expected);\n } catch (error) {\n throw popStackTrace(error);\n }\n return { ok: true } as any;\n },\n toBeInstanceOf<Expected extends Constructor>(\n expected: Expected,\n ): Equals<Received, InstanceType<Expected>> extends true\n ? { ok: true }\n : { expected: InstanceType<Expected>; received: Received } {\n try {\n expect(received).toBeInstanceOf(expected);\n } catch (error) {\n throw popStackTrace(error);\n }\n return { ok: true } as any;\n },\n toHaveFirstParam<Expected>(): Received extends (\n first: infer P,\n ...rest: any[]\n ) => any\n ? Equals<P, Expected> extends true\n ? { ok: true }\n : { expected: Expected; received: P }\n : Received extends Constructor<any, [infer P, ...any[]]>\n ? Equals<P, Expected> extends true\n ? { ok: true }\n : { expected: Expected; received: P }\n : \"not a function or constructor\" {\n return { ok: true } as any;\n },\n };\n}\n"]}
|