class ConvexContext extends Effect.Tag("ConvexContext")<
ConvexContext,
{
runQuery: GenericActionCtx<any>["runQuery"];
runMutation: GenericActionCtx<any>["runMutation"];
runAction: GenericActionCtx<any>["runAction"];
}
>() {}
class DeviceQueries extends Effect.Tag("DeviceQueries")<
DeviceQueries,
typeof api.devices.queries
>() {}
const makeConvexLayer = (ctx: GenericActionCtx<any>) =>
Layer.succeed(ConvexContext, {
runQuery: ctx.runQuery,
runMutation: ctx.runMutation,
runAction: ctx.runAction,
});
const makeQueriesLayer = (convexApi: typeof api) =>
Layer.succeed(DeviceQueries, convexApi.devices.queries);
class GetDeviceByWaIdService extends Effect.Service<GetDeviceByWaIdService>()(
"GetDeviceByWaIdService",
{
effect: Effect.gen(function* (_) {
const convexContext = yield* ConvexContext;
const queries = yield* DeviceQueries;
return {
query: (waId: string) =>
pipe(
Effect.promise(() =>
convexContext.runQuery(queries.getDeviceByWaId, { waId })
),
Effect.flatMap((result) =>
result ? Effect.succeed(result) : Effect.fail("Device not found")
)
),
};
}),
// Error: Property '[LayerTypeId]' is missing in type 'typeof ConvexContext' but required in type 'Any'.
// Error: Property '[LayerTypeId]' is missing in type 'typeof DeviceQueries' but required in type 'Any'.
dependencies: [ConvexContext, DeviceQueries],
}
) {}
class ConvexContext extends Effect.Tag("ConvexContext")<
ConvexContext,
{
runQuery: GenericActionCtx<any>["runQuery"];
runMutation: GenericActionCtx<any>["runMutation"];
runAction: GenericActionCtx<any>["runAction"];
}
>() {}
class DeviceQueries extends Effect.Tag("DeviceQueries")<
DeviceQueries,
typeof api.devices.queries
>() {}
const makeConvexLayer = (ctx: GenericActionCtx<any>) =>
Layer.succeed(ConvexContext, {
runQuery: ctx.runQuery,
runMutation: ctx.runMutation,
runAction: ctx.runAction,
});
const makeQueriesLayer = (convexApi: typeof api) =>
Layer.succeed(DeviceQueries, convexApi.devices.queries);
class GetDeviceByWaIdService extends Effect.Service<GetDeviceByWaIdService>()(
"GetDeviceByWaIdService",
{
effect: Effect.gen(function* (_) {
const convexContext = yield* ConvexContext;
const queries = yield* DeviceQueries;
return {
query: (waId: string) =>
pipe(
Effect.promise(() =>
convexContext.runQuery(queries.getDeviceByWaId, { waId })
),
Effect.flatMap((result) =>
result ? Effect.succeed(result) : Effect.fail("Device not found")
)
),
};
}),
// Error: Property '[LayerTypeId]' is missing in type 'typeof ConvexContext' but required in type 'Any'.
// Error: Property '[LayerTypeId]' is missing in type 'typeof DeviceQueries' but required in type 'Any'.
dependencies: [ConvexContext, DeviceQueries],
}
) {}