(fuma: ReturnType<typeof makeFumaClient>)
| 712 | const asLooseStorageDb = (db: unknown): LooseStorageDb => db as LooseStorageDb; |
| 713 | |
| 714 | const makeCoreDb = (fuma: ReturnType<typeof makeFumaClient>) => ({ |
| 715 | count: <TName extends CoreTableName>( |
| 716 | tableName: TName, |
| 717 | options?: { readonly where?: CoreWhere }, |
| 718 | ): Effect.Effect<number, StorageFailure> => |
| 719 | fuma.use(`${tableName}.count`, (db) => asLooseStorageDb(db).count(tableName, options)), |
| 720 | create: <TName extends CoreTableName>( |
| 721 | tableName: TName, |
| 722 | row: Record<string, unknown>, |
| 723 | ): Effect.Effect<CoreRow<TName>, StorageFailure> => |
| 724 | fuma.use(`${tableName}.create`, (db) => |
| 725 | asLooseStorageDb(db).create(tableName, row), |
| 726 | ) as Effect.Effect<CoreRow<TName>, StorageFailure>, |
| 727 | createMany: <TName extends CoreTableName>( |
| 728 | tableName: TName, |
| 729 | rows: readonly Record<string, unknown>[], |
| 730 | ): Effect.Effect<void, StorageFailure> => |
| 731 | rows.length === 0 |
| 732 | ? Effect.void |
| 733 | : fuma |
| 734 | .use(`${tableName}.createMany`, (db) => asLooseStorageDb(db).createMany(tableName, rows)) |
| 735 | .pipe(Effect.asVoid), |
| 736 | deleteMany: <TName extends CoreTableName>( |
| 737 | tableName: TName, |
| 738 | options: { readonly where?: CoreWhere } = {}, |
| 739 | ): Effect.Effect<void, StorageFailure> => |
| 740 | fuma.use(`${tableName}.deleteMany`, (db) => |
| 741 | asLooseStorageDb(db).deleteMany(tableName, options), |
| 742 | ), |
| 743 | findFirst: <TName extends CoreTableName, const TOptions extends CoreFindFirstOptions<TName>>( |
| 744 | tableName: TName, |
| 745 | options: TOptions, |
| 746 | ): Effect.Effect<CoreProjectedRow<TName, TOptions["select"]> | null, StorageFailure> => |
| 747 | fuma.use(`${tableName}.findFirst`, (db) => |
| 748 | asLooseStorageDb(db).findFirst(tableName, options), |
| 749 | ) as Effect.Effect<CoreProjectedRow<TName, TOptions["select"]> | null, StorageFailure>, |
| 750 | findMany: <TName extends CoreTableName, const TOptions extends CoreFindManyOptions<TName>>( |
| 751 | tableName: TName, |
| 752 | options: TOptions = {} as TOptions, |
| 753 | ): Effect.Effect<readonly CoreProjectedRow<TName, TOptions["select"]>[], StorageFailure> => |
| 754 | fuma.use(`${tableName}.findMany`, (db) => |
| 755 | asLooseStorageDb(db).findMany(tableName, options), |
| 756 | ) as Effect.Effect<readonly CoreProjectedRow<TName, TOptions["select"]>[], StorageFailure>, |
| 757 | updateMany: <TName extends CoreTableName>( |
| 758 | tableName: TName, |
| 759 | options: { |
| 760 | readonly where?: CoreWhere; |
| 761 | readonly set: Record<string, unknown>; |
| 762 | }, |
| 763 | ): Effect.Effect<void, StorageFailure> => |
| 764 | fuma.use(`${tableName}.updateMany`, (db) => |
| 765 | asLooseStorageDb(db).updateMany(tableName, options), |
| 766 | ), |
| 767 | }); |
| 768 | |
| 769 | type CoreDb = ReturnType<typeof makeCoreDb>; |
| 770 |
no test coverage detected