@ddd-ts/traits 0.0.0-feat.kraaft.32bd1d8

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/README.md ADDED
@@ -0,0 +1,291 @@
1
+ # @ddd-ts/traits
2
+
3
+ A TypeScript library for implementing the trait pattern.
4
+
5
+ ## Installation
6
+
7
+ ```
8
+ npm install @ddd-ts/traits
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ The `@ddd-ts/traits` library provides utility functions for implementing the trait pattern in TypeScript. Traits allow you to compose reusable behaviors and mix them into classes without the need for inheritance.
14
+
15
+ ### Importing
16
+
17
+ ```typescript
18
+ import { Derive, Subtrait, Trait, implementsTrait } from "@ddd-ts/traits";
19
+ ```
20
+
21
+ ### Creating Traits
22
+
23
+ A trait is defined using the `Trait` function, which takes a base class and returns a new class that extends the base class with additional behavior.
24
+
25
+ ```typescript
26
+ const Swim = Trait(
27
+ (base) =>
28
+ class extends base {
29
+ swim() {
30
+ return 1;
31
+ }
32
+ }
33
+ );
34
+
35
+ const Walk = Trait(
36
+ (base) =>
37
+ class extends base {
38
+ walk() {
39
+ return 1;
40
+ }
41
+ }
42
+ );
43
+ ```
44
+
45
+ ### Deriving Traits
46
+
47
+ To apply a trait to a class, use the `Derive` function. It takes the trait as an argument and returns a new class that extends the base class with the trait's behavior.
48
+
49
+ ```typescript
50
+ class Fish extends Derive(Swim) {}
51
+
52
+ const fish = new Fish({});
53
+
54
+ console.log(fish.swim()); // Output: 1
55
+ ```
56
+
57
+ ### Overloading Trait Methods
58
+
59
+ You can override a trait method in a derived class by defining the same method and using the `super` keyword to call the base implementation.
60
+
61
+ ```typescript
62
+ class Dog extends Derive(Swim) {
63
+ swim() {
64
+ return super.swim() * 0.2;
65
+ }
66
+ }
67
+
68
+ const dog = new Dog({});
69
+
70
+ console.log(dog.swim()); // Output: 0.2
71
+ ```
72
+
73
+ ### Deriving Multiple Traits
74
+
75
+ You can derive multiple traits by passing them as arguments to the `Derive` function.
76
+
77
+ ```typescript
78
+ class Dog extends Derive(Swim, Walk) {}
79
+
80
+ const dog = new Dog({});
81
+
82
+ console.log(dog.swim()); // Output: 1
83
+ console.log(dog.walk()); // Output: 1
84
+ ```
85
+
86
+ ### Traits with Constructors
87
+
88
+ If a trait requires initialization with certain properties, you can define a constructor in the trait class. When deriving a trait, you can pass the required properties to the `super` constructor.
89
+
90
+ ```typescript
91
+ const Run = Trait(
92
+ (base) =>
93
+ class extends base {
94
+ speed: number;
95
+ constructor(props: { speed: number }) {
96
+ super(props);
97
+ this.speed = props.speed;
98
+ }
99
+ run() {
100
+ return 2 * this.speed;
101
+ }
102
+ }
103
+ );
104
+
105
+ class Athlete extends Derive(Run) {
106
+ constructor() {
107
+ super({ speed: 10 });
108
+ }
109
+ }
110
+
111
+ const athlete = new Athlete();
112
+
113
+ console.log(athlete.run()); // Output: 20
114
+ ```
115
+
116
+ ### Type Checking with Traits
117
+
118
+ You can use the `implementsTrait` function to check if an instance implements a specific trait.
119
+
120
+ ```typescript
121
+ class Athlete extends Derive(Run) {
122
+ constructor() {
123
+ super({ speed: 10 });
124
+ }
125
+ }
126
+
127
+ const athlete = new Athlete();
128
+
129
+ console.log(athlete instanceof Athlete); // Output: true
130
+ console.log(implementsTrait(athlete, Run)); // Output: true
131
+ ```
132
+
133
+ ### Generic Traits
134
+
135
+ Traits can also be generic, allowing you to specify additional type parameters when applying the trait.
136
+
137
+ ```typescript
138
+ const Eat = <E>() =>
139
+ Trait(
140
+ (base) =>
141
+ class extends base {
142
+ eat(_e: E) {}
143
+ }
144
+ );
145
+
146
+ class Animal extends Derive(Eat<string>()) {
147
+ do() {
148
+ this.eat("a");
149
+ // @ts-expect-error should
150
+
151
+ not allow to eat a number
152
+ this.eat(1);
153
+ }
154
+ }
155
+ ```
156
+
157
+ ### Subtraits
158
+
159
+ Subtraits allow you to define traits that depend on other traits. The `Subtrait` function is used to create a subtrait, specifying the supertraits it depends on and the additional behavior it provides.
160
+
161
+ ```typescript
162
+ const Walk = Trait(
163
+ (base) =>
164
+ class extends base {
165
+ walk() {}
166
+ }
167
+ );
168
+
169
+ const Run = Subtrait(
170
+ [Walk] as const, // supertrait of subtrait defined here
171
+ (base, Props) =>
172
+ class extends base {
173
+ run() {
174
+ this.walk();
175
+ this.walk();
176
+ this.walk();
177
+ }
178
+ }
179
+ );
180
+
181
+ class Athlete extends Derive(Walk, Run) {
182
+ do() {
183
+ this.walk();
184
+ this.run();
185
+ }
186
+ }
187
+ ```
188
+
189
+ ### Subtraits with Props
190
+
191
+ Subtraits can also accept additional properties in their constructors. The supertraits' properties are automatically forwarded to the subtrait's constructor.
192
+
193
+ ```typescript
194
+ const Walk = Trait(
195
+ (base) =>
196
+ class extends base {
197
+ walk() {
198
+ return 2;
199
+ }
200
+ }
201
+ );
202
+
203
+ const Run = Subtrait(
204
+ [Walk], // supertrait of subtrait defined here
205
+ (base) =>
206
+ class extends base {
207
+ speed: number;
208
+ constructor(props: { speed: number }) {
209
+ super({});
210
+ this.speed = props.speed;
211
+ }
212
+ run() {
213
+ return this.walk() * this.speed;
214
+ }
215
+ }
216
+ );
217
+
218
+ class Athlete extends Derive(Walk, Run) {
219
+ constructor() {
220
+ super({ speed: 10 });
221
+ }
222
+ start() {
223
+ return this.walk() + this.run();
224
+ }
225
+ }
226
+
227
+ const athlete = new Athlete();
228
+
229
+ console.log(athlete.start()); // Output: 22
230
+ ```
231
+
232
+ ### Forwarding Supertraits Props
233
+
234
+ When using subtraits with multiple supertraits, the properties of all supertraits are automatically forwarded to the subtrait's constructor.
235
+
236
+ ```typescript
237
+ const Walk = Trait(
238
+ (base) =>
239
+ class extends base {
240
+ speed: number;
241
+ constructor(props: { speed: number }) {
242
+ super(props);
243
+ this.speed = props.speed;
244
+ }
245
+ walk() {
246
+ return this.speed * 0.1;
247
+ }
248
+ }
249
+ );
250
+
251
+ const Fly = Trait(
252
+ (base) =>
253
+ class extends base {
254
+ wings: number;
255
+ constructor(props: { wings: number }) {
256
+ super({});
257
+ this.wings = props.wings;
258
+ }
259
+ fly() {
260
+ return this.wings;
261
+ }
262
+ }
263
+ );
264
+
265
+ const Land = Subtrait(
266
+ [Walk, Fly], // supertraits of subtrait defined here
267
+ (base, Props) =>
268
+ class extends base {
269
+ constructor(props: { weight: number } & typeof Props) {
270
+ super(props);
271
+ }
272
+ land() {
273
+ return this.walk() + this.fly() - this.weight;
274
+ }
275
+ }
276
+ );
277
+
278
+ class Athlete extends Derive(Walk, Fly, Land) {}
279
+
280
+ const athlete = new Athlete({ speed: 10, weight: 10, wings: 10 });
281
+
282
+ console.log(athlete.land()); // Output: 20
283
+ ```
284
+
285
+ ### Limitations
286
+
287
+ - The ordering of supertraits is important. Subtraits must be derived in the correct order of their dependencies.
288
+
289
+ ## License
290
+
291
+ This project is licensed under the [MIT License](LICENSE).
@@ -0,0 +1,47 @@
1
+ export type Constructor<Props extends {} = any> = new (props: Props) => any;
2
+ type Trait = {
3
+ factory: (a: Constructor<{}>) => Constructor;
4
+ superTraits: readonly Trait[];
5
+ };
6
+ type Explode<T> = {
7
+ [P in keyof T]: T[P];
8
+ };
9
+ export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
10
+ type MergeStaticSide<T extends readonly Trait[]> = UnionToIntersection<Explode<ReturnType<[...T][number]["factory"]>>>;
11
+ type MergeInstanceSide<T extends readonly Trait[]> = UnionToIntersection<InstanceType<ReturnType<[...T][number]["factory"]>>>;
12
+ export type MergeParameter<T extends readonly Trait[]> = T extends [] ? {} : T extends never[] ? {} : UnionToIntersection<ConstructorParameters<ReturnType<[...T][number]["factory"]>>[0]>;
13
+ export type ApplyTraits<T extends readonly Trait[]> = {
14
+ new (param: MergeParameter<T>): MergeInstanceSide<T>;
15
+ } & MergeStaticSide<T>;
16
+ export type CheckTraitRequirements<Traits extends readonly Trait[]> = CheckTraitRequirementsInternal<[], Traits>;
17
+ type CheckTraitRequirementsInternal<AppliedTraits extends readonly Trait[], RemainingTraits extends readonly Trait[]> = RemainingTraits extends readonly [
18
+ infer ApplyingTrait extends Trait,
19
+ ...infer Rest extends Trait[]
20
+ ] ? MergeParameter<AppliedTraits> extends MergeParameter<ApplyingTrait["superTraits"]> ? MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<ApplyingTrait["superTraits"]> ? CheckTraitRequirementsInternal<[...AppliedTraits, ApplyingTrait], Rest> : {
21
+ error: "Instance mismatch";
22
+ check: "MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<ApplyingTrait['superTraits']>";
23
+ left: MergeInstanceSide<AppliedTraits>;
24
+ right: MergeInstanceSide<ApplyingTrait["superTraits"]>;
25
+ result: MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<ApplyingTrait["superTraits"]> ? true : false;
26
+ } : {
27
+ error: "Parameter mismatch";
28
+ check: "MergeParameter<AppliedTraits> extends MergeParameter<[ApplyingTrait]>";
29
+ left: MergeParameter<AppliedTraits>;
30
+ right: MergeParameter<[ApplyingTrait]>;
31
+ result: MergeParameter<AppliedTraits> extends MergeParameter<[
32
+ ApplyingTrait
33
+ ]> ? true : false;
34
+ } : "success";
35
+ export declare function Subtrait<const SuperTraits extends readonly Trait[], Applied extends ApplyTraits<SuperTraits>, const Factory extends (base: Applied, props: ConstructorParameters<Applied>[0]) => Constructor>(superTraits: SuperTraits, factory: Factory): {
36
+ factory: (base: Applied) => ReturnType<Factory>;
37
+ superTraits: SuperTraits;
38
+ };
39
+ export declare function Derive<R extends Trait[], C extends CheckTraitRequirements<R>>(...traits: R): C extends "success" ? ApplyTraits<R> : C;
40
+ export declare const Trait: <T extends (a: Constructor<{}>) => Constructor>(factory: T) => {
41
+ factory: T;
42
+ superTraits: Trait[];
43
+ };
44
+ export declare function implementsTrait<I extends InstanceType<any>, T extends Trait>(instance: I, trait: T): instance is ImplementsTrait<T>;
45
+ export type ImplementsTrait<T extends Trait> = InstanceType<ReturnType<T["factory"]>>;
46
+ export {};
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.implementsTrait = exports.Trait = exports.Derive = exports.Subtrait = void 0;
4
+ function Subtrait(superTraits, factory) {
5
+ return {
6
+ factory: (base) => factory(base, "🚨 Error: the second parameter of the subtrait factory is to be used in types with typeof only"),
7
+ superTraits,
8
+ };
9
+ }
10
+ exports.Subtrait = Subtrait;
11
+ function Derive(...traits) {
12
+ let current = class {
13
+ };
14
+ for (const trait of traits) {
15
+ current = trait.factory(current);
16
+ }
17
+ for (const trait of traits) {
18
+ current[trait.symbol] = true;
19
+ }
20
+ return current;
21
+ }
22
+ exports.Derive = Derive;
23
+ const Trait = (factory) => {
24
+ const symbol = Symbol();
25
+ factory.symbol = symbol;
26
+ return { factory, superTraits: [] };
27
+ };
28
+ exports.Trait = Trait;
29
+ function implementsTrait(instance, trait) {
30
+ return instance.constructor[trait.symbol] === true;
31
+ }
32
+ exports.implementsTrait = implementsTrait;
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AA4EA,SAAgB,QAAQ,CAOtB,WAAwB,EAAE,OAAgB;IAC1C,OAAO;QACL,OAAO,EAAE,CAAC,IAAa,EAAuB,EAAE,CAC9C,OAAO,CACL,IAAW,EACX,gGAAuG,CACjG;QACV,WAAW;KACZ,CAAC;AACJ,CAAC;AAhBD,4BAgBC;AAED,SAAgB,MAAM,CACpB,GAAG,MAAS;IAEZ,IAAI,OAAO,GAAgB;KAAQ,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAClC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QACzB,OAAe,CAAE,KAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;KAChD;IAED,OAAO,OAAc,CAAC;AACxB,CAAC;AAbD,wBAaC;AACM,MAAM,KAAK,GAAG,CAA6B,OAAU,EAAE,EAAE;IAC9D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,OAAe,CAAC,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,EAAa,EAAE,CAAC;AACjD,CAAC,CAAC;AAJW,QAAA,KAAK,SAIhB;AAEF,SAAgB,eAAe,CAC7B,QAAW,EACX,KAAQ;IAER,OAAQ,QAAgB,CAAC,WAAW,CAAE,KAAa,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AACvE,CAAC;AALD,0CAKC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.d.ts","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const _1 = require(".");
4
+ describe("Traits", () => {
5
+ const Swim = (0, _1.Trait)((base) => class extends base {
6
+ swim() {
7
+ return 1;
8
+ }
9
+ });
10
+ const Walk = (0, _1.Trait)((base) => class extends base {
11
+ walk() {
12
+ return 1;
13
+ }
14
+ });
15
+ it("derives a trait", () => {
16
+ class Fish extends (0, _1.Derive)(Swim) {
17
+ }
18
+ const fish = new Fish({});
19
+ expect(fish.swim()).toBe(1);
20
+ });
21
+ it("overloads a trait method", () => {
22
+ class Dog extends (0, _1.Derive)(Swim) {
23
+ swim() {
24
+ return super.swim() * 0.2;
25
+ }
26
+ }
27
+ const dog = new Dog({});
28
+ expect(dog.swim()).toBe(0.2);
29
+ });
30
+ it("derives multiple traits", () => {
31
+ class Dog extends (0, _1.Derive)(Swim, Walk) {
32
+ }
33
+ const dog = new Dog({});
34
+ expect(dog.swim()).toBe(1);
35
+ expect(dog.walk()).toBe(1);
36
+ });
37
+ const Run = (0, _1.Trait)((base) => class extends base {
38
+ speed;
39
+ constructor(props) {
40
+ super(props);
41
+ this.speed = props.speed;
42
+ }
43
+ run() {
44
+ return 2 * this.speed;
45
+ }
46
+ });
47
+ it("derives a trait with a constructor", () => {
48
+ class Athlete extends (0, _1.Derive)(Run) {
49
+ constructor() {
50
+ super({ speed: 10 });
51
+ }
52
+ }
53
+ class ErrorAthlete extends (0, _1.Derive)(Run) {
54
+ constructor() {
55
+ // @ts-expect-error ensures the super constructor is called with the right props
56
+ super({});
57
+ }
58
+ }
59
+ const walker = new Athlete();
60
+ expect(walker.run()).toBe(20);
61
+ });
62
+ const Jump = (0, _1.Trait)((base) => class extends base {
63
+ agility;
64
+ constructor(props) {
65
+ super(props);
66
+ this.agility = props.agility;
67
+ }
68
+ jump() {
69
+ return 1;
70
+ }
71
+ });
72
+ it("derives multiple trait with a constructor", () => {
73
+ class Athlete extends (0, _1.Derive)(Run, Jump) {
74
+ constructor() {
75
+ super({ speed: 10, agility: 10 });
76
+ }
77
+ }
78
+ const walker = new Athlete();
79
+ expect(walker.run()).toBe(20);
80
+ });
81
+ it("asserts an instance implements a trait", () => {
82
+ class Athlete extends (0, _1.Derive)(Run, Jump) {
83
+ constructor() {
84
+ super({ speed: 10, agility: 10 });
85
+ }
86
+ }
87
+ const athlete = new Athlete();
88
+ expect(athlete instanceof Athlete).toBe(true);
89
+ expect((0, _1.implementsTrait)(athlete, Run)).toBe(true);
90
+ expect((0, _1.implementsTrait)(athlete, Jump)).toBe(true);
91
+ const unknown = athlete;
92
+ if ((0, _1.implementsTrait)(unknown, Run) && (0, _1.implementsTrait)(unknown, Jump)) {
93
+ // if type error, ensure the type guard works
94
+ unknown.run();
95
+ unknown.jump();
96
+ }
97
+ });
98
+ it("allows generic traits", () => {
99
+ const Eat = () => (0, _1.Trait)((base) => class extends base {
100
+ eat(_e) { }
101
+ });
102
+ class Animal extends (0, _1.Derive)(Eat()) {
103
+ do() {
104
+ this.eat("a");
105
+ // @ts-expect-error should not allow to eat a number
106
+ this.eat(1);
107
+ }
108
+ }
109
+ });
110
+ describe("Subtraits", () => {
111
+ it("allows to specify supertraits", () => {
112
+ const Walk = (0, _1.Trait)((base) => class extends base {
113
+ walk() { }
114
+ });
115
+ const Run = (0, _1.Subtrait)([Walk], // supertrait of subtrait defined here
116
+ (base, Props) => class extends base {
117
+ run() {
118
+ this.walk();
119
+ this.walk();
120
+ this.walk();
121
+ }
122
+ });
123
+ // @ts-expect-error should not allow to create a runner without a walker
124
+ class ErrorAthlete extends (0, _1.Derive)(Run) {
125
+ }
126
+ // @ts-expect-error ordering matters: an athlete is a Runner because it is a walker
127
+ class ErrorAthlete2 extends (0, _1.Derive)(Run, Walk) {
128
+ }
129
+ class Athlete extends (0, _1.Derive)(Walk, Run) {
130
+ do() {
131
+ this.walk();
132
+ this.run();
133
+ }
134
+ }
135
+ });
136
+ it("allows to specify supertraits with props", () => {
137
+ const Walk = (0, _1.Trait)((base) => class extends base {
138
+ walk() {
139
+ return 2;
140
+ }
141
+ });
142
+ const Run = (0, _1.Subtrait)([Walk], // supertrait of subtrait defined here
143
+ (base) => class extends base {
144
+ speed;
145
+ constructor(props) {
146
+ super({});
147
+ this.speed = props.speed;
148
+ }
149
+ run() {
150
+ return this.walk() * this.speed;
151
+ }
152
+ });
153
+ class Athlete extends (0, _1.Derive)(Walk, Run) {
154
+ constructor() {
155
+ super({ speed: 10 });
156
+ }
157
+ start() {
158
+ return this.walk() + this.run();
159
+ }
160
+ }
161
+ const athlete = new Athlete();
162
+ expect(athlete.start()).toBe(22);
163
+ });
164
+ it("ensures supertraits props are forwarded", () => {
165
+ const Walk = (0, _1.Trait)((base) => class extends base {
166
+ speed;
167
+ constructor(props) {
168
+ super(props);
169
+ this.speed = props.speed;
170
+ }
171
+ walk() {
172
+ return this.speed * 0.1;
173
+ }
174
+ });
175
+ const Run = (0, _1.Subtrait)([Walk], // supertrait of subtrait defined here
176
+ (base, Props) => class extends base {
177
+ weigth;
178
+ constructor(props) {
179
+ super(props);
180
+ this.weigth = props.weigth;
181
+ }
182
+ run() {
183
+ return this.walk() * 10 + this.weigth;
184
+ }
185
+ });
186
+ class Athlete extends (0, _1.Derive)(Walk, Run) {
187
+ start() {
188
+ return this.walk() + this.run();
189
+ }
190
+ }
191
+ // @ts-expect-error missing subtrait props
192
+ new Athlete({ speed: 10 });
193
+ // @ts-expect-error missing supertrait props
194
+ new Athlete({ weigth: 10 });
195
+ const athlete = new Athlete({ speed: 10, weigth: 10 });
196
+ expect(athlete.start()).toBe(21);
197
+ });
198
+ it("ensures supertraits props are forwarded with multiple subtraits", () => {
199
+ const Walk = (0, _1.Trait)((base) => class Walk extends base {
200
+ speed;
201
+ constructor(props) {
202
+ super({});
203
+ this.speed = props.speed;
204
+ }
205
+ walk() {
206
+ return this.speed * 0.1;
207
+ }
208
+ });
209
+ const Fly = (0, _1.Trait)((base) => class Fly extends base {
210
+ wings;
211
+ constructor(props) {
212
+ super({});
213
+ this.wings = props.wings;
214
+ }
215
+ fly() {
216
+ // @ts-expect-error wings is a number
217
+ const s = this.wings;
218
+ return this.wings;
219
+ }
220
+ });
221
+ const Land = (0, _1.Subtrait)([Walk, Fly], // supertrait of subtrait defined here
222
+ (base, Props) => class Land extends base {
223
+ constructor(props) {
224
+ super(props);
225
+ }
226
+ land() {
227
+ return this.walk() + this.fly() - this.weigth;
228
+ }
229
+ });
230
+ // @ts-expect-error Land requires Walk & Fly
231
+ (class extends (0, _1.Derive)(Land) {
232
+ });
233
+ // @ts-expect-error Land requires Walk & Fly
234
+ (class extends (0, _1.Derive)(Walk, Land) {
235
+ });
236
+ // @ts-expect-error Land requires Walk & Fly
237
+ (class extends (0, _1.Derive)(Fly, Land) {
238
+ });
239
+ // @ts-expect-error Land requires Walk & Fly in correct order
240
+ (class extends (0, _1.Derive)(Land, Walk, Fly) {
241
+ });
242
+ class Athlete extends (0, _1.Derive)(Walk, Fly, Land) {
243
+ }
244
+ // @ts-expect-error missing props
245
+ new Athlete({ speed: 10 });
246
+ // @ts-expect-error missing props
247
+ new Athlete({ wings: 10 });
248
+ // @ts-expect-error missing props
249
+ new Athlete({ weigth: 10 });
250
+ // @ts-expect-error missing props
251
+ new Athlete({ speed: 10, weigth: 10 });
252
+ // @ts-expect-error missing props
253
+ new Athlete({ speed: 10, wings: 10 });
254
+ // @ts-expect-error missing props
255
+ new Athlete({ weigth: 10, wings: 10 });
256
+ new Athlete({ speed: 10, weigth: 10, wings: 10 });
257
+ });
258
+ it("ensures a class can derive traits that dont depend on all other traits", () => {
259
+ const Walk = (0, _1.Trait)((base) => class Walk extends base {
260
+ speed;
261
+ constructor(props) {
262
+ super({});
263
+ this.speed = props.speed;
264
+ }
265
+ walk() {
266
+ return this.speed * 0.1;
267
+ }
268
+ });
269
+ const Fly = (0, _1.Trait)((base) => class Fly extends base {
270
+ wings;
271
+ constructor(props) {
272
+ super({});
273
+ this.wings = props.wings;
274
+ }
275
+ fly() {
276
+ // @ts-expect-error wings is a number
277
+ const s = this.wings;
278
+ return this.wings;
279
+ }
280
+ });
281
+ const Land = (0, _1.Subtrait)([Walk], // supertrait of subtrait defined here
282
+ (base, Props) => class Land extends base {
283
+ constructor(props) {
284
+ super(props);
285
+ }
286
+ land() {
287
+ return this.walk() - this.weigth;
288
+ }
289
+ static isLander() {
290
+ return true;
291
+ }
292
+ });
293
+ // @ts-expect-error Land requires Walk & Fly
294
+ (class extends (0, _1.Derive)(Land) {
295
+ });
296
+ // @ts-expect-error Land requires Walk
297
+ (class extends (0, _1.Derive)(Fly, Land) {
298
+ });
299
+ // @ts-expect-error Land requires Walk & Fly in correct order
300
+ (class extends (0, _1.Derive)(Land, Walk, Fly) {
301
+ });
302
+ // @ts-expect-error Land requires Walk & Fly in correct order
303
+ (class extends (0, _1.Derive)(Fly, Land, Walk) {
304
+ });
305
+ class Athlete extends (0, _1.Derive)(Walk, Fly, Land) {
306
+ }
307
+ // @ts-expect-error missing props
308
+ new Athlete({ speed: 10 });
309
+ // @ts-expect-error missing props
310
+ new Athlete({ wings: 10 });
311
+ // @ts-expect-error missing props
312
+ new Athlete({ weigth: 10 });
313
+ // @ts-expect-error missing props
314
+ new Athlete({ speed: 10, weigth: 10 });
315
+ // @ts-expect-error missing props
316
+ new Athlete({ speed: 10, wings: 10 });
317
+ // @ts-expect-error missing props
318
+ new Athlete({ weigth: 10, wings: 10 });
319
+ new Athlete({ speed: 10, weigth: 10, wings: 10 });
320
+ });
321
+ });
322
+ });
323
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@ddd-ts/traits",
3
+ "version": "0.0.0-feat.kraaft.32bd1d8",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "license": "MIT",
7
+ "scripts": {
8
+ "build": "builder",
9
+ "test": "test-runner"
10
+ },
11
+ "devDependencies": {
12
+ "@ddd-ts/dev": "*"
13
+ }
14
+ }