(fuma: ReturnType<typeof makeFumaClient>)
| 1222 | const asLooseStorageDb = (db: unknown): LooseStorageDb => db as LooseStorageDb; |
| 1223 | |
| 1224 | const makeCoreDb = (fuma: ReturnType<typeof makeFumaClient>) => ({ |
| 1225 | transaction: <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E | StorageFailure> => |
| 1226 | fuma.transaction(effect), |
| 1227 | count: <TName extends CoreTableName>( |
| 1228 | tableName: TName, |
| 1229 | options?: { readonly where?: CoreWhere }, |
| 1230 | ): Effect.Effect<number, StorageFailure> => |
| 1231 | fuma.use(`${tableName}.count`, (db) => asLooseStorageDb(db).count(tableName, options)), |
| 1232 | create: <TName extends CoreTableName>( |
| 1233 | tableName: TName, |
| 1234 | row: Record<string, unknown>, |
| 1235 | ): Effect.Effect<CoreRow<TName>, StorageFailure> => |
| 1236 | fuma.use(`${tableName}.create`, (db) => |
| 1237 | asLooseStorageDb(db).create(tableName, row), |
| 1238 | ) as Effect.Effect<CoreRow<TName>, StorageFailure>, |
| 1239 | createMany: <TName extends CoreTableName>( |
| 1240 | tableName: TName, |
| 1241 | rows: readonly Record<string, unknown>[], |
| 1242 | ): Effect.Effect<void, StorageFailure> => |
| 1243 | rows.length === 0 |
| 1244 | ? Effect.void |
| 1245 | : fuma |
| 1246 | .use(`${tableName}.createMany`, (db) => asLooseStorageDb(db).createMany(tableName, rows)) |
| 1247 | .pipe(Effect.asVoid), |
| 1248 | upsertMany: <TName extends CoreTableName>( |
| 1249 | tableName: TName, |
| 1250 | options: { |
| 1251 | readonly target: readonly string[]; |
| 1252 | readonly update: readonly string[]; |
| 1253 | readonly values: readonly Record<string, unknown>[]; |
| 1254 | }, |
| 1255 | ): Effect.Effect<void, StorageFailure> => |
| 1256 | options.values.length === 0 |
| 1257 | ? Effect.void |
| 1258 | : fuma.use(`${tableName}.upsertMany`, (db) => |
| 1259 | asLooseStorageDb(db).upsertMany(tableName, options), |
| 1260 | ), |
| 1261 | deleteMany: <TName extends CoreTableName>( |
| 1262 | tableName: TName, |
| 1263 | options: { readonly where?: CoreWhere } = {}, |
| 1264 | ): Effect.Effect<void, StorageFailure> => |
| 1265 | fuma.use(`${tableName}.deleteMany`, (db) => |
| 1266 | asLooseStorageDb(db).deleteMany(tableName, options), |
| 1267 | ), |
| 1268 | findFirst: <TName extends CoreTableName, const TOptions extends CoreFindFirstOptions<TName>>( |
| 1269 | tableName: TName, |
| 1270 | options: TOptions, |
| 1271 | ): Effect.Effect<CoreProjectedRow<TName, TOptions["select"]> | null, StorageFailure> => |
| 1272 | fuma.use(`${tableName}.findFirst`, (db) => |
| 1273 | asLooseStorageDb(db).findFirst(tableName, options), |
| 1274 | ) as Effect.Effect<CoreProjectedRow<TName, TOptions["select"]> | null, StorageFailure>, |
| 1275 | findMany: <TName extends CoreTableName, const TOptions extends CoreFindManyOptions<TName>>( |
| 1276 | tableName: TName, |
| 1277 | options: TOptions = {} as TOptions, |
| 1278 | ): Effect.Effect<readonly CoreProjectedRow<TName, TOptions["select"]>[], StorageFailure> => |
| 1279 | fuma.use(`${tableName}.findMany`, (db) => |
| 1280 | asLooseStorageDb(db).findMany(tableName, options), |
| 1281 | ) as Effect.Effect<readonly CoreProjectedRow<TName, TOptions["select"]>[], StorageFailure>, |
no test coverage detected