(fuma: ReturnType<typeof makeFumaClient>)
| 1097 | const asLooseStorageDb = (db: unknown): LooseStorageDb => db as LooseStorageDb; |
| 1098 | |
| 1099 | const makeCoreDb = (fuma: ReturnType<typeof makeFumaClient>) => ({ |
| 1100 | transaction: <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E | StorageFailure> => |
| 1101 | fuma.transaction(effect), |
| 1102 | count: <TName extends CoreTableName>( |
| 1103 | tableName: TName, |
| 1104 | options?: { readonly where?: CoreWhere }, |
| 1105 | ): Effect.Effect<number, StorageFailure> => |
| 1106 | fuma.use(`${tableName}.count`, (db) => asLooseStorageDb(db).count(tableName, options)), |
| 1107 | create: <TName extends CoreTableName>( |
| 1108 | tableName: TName, |
| 1109 | row: Record<string, unknown>, |
| 1110 | ): Effect.Effect<CoreRow<TName>, StorageFailure> => |
| 1111 | fuma.use(`${tableName}.create`, (db) => |
| 1112 | asLooseStorageDb(db).create(tableName, row), |
| 1113 | ) as Effect.Effect<CoreRow<TName>, StorageFailure>, |
| 1114 | createMany: <TName extends CoreTableName>( |
| 1115 | tableName: TName, |
| 1116 | rows: readonly Record<string, unknown>[], |
| 1117 | ): Effect.Effect<void, StorageFailure> => |
| 1118 | rows.length === 0 |
| 1119 | ? Effect.void |
| 1120 | : fuma |
| 1121 | .use(`${tableName}.createMany`, (db) => asLooseStorageDb(db).createMany(tableName, rows)) |
| 1122 | .pipe(Effect.asVoid), |
| 1123 | upsertMany: <TName extends CoreTableName>( |
| 1124 | tableName: TName, |
| 1125 | options: { |
| 1126 | readonly target: readonly string[]; |
| 1127 | readonly update: readonly string[]; |
| 1128 | readonly values: readonly Record<string, unknown>[]; |
| 1129 | }, |
| 1130 | ): Effect.Effect<void, StorageFailure> => |
| 1131 | options.values.length === 0 |
| 1132 | ? Effect.void |
| 1133 | : fuma.use(`${tableName}.upsertMany`, (db) => |
| 1134 | asLooseStorageDb(db).upsertMany(tableName, options), |
| 1135 | ), |
| 1136 | deleteMany: <TName extends CoreTableName>( |
| 1137 | tableName: TName, |
| 1138 | options: { readonly where?: CoreWhere } = {}, |
| 1139 | ): Effect.Effect<void, StorageFailure> => |
| 1140 | fuma.use(`${tableName}.deleteMany`, (db) => |
| 1141 | asLooseStorageDb(db).deleteMany(tableName, options), |
| 1142 | ), |
| 1143 | findFirst: <TName extends CoreTableName, const TOptions extends CoreFindFirstOptions<TName>>( |
| 1144 | tableName: TName, |
| 1145 | options: TOptions, |
| 1146 | ): Effect.Effect<CoreProjectedRow<TName, TOptions["select"]> | null, StorageFailure> => |
| 1147 | fuma.use(`${tableName}.findFirst`, (db) => |
| 1148 | asLooseStorageDb(db).findFirst(tableName, options), |
| 1149 | ) as Effect.Effect<CoreProjectedRow<TName, TOptions["select"]> | null, StorageFailure>, |
| 1150 | findMany: <TName extends CoreTableName, const TOptions extends CoreFindManyOptions<TName>>( |
| 1151 | tableName: TName, |
| 1152 | options: TOptions = {} as TOptions, |
| 1153 | ): Effect.Effect<readonly CoreProjectedRow<TName, TOptions["select"]>[], StorageFailure> => |
| 1154 | fuma.use(`${tableName}.findMany`, (db) => |
| 1155 | asLooseStorageDb(db).findMany(tableName, options), |
| 1156 | ) as Effect.Effect<readonly CoreProjectedRow<TName, TOptions["select"]>[], StorageFailure>, |
no test coverage detected