@@ -38,42 +38,52 @@ export const Resource = <Ctor extends (id: string, props: any) => Resource>(
3838 type : ReturnType < Ctor > [ "type" ] ,
3939) => {
4040 const Tag = Context . Tag ( type ) ( ) ;
41- return class Resource {
42- static readonly type = type ;
43- static readonly provider = {
44- tag : Tag ,
45- effect : < Err , Req > (
46- eff : Effect < ProviderService < ReturnType < Ctor > > , Err , Req > ,
47- ) => Layer . effect ( Tag , eff ) ,
48- succeed : ( service : ProviderService < ReturnType < Ctor > > ) =>
49- Layer . succeed ( Tag , service ) ,
50- } as const ;
51- constructor ( id : string , props : any ) {
52- if ( ! new . target ) {
53- return class {
54- static readonly id = id ;
55- static readonly type = type ;
56- static readonly props = props ;
5741
58- readonly id = id ;
59- readonly type = type ;
60- readonly props = props ;
42+ return Object . assign (
43+ function ( id : string , props : any ) {
44+ return class Resource {
45+ static readonly id = id ;
46+ static readonly type = type ;
47+ static readonly props = props ;
48+
49+ static readonly provider = {
50+ tag : Tag ,
51+ effect : < Err , Req > (
52+ eff : Effect < ProviderService < ReturnType < Ctor > > , Err , Req > ,
53+ ) => Layer . effect ( Tag , eff ) ,
54+ succeed : ( service : ProviderService < ReturnType < Ctor > > ) =>
55+ Layer . succeed ( Tag , service ) ,
6156 } ;
62- }
63- }
64- } as unknown as Ctor & {
65- type : ReturnType < Ctor > [ "type" ] ;
66- new ( ) : ReturnType < Ctor > & {
67- parent : ReturnType < Ctor > ;
68- } ;
69- provider : {
70- tag : typeof Tag ;
71- effect < Err , Req > (
72- eff : Effect < ProviderService < ReturnType < Ctor > > , Err , Req > ,
73- ) : Layer . Layer < Provider < ReturnType < Ctor > > , Err , Req > ;
74- succeed (
75- service : ProviderService < ReturnType < Ctor > > ,
76- ) : Layer . Layer < Provider < ReturnType < Ctor > > > ;
77- } ;
78- } ;
57+
58+ readonly id = id ;
59+ readonly type = type ;
60+ readonly props = props ;
61+ } ;
62+ } as unknown as Ctor & {
63+ type : ReturnType < Ctor > [ "type" ] ;
64+ new ( ) : ReturnType < Ctor > & {
65+ parent : ReturnType < Ctor > ;
66+ } ;
67+ provider : {
68+ tag : typeof Tag ;
69+ effect < Err , Req > (
70+ eff : Effect < ProviderService < ReturnType < Ctor > > , Err , Req > ,
71+ ) : Layer . Layer < Provider < ReturnType < Ctor > > , Err , Req > ;
72+ succeed (
73+ service : ProviderService < ReturnType < Ctor > > ,
74+ ) : Layer . Layer < Provider < ReturnType < Ctor > > > ;
75+ } ;
76+ } ,
77+ {
78+ type : type ,
79+ provider : {
80+ tag : Tag ,
81+ effect : < Err , Req > (
82+ eff : Effect < ProviderService < ReturnType < Ctor > > , Err , Req > ,
83+ ) => Layer . effect ( Tag , eff ) ,
84+ succeed : ( service : ProviderService < ReturnType < Ctor > > ) =>
85+ Layer . succeed ( Tag , service ) ,
86+ } as const ,
87+ } ,
88+ ) ;
7989} ;
0 commit comments