@ddd-ts/traits 0.0.0-compute-timeout-on-process.2 → 0.0.0-compute-timeout-on-process.4

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.
@@ -0,0 +1,94 @@
1
+ //#region src/index.d.ts
2
+ type Constructor<in Props = any, Result extends {} = {}> = new (props: Props) => Result;
3
+ type AbstractConstructor<Props = any, Result extends {} = {}> = abstract new (props: Props) => Result;
4
+ type Trait<Factory extends <Base extends AbstractConstructor>(base: Base) => AbstractConstructor = any> = {
5
+ factory: Factory;
6
+ superTraits: readonly Trait<any>[];
7
+ };
8
+ type Explode<T> = { [P in keyof T]: T[P] };
9
+ 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[]> = T extends [] ? {} : T extends never[] ? {} : UnionToIntersection<InstanceType<ReturnType<[...T][number]["factory"]>>>;
12
+ type MergeParameter<T extends readonly Trait[]> = T extends [] ? {} : T extends never[] ? {} : ConstructorParameters<ReturnType<[...T][number]["factory"]>>[0] extends {} ? UnionToIntersection<ConstructorParameters<ReturnType<[...T][number]["factory"]>>[0]> : ConstructorParameters<ReturnType<[...T][number]["factory"]>>[0];
13
+ type ApplyTraits<T extends readonly Trait[]> = {
14
+ new (param: MergeParameter<T>): MergeInstanceSide<T>;
15
+ } & MergeStaticSide<T>;
16
+ type CheckTraitRequirements<Traits extends readonly Trait[]> = CheckTraitRequirementsInternal<[], Traits>;
17
+ type CheckTraitRequirementsInternal<AppliedTraits extends readonly Trait[], RemainingTraits extends readonly Trait[]> = RemainingTraits extends readonly [infer ApplyingTrait extends Trait, ...infer Rest extends Trait[]] ? MergeParameter<AppliedTraits> extends MergeParameter<ApplyingTrait["superTraits"]> ? MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<ApplyingTrait["superTraits"]> ? CheckTraitRequirementsInternal<[...AppliedTraits, ApplyingTrait], Rest> : {
18
+ error: "Instance mismatch";
19
+ check: "MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<ApplyingTrait['superTraits']>";
20
+ left: MergeInstanceSide<AppliedTraits>;
21
+ right: MergeInstanceSide<ApplyingTrait["superTraits"]>;
22
+ result: MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<ApplyingTrait["superTraits"]> ? true : false;
23
+ } : {
24
+ error: "Parameter mismatch";
25
+ check: "MergeParameter<AppliedTraits> extends MergeParameter<[ApplyingTrait]>";
26
+ left: MergeParameter<AppliedTraits>;
27
+ right: MergeParameter<[ApplyingTrait]>;
28
+ result: MergeParameter<AppliedTraits> extends MergeParameter<[ApplyingTrait]> ? true : false;
29
+ } : "success";
30
+ declare function Subtrait<const SuperTraits extends readonly Trait[], Applied extends ApplyTraits<SuperTraits>, const Factory extends (base: Applied, props: ConstructorParameters<Applied>[0]) => AbstractConstructor>(superTraits: SuperTraits, factory: Factory): {
31
+ factory: Factory;
32
+ superTraits: SuperTraits;
33
+ symbol: symbol;
34
+ };
35
+ type Props<T extends {
36
+ __traits_props__: any;
37
+ } | Trait | Trait[]> = T extends {
38
+ __traits_props__: any;
39
+ } ? T["__traits_props__"] : T extends Trait ? MergeParameter<[T]> : T extends Trait[] ? MergeParameter<T> : never;
40
+ declare function Derive<R extends Trait[], C extends CheckTraitRequirements<R>>(...traits: R): C extends "success" ? ApplyTraits<R> & {
41
+ __traits__: R;
42
+ __traits_props__: MergeParameter<R>;
43
+ } : C;
44
+ declare function WithDerivations<B extends AbstractConstructor<any>, R extends Trait[]>(base: B, ...traits: R): CheckTraitRequirementsInternal<[], [{
45
+ factory: () => B;
46
+ superTraits: Trait[];
47
+ symbol: symbol;
48
+ }, ...R]> extends infer T ? T extends CheckTraitRequirementsInternal<[], [{
49
+ factory: () => B;
50
+ superTraits: Trait[];
51
+ symbol: symbol;
52
+ }, ...R]> ? T extends "success" ? (new (param: MergeParameter<[{
53
+ factory: () => B;
54
+ superTraits: Trait[];
55
+ symbol: symbol;
56
+ }, ...R]>) => MergeInstanceSide<[{
57
+ factory: () => B;
58
+ superTraits: Trait[];
59
+ symbol: symbol;
60
+ }, ...R]>) & UnionToIntersection<Explode<ReturnType<[{
61
+ factory: () => B;
62
+ superTraits: Trait[];
63
+ symbol: symbol;
64
+ }, ...R][number]["factory"]>>> & {
65
+ __traits__: [{
66
+ factory: () => B;
67
+ superTraits: Trait[];
68
+ symbol: symbol;
69
+ }, ...R];
70
+ __traits_props__: MergeParameter<[{
71
+ factory: () => B;
72
+ superTraits: Trait[];
73
+ symbol: symbol;
74
+ }, ...R]>;
75
+ } : T : never : never;
76
+ declare const Trait: <T extends (base: AbstractConstructor<{}, {}>) => AbstractConstructor<any, any>>(factory: T) => {
77
+ factory: T;
78
+ superTraits: Trait[];
79
+ symbol: symbol;
80
+ };
81
+ declare function implementsTrait<I extends InstanceType<any>, T extends Trait>(instance: I, trait: T): instance is ImplementsTrait<T>;
82
+ type ConstructorWithTrait<T extends Trait> = Omit<ReturnType<T["factory"]>, ""> & (new (...args: any[]) => ImplementsTrait<T>);
83
+ type HasTrait<T extends Trait | ((...args: any[]) => Trait)> = T extends ((...args: any[]) => Trait) ? HasTrait<ReturnType<T>> : T extends Trait ? ConstructorWithTrait<T> : never;
84
+ type ImplementsTrait<T extends Trait> = InstanceType<ReturnType<T["factory"]>>;
85
+ declare const WithProps: <P extends Record<string, any>>() => {
86
+ factory: (base: AbstractConstructor<{}, {}>) => {
87
+ new (props: {}): {};
88
+ } & (new (props: {}) => {} & P);
89
+ superTraits: Trait[];
90
+ symbol: symbol;
91
+ };
92
+ //#endregion
93
+ export { AbstractConstructor, ApplyTraits, CheckTraitRequirements, Constructor, ConstructorWithTrait, Derive, HasTrait, ImplementsTrait, MergeInstanceSide, MergeParameter, Props, Subtrait, Trait, UnionToIntersection, WithDerivations, WithProps, implementsTrait };
94
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ //#region src/index.ts
2
+ function Subtrait(superTraits, factory) {
3
+ return {
4
+ factory,
5
+ superTraits,
6
+ symbol: Symbol()
7
+ };
8
+ }
9
+ function Derive(...traits) {
10
+ let current = class {};
11
+ for (const trait of traits) current = trait.factory(current);
12
+ for (const trait of traits) current[trait.symbol] = true;
13
+ return current;
14
+ }
15
+ function WithDerivations(base, ...traits) {
16
+ return Derive(Trait(() => base), ...traits);
17
+ }
18
+ const Trait = (factory) => {
19
+ return {
20
+ factory,
21
+ superTraits: [],
22
+ symbol: Symbol()
23
+ };
24
+ };
25
+ function implementsTrait(instance, trait) {
26
+ return instance.constructor[trait.symbol] === true;
27
+ }
28
+ const WithProps = () => Trait((base) => {
29
+ class Intermediate extends base {}
30
+ return Intermediate;
31
+ });
32
+
33
+ //#endregion
34
+ export { Derive, Subtrait, Trait, WithDerivations, WithProps, implementsTrait };
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export type Constructor<in Props = any, Result extends {} = {}> = new (\n props: Props,\n) => Result;\nexport type AbstractConstructor<\n Props = any,\n Result extends {} = {},\n> = abstract new (props: Props) => Result;\n\nexport type Trait<\n Factory extends <Base extends AbstractConstructor>(\n base: Base,\n ) => AbstractConstructor = any,\n> = {\n factory: Factory;\n superTraits: readonly Trait<any>[];\n};\n\ntype Explode<T> = { [P in keyof T]: T[P] };\n\nexport type UnionToIntersection<U> = (\n U extends any\n ? (k: U) => void\n : never\n) extends (k: infer I) => void\n ? I\n : never;\n\ntype MergeStaticSide<T extends readonly Trait[]> = UnionToIntersection<\n Explode<ReturnType<[...T][number][\"factory\"]>>\n>;\n\nexport type MergeInstanceSide<T extends readonly Trait[]> = T extends []\n ? {}\n : T extends never[]\n ? {}\n : UnionToIntersection<InstanceType<ReturnType<[...T][number][\"factory\"]>>>;\n\nexport type MergeParameter<T extends readonly Trait[]> = T extends []\n ? {}\n : T extends never[]\n ? {}\n : ConstructorParameters<ReturnType<[...T][number][\"factory\"]>>[0] extends {}\n ? UnionToIntersection<\n ConstructorParameters<ReturnType<[...T][number][\"factory\"]>>[0]\n >\n : ConstructorParameters<ReturnType<[...T][number][\"factory\"]>>[0];\n\nexport type ApplyTraits<T extends readonly Trait[]> = {\n new (param: MergeParameter<T>): MergeInstanceSide<T>;\n} & MergeStaticSide<T>;\n\nexport type CheckTraitRequirements<Traits extends readonly Trait[]> =\n CheckTraitRequirementsInternal<[], Traits>;\n\ntype CheckTraitRequirementsInternal<\n AppliedTraits extends readonly Trait[],\n RemainingTraits extends readonly Trait[],\n> = RemainingTraits extends readonly [\n infer ApplyingTrait extends Trait,\n ...infer Rest extends Trait[],\n]\n ? MergeParameter<AppliedTraits> extends MergeParameter<\n ApplyingTrait[\"superTraits\"]\n >\n ? MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<\n ApplyingTrait[\"superTraits\"]\n >\n ? CheckTraitRequirementsInternal<[...AppliedTraits, ApplyingTrait], Rest>\n : {\n error: \"Instance mismatch\";\n check: \"MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<ApplyingTrait['superTraits']>\";\n left: MergeInstanceSide<AppliedTraits>;\n right: MergeInstanceSide<ApplyingTrait[\"superTraits\"]>;\n result: MergeInstanceSide<AppliedTraits> extends MergeInstanceSide<\n ApplyingTrait[\"superTraits\"]\n >\n ? true\n : false;\n }\n : {\n error: \"Parameter mismatch\";\n check: \"MergeParameter<AppliedTraits> extends MergeParameter<[ApplyingTrait]>\";\n left: MergeParameter<AppliedTraits>;\n right: MergeParameter<[ApplyingTrait]>;\n result: MergeParameter<AppliedTraits> extends MergeParameter<\n [ApplyingTrait]\n >\n ? true\n : false;\n }\n : \"success\";\n\nexport function Subtrait<\n const SuperTraits extends readonly Trait[],\n Applied extends ApplyTraits<SuperTraits>,\n const Factory extends (\n base: Applied,\n props: ConstructorParameters<Applied>[0],\n ) => AbstractConstructor,\n>(superTraits: SuperTraits, factory: Factory) {\n const symbol = Symbol();\n return {\n factory,\n superTraits,\n symbol,\n };\n}\n\nexport type Props<T extends { __traits_props__: any } | Trait | Trait[]> =\n T extends {\n __traits_props__: any;\n }\n ? T[\"__traits_props__\"]\n : T extends Trait\n ? MergeParameter<[T]>\n : T extends Trait[]\n ? MergeParameter<T>\n : never;\n\nexport function Derive<R extends Trait[], C extends CheckTraitRequirements<R>>(\n ...traits: R\n): C extends \"success\"\n ? ApplyTraits<R> & { __traits__: R; __traits_props__: MergeParameter<R> }\n : C {\n let current: Constructor = class {};\n for (const trait of traits) {\n current = trait.factory(current);\n }\n\n for (const trait of traits) {\n (current as any)[(trait as any).symbol] = true;\n }\n\n return current as any;\n}\n\nexport function WithDerivations<\n B extends AbstractConstructor<any>,\n R extends Trait[],\n>(base: B, ...traits: R) {\n return Derive(\n Trait(() => base),\n ...traits,\n );\n}\n\nexport const Trait = <\n T extends (\n base: AbstractConstructor<{}, {}>,\n ) => AbstractConstructor<any, any>,\n>(\n factory: T,\n) => {\n const symbol = Symbol();\n return { factory, superTraits: [] as Trait[], symbol };\n};\n\nexport function implementsTrait<I extends InstanceType<any>, T extends Trait>(\n instance: I,\n trait: T,\n): instance is ImplementsTrait<T> {\n return (instance as any).constructor[(trait as any).symbol] === true;\n}\n\nexport type ConstructorWithTrait<T extends Trait> = Omit<\n ReturnType<T[\"factory\"]>,\n \"\"\n> &\n (new (\n ...args: any[]\n ) => ImplementsTrait<T>);\n\nexport type HasTrait<T extends Trait | ((...args: any[]) => Trait)> =\n T extends (...args: any[]) => Trait\n ? HasTrait<ReturnType<T>>\n : T extends Trait\n ? ConstructorWithTrait<T>\n : never;\n\nexport type ImplementsTrait<T extends Trait> = InstanceType<\n ReturnType<T[\"factory\"]>\n>;\n\nexport const WithProps = <P extends Record<string, any>>() =>\n Trait((base) => {\n class Intermediate extends base {}\n type I = typeof Intermediate extends new (\n ...args: infer A\n ) => infer T\n ? new (\n ...args: A\n ) => T & P\n : never;\n return Intermediate as typeof Intermediate & I;\n });\n"],"mappings":";AA4FA,SAAgB,SAOd,aAA0B,SAAkB;AAE5C,QAAO;EACL;EACA;EACA,QAJa,QAAQ;EAKtB;;AAcH,SAAgB,OACd,GAAG,QAGC;CACJ,IAAI,UAAuB,MAAM;AACjC,MAAK,MAAM,SAAS,OAClB,WAAU,MAAM,QAAQ,QAAQ;AAGlC,MAAK,MAAM,SAAS,OAClB,CAAC,QAAiB,MAAc,UAAU;AAG5C,QAAO;;AAGT,SAAgB,gBAGd,MAAS,GAAG,QAAW;AACvB,QAAO,OACL,YAAY,KAAK,EACjB,GAAG,OACJ;;AAGH,MAAa,SAKX,YACG;AAEH,QAAO;EAAE;EAAS,aAAa,EAAE;EAAa,QAD/B,QAAQ;EAC+B;;AAGxD,SAAgB,gBACd,UACA,OACgC;AAChC,QAAQ,SAAiB,YAAa,MAAc,YAAY;;AAsBlE,MAAa,kBACX,OAAO,SAAS;CACd,MAAM,qBAAqB,KAAK;AAQhC,QAAO;EACP"}
package/package.json CHANGED
@@ -1,17 +1,20 @@
1
1
  {
2
2
  "name": "@ddd-ts/traits",
3
- "version": "0.0.0-compute-timeout-on-process.2",
3
+ "version": "0.0.0-compute-timeout-on-process.4",
4
4
  "types": "dist/index.d.ts",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "url": "git+https://github.com/ddd-ts/monorepo"
8
8
  },
9
+ "files": [
10
+ "dist"
11
+ ],
9
12
  "scripts": {
10
13
  "build": "tsdown --config node_modules/@ddd-ts/tools/tsdown.config.js",
11
14
  "test": "jest --config node_modules/@ddd-ts/tools/jest.config.js"
12
15
  },
13
16
  "devDependencies": {
14
- "@ddd-ts/tools": "0.0.0-compute-timeout-on-process.2",
17
+ "@ddd-ts/tools": "0.0.0-compute-timeout-on-process.4",
15
18
  "@types/jest": "^29.5.12"
16
19
  },
17
20
  "exports": {