@shivaedev/service 0.8.1 → 0.8.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.2 - 2026-11-07
4
+
5
+ ### Fixed
6
+
7
+ - Preserve schema result types and decoding service requirements through generic service methods.
8
+
3
9
  ## 0.8.1 - 2026-11-07
4
10
 
5
11
  ### Changed
@@ -17,7 +17,7 @@ interface ServiceMembersMustBeMethods {
17
17
  type OrdinaryMethodProof<TName extends PropertyKey, TMethod, TRequirements extends RequirementRecord> = [
18
18
  Exclude<MethodRequirements<TMethod>, RequirementsOf<TRequirements> | Scope.Scope>
19
19
  ] extends [never] ? TMethod : MethodHasUndeclaredServiceRequirements<TName, Exclude<MethodRequirements<TMethod>, RequirementsOf<TRequirements> | Scope.Scope>>;
20
- type SupportedMethod<TName extends PropertyKey, TMethod, TRequirements extends RequirementRecord> = TMethod extends GenericMethodDescriptor<AnyMethod> ? TMethod : TMethod extends AnyMethod ? HasDistinctCallSignatures<TMethod> extends true ? GenericOrStructurallyOverloadedMethodsAreUnsupported : TMethod extends (...arguments_: infer TArguments) => infer TResult ? ((...arguments_: TArguments) => TResult) extends TMethod ? OrdinaryMethodProof<TName, TMethod, TRequirements> : GenericOrStructurallyOverloadedMethodsAreUnsupported : GenericOrStructurallyOverloadedMethodsAreUnsupported : ServiceMembersMustBeMethods;
20
+ type SupportedMethod<TName extends PropertyKey, TMethod, TRequirements extends RequirementRecord> = TMethod extends GenericMethodDescriptor<AnyMethod> ? TMethod extends GenericMethodDescriptor<infer TGenericMethod> ? [HasDistinctCallSignatures<TGenericMethod>] extends [true] ? GenericOrStructurallyOverloadedMethodsAreUnsupported : TMethod : TMethod : TMethod extends AnyMethod ? HasDistinctCallSignatures<TMethod> extends true ? GenericOrStructurallyOverloadedMethodsAreUnsupported : TMethod extends (...arguments_: infer TArguments) => infer TResult ? ((...arguments_: TArguments) => TResult) extends TMethod ? OrdinaryMethodProof<TName, TMethod, TRequirements> : GenericOrStructurallyOverloadedMethodsAreUnsupported : GenericOrStructurallyOverloadedMethodsAreUnsupported : ServiceMembersMustBeMethods;
21
21
  export type MethodProof<TMethods extends MethodInventory, TRequirements extends RequirementRecord> = {
22
22
  readonly [TName in keyof TMethods]: SupportedMethod<TName, TMethods[TName], TRequirements>;
23
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MethodProof.d.ts","sourceRoot":"","sources":["../src/MethodProof.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EACX,SAAS,EACT,uBAAuB,EACvB,oDAAoD,EACpD,yBAAyB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAE3E,KAAK,kBAAkB,CAAC,OAAO,IAAI,OAAO,SAAS,CAAC,GAAG,UAAU,EAAE,SAAS,KAAK,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC,GACzI,aAAa,GACb,KAAK,CAAC;AAET,UAAU,sCAAsC,CAAC,KAAK,SAAS,WAAW,EAAE,QAAQ;IACnF,QAAQ,CAAC,uBAAuB,EAAE,qEAAqE,CAAC;IACxG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;CACnC;AAED,UAAU,2BAA2B;IACpC,QAAQ,CAAC,uBAAuB,EAAE,iCAAiC,CAAC;CACpE;AAED,KAAK,mBAAmB,CAAC,KAAK,SAAS,WAAW,EAAE,OAAO,EAAE,aAAa,SAAS,iBAAiB,IAAI;IACvG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;CACjF,SAAS,CAAC,KAAK,CAAC,GACd,OAAO,GACP,sCAAsC,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEpI,KAAK,eAAe,CAAC,KAAK,SAAS,WAAW,EAAE,OAAO,EAAE,aAAa,SAAS,iBAAiB,IAC/F,OAAO,SAAS,uBAAuB,CAAC,SAAS,CAAC,GAC/C,OAAO,GACP,OAAO,SAAS,SAAS,GACxB,yBAAyB,CAAC,OAAO,CAAC,SAAS,IAAI,GAC9C,oDAAoD,GACpD,OAAO,SAAS,CAAC,GAAG,UAAU,EAAE,MAAM,UAAU,KAAK,MAAM,OAAO,GACjE,CAAC,CAAC,GAAG,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,SAAS,OAAO,GACvD,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,GAClD,oDAAoD,GACrD,oDAAoD,GACtD,2BAA2B,CAAC;AAEjC,MAAM,MAAM,WAAW,CAAC,QAAQ,SAAS,eAAe,EAAE,aAAa,SAAS,iBAAiB,IAAI;IACpG,QAAQ,EAAE,KAAK,IAAI,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAC1F,CAAC"}
1
+ {"version":3,"file":"MethodProof.d.ts","sourceRoot":"","sources":["../src/MethodProof.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EACX,SAAS,EACT,uBAAuB,EACvB,oDAAoD,EACpD,yBAAyB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAE3E,KAAK,kBAAkB,CAAC,OAAO,IAAI,OAAO,SAAS,CAAC,GAAG,UAAU,EAAE,SAAS,KAAK,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC,GACzI,aAAa,GACb,KAAK,CAAC;AAET,UAAU,sCAAsC,CAAC,KAAK,SAAS,WAAW,EAAE,QAAQ;IACnF,QAAQ,CAAC,uBAAuB,EAAE,qEAAqE,CAAC;IACxG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;CACnC;AAED,UAAU,2BAA2B;IACpC,QAAQ,CAAC,uBAAuB,EAAE,iCAAiC,CAAC;CACpE;AAED,KAAK,mBAAmB,CAAC,KAAK,SAAS,WAAW,EAAE,OAAO,EAAE,aAAa,SAAS,iBAAiB,IAAI;IACvG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;CACjF,SAAS,CAAC,KAAK,CAAC,GACd,OAAO,GACP,sCAAsC,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEpI,KAAK,eAAe,CAAC,KAAK,SAAS,WAAW,EAAE,OAAO,EAAE,aAAa,SAAS,iBAAiB,IAC/F,OAAO,SAAS,uBAAuB,CAAC,SAAS,CAAC,GAC/C,OAAO,SAAS,uBAAuB,CAAC,MAAM,cAAc,CAAC,GAC5D,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GACzD,oDAAoD,GACpD,OAAO,GACR,OAAO,GACR,OAAO,SAAS,SAAS,GACxB,yBAAyB,CAAC,OAAO,CAAC,SAAS,IAAI,GAC9C,oDAAoD,GACpD,OAAO,SAAS,CAAC,GAAG,UAAU,EAAE,MAAM,UAAU,KAAK,MAAM,OAAO,GACjE,CAAC,CAAC,GAAG,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,SAAS,OAAO,GACvD,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,GAClD,oDAAoD,GACrD,oDAAoD,GACtD,2BAA2B,CAAC;AAEjC,MAAM,MAAM,WAAW,CAAC,QAAQ,SAAS,eAAe,EAAE,aAAa,SAAS,iBAAiB,IAAI;IACpG,QAAQ,EAAE,KAAK,IAAI,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAC1F,CAAC"}
@@ -1,18 +1,15 @@
1
1
  import type { Effect } from "effect";
2
2
  export type AnyMethod = (...arguments_: readonly never[]) => Effect.Effect<unknown, unknown, unknown>;
3
- export interface GenericMethodDescriptor<TMethod extends AnyMethod> {
4
- readonly _tag: "GenericMethod";
5
- readonly method: TMethod;
6
- }
7
- type Same<TLeft, TRight> = (<TValue>() => TValue extends TLeft ? 1 : 2) extends <TValue>() => (TValue extends TRight ? 1 : 2) ? true : false;
8
3
  export type HasDistinctCallSignatures<TMethod> = TMethod extends {
9
- (...arguments_: infer TFirstArguments): infer TFirstResult;
10
- (...arguments_: infer TLastArguments): infer TLastResult;
11
- } ? Same<TFirstArguments, TLastArguments> extends true ? Same<TFirstResult, TLastResult> extends true ? false : true : true : false;
4
+ (...arguments_: infer TFirstArguments): unknown;
5
+ (...arguments_: infer TLastArguments): unknown;
6
+ } ? [TFirstArguments] extends [TLastArguments] ? [TLastArguments] extends [TFirstArguments] ? false : true : true : false;
12
7
  export interface GenericOrStructurallyOverloadedMethodsAreUnsupported {
13
8
  readonly _serviceDefinitionError: "generic and structurally overloaded methods are unsupported";
14
9
  }
15
- type MarkedMethod<TMethod extends AnyMethod> = HasDistinctCallSignatures<TMethod> extends true ? GenericOrStructurallyOverloadedMethodsAreUnsupported : GenericMethodDescriptor<TMethod>;
16
- export declare function genericMethod<TMethod extends AnyMethod>(method: TMethod): MarkedMethod<TMethod>;
17
- export {};
10
+ export interface GenericMethodDescriptor<TMethod extends AnyMethod> {
11
+ readonly _tag: "GenericMethod";
12
+ readonly method: TMethod;
13
+ }
14
+ export declare function genericMethod<TMethod extends AnyMethod>(method: TMethod): GenericMethodDescriptor<TMethod>;
18
15
  //# sourceMappingURL=genericMethod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"genericMethod.d.ts","sourceRoot":"","sources":["../src/genericMethod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,SAAS,KAAK,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEtG,MAAM,WAAW,uBAAuB,CAAC,OAAO,SAAS,SAAS;IACjE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CACzB;AAED,KAAK,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,OAAO,MAAM,SAAS,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,QAAO,MAAM,SAAS,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA,GAAG,IAAI,GAAG,KAAK,CAAC;AAE3I,MAAM,MAAM,yBAAyB,CAAC,OAAO,IAAI,OAAO,SAAS;IAChE,CAAC,GAAG,UAAU,EAAE,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC;IAC3D,CAAC,GAAG,UAAU,EAAE,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC;CACzD,GACE,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,SAAS,IAAI,GACjD,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,IAAI,GAC3C,KAAK,GACL,IAAI,GACL,IAAI,GACL,KAAK,CAAC;AAET,MAAM,WAAW,oDAAoD;IACpE,QAAQ,CAAC,uBAAuB,EAAE,6DAA6D,CAAC;CAChG;AAED,KAAK,YAAY,CAAC,OAAO,SAAS,SAAS,IAC1C,yBAAyB,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,oDAAoD,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAE3I,wBAAgB,aAAa,CAAC,OAAO,SAAS,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"genericMethod.d.ts","sourceRoot":"","sources":["../src/genericMethod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,SAAS,KAAK,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEtG,MAAM,MAAM,yBAAyB,CAAC,OAAO,IAAI,OAAO,SAAS;IAChE,CAAC,GAAG,UAAU,EAAE,MAAM,eAAe,GAAG,OAAO,CAAC;IAChD,CAAC,GAAG,UAAU,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC;CAC/C,GACE,CAAC,eAAe,CAAC,SAAS,CAAC,cAAc,CAAC,GACzC,CAAC,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,GACzC,KAAK,GACL,IAAI,GACL,IAAI,GACL,KAAK,CAAC;AAET,MAAM,WAAW,oDAAoD;IACpE,QAAQ,CAAC,uBAAuB,EAAE,6DAA6D,CAAC;CAChG;AAED,MAAM,WAAW,uBAAuB,CAAC,OAAO,SAAS,SAAS;IACjE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,aAAa,CAAC,OAAO,SAAS,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"genericMethod.js","sourceRoot":"","sources":["../src/genericMethod.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC9C,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"genericMethod.js","sourceRoot":"","sources":["../src/genericMethod.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC9C,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AAC1C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/service",
3
- "version": "0.8.1",
3
+ "version": "0.8.2",
4
4
  "description": "Declared Effect services with scoped initialization and bound dependencies",
5
5
  "keywords": [
6
6
  "effect"
@@ -44,9 +44,9 @@
44
44
  ],
45
45
  "devDependencies": {
46
46
  "@effect/vitest": "4.1.1",
47
- "@shivaedev/quality": "0.70.1",
47
+ "@shivaedev/quality": "0.72.2",
48
48
  "@shivaedev/test": "0.17.1",
49
- "@shivaedev/test-story": "0.45.2",
49
+ "@shivaedev/test-story": "0.45.3",
50
50
  "@types/node": "24.19.2",
51
51
  "effect": "4.1.1",
52
52
  "typescript": "7.0.2",
@@ -37,7 +37,11 @@ type OrdinaryMethodProof<TName extends PropertyKey, TMethod, TRequirements exten
37
37
 
38
38
  type SupportedMethod<TName extends PropertyKey, TMethod, TRequirements extends RequirementRecord> =
39
39
  TMethod extends GenericMethodDescriptor<AnyMethod>
40
- ? TMethod
40
+ ? TMethod extends GenericMethodDescriptor<infer TGenericMethod>
41
+ ? [HasDistinctCallSignatures<TGenericMethod>] extends [true]
42
+ ? GenericOrStructurallyOverloadedMethodsAreUnsupported
43
+ : TMethod
44
+ : TMethod
41
45
  : TMethod extends AnyMethod
42
46
  ? HasDistinctCallSignatures<TMethod> extends true
43
47
  ? GenericOrStructurallyOverloadedMethodsAreUnsupported
@@ -2,19 +2,12 @@ import type { Effect } from "effect";
2
2
 
3
3
  export type AnyMethod = (...arguments_: readonly never[]) => Effect.Effect<unknown, unknown, unknown>;
4
4
 
5
- export interface GenericMethodDescriptor<TMethod extends AnyMethod> {
6
- readonly _tag: "GenericMethod";
7
- readonly method: TMethod;
8
- }
9
-
10
- type Same<TLeft, TRight> = (<TValue>() => TValue extends TLeft ? 1 : 2) extends <TValue>() => TValue extends TRight ? 1 : 2 ? true : false;
11
-
12
5
  export type HasDistinctCallSignatures<TMethod> = TMethod extends {
13
- (...arguments_: infer TFirstArguments): infer TFirstResult;
14
- (...arguments_: infer TLastArguments): infer TLastResult;
6
+ (...arguments_: infer TFirstArguments): unknown;
7
+ (...arguments_: infer TLastArguments): unknown;
15
8
  }
16
- ? Same<TFirstArguments, TLastArguments> extends true
17
- ? Same<TFirstResult, TLastResult> extends true
9
+ ? [TFirstArguments] extends [TLastArguments]
10
+ ? [TLastArguments] extends [TFirstArguments]
18
11
  ? false
19
12
  : true
20
13
  : true
@@ -24,10 +17,12 @@ export interface GenericOrStructurallyOverloadedMethodsAreUnsupported {
24
17
  readonly _serviceDefinitionError: "generic and structurally overloaded methods are unsupported";
25
18
  }
26
19
 
27
- type MarkedMethod<TMethod extends AnyMethod> =
28
- HasDistinctCallSignatures<TMethod> extends true ? GenericOrStructurallyOverloadedMethodsAreUnsupported : GenericMethodDescriptor<TMethod>;
20
+ export interface GenericMethodDescriptor<TMethod extends AnyMethod> {
21
+ readonly _tag: "GenericMethod";
22
+ readonly method: TMethod;
23
+ }
29
24
 
30
- export function genericMethod<TMethod extends AnyMethod>(method: TMethod): MarkedMethod<TMethod>;
25
+ export function genericMethod<TMethod extends AnyMethod>(method: TMethod): GenericMethodDescriptor<TMethod>;
31
26
  export function genericMethod(method: AnyMethod): unknown {
32
27
  return { _tag: "GenericMethod", method };
33
28
  }