export class SomeDep extends Effect.Service<SomeDep>()("SomeDep", {
sync: () => ({
doSomething: () => console.log("I am doing something"),
}),
}) {}
export class SharedFooService extends Effect.Service<SharedFooService>()(
"shared/FooService",
{
accessors: true,
dependencies: [SomeDep.Default],
effect: Effect.gen(function* () {
const someDep = yield* SomeDep;
return {
foo: someDep.doSomething,
};
}),
},
) {}
export class SpecificFooService extends Effect.Service<SpecificFooService>()(
"specific/FooService",
{
accessors: true,
dependencies: [SharedFooService.Default],
effect: Effect.gen(function* () {
const { _tag, ...sharedFooService } = yield* SharedFooService;
return {
...sharedFooService,
bar: () => console.log("Doing bar"),
};
}),
},
) {}
export class SomeDep extends Effect.Service<SomeDep>()("SomeDep", {
sync: () => ({
doSomething: () => console.log("I am doing something"),
}),
}) {}
export class SharedFooService extends Effect.Service<SharedFooService>()(
"shared/FooService",
{
accessors: true,
dependencies: [SomeDep.Default],
effect: Effect.gen(function* () {
const someDep = yield* SomeDep;
return {
foo: someDep.doSomething,
};
}),
},
) {}
export class SpecificFooService extends Effect.Service<SpecificFooService>()(
"specific/FooService",
{
accessors: true,
dependencies: [SharedFooService.Default],
effect: Effect.gen(function* () {
const { _tag, ...sharedFooService } = yield* SharedFooService;
return {
...sharedFooService,
bar: () => console.log("Doing bar"),
};
}),
},
) {}