import { S } from "effect-app"
import { copy } from "effect-app/utils"
import { generate } from "./arbs.js"
/**
* Given the schema for an object-like structure, creates a function that generates random instances of that object with some values provided.
*/
export const createRandomInstance = (s: S.Codec & { fields: S.Struct.Fields }) => {
const gen = generate(S.toArbitrary(s))
return (overrides?: Partial) => {
const v = gen.value
return overrides ? copy(v, overrides) : v
}
}
/**
* Like `createRandomInstance`, but takes encoded values rather than decoded ones.
*/
export const createRandomInstanceI = (s: S.Codec & { fields: S.Struct.Fields }) => {
const gen = generate(S.toArbitrary(s))
const encode = S.encodeSync(s)
const decode = S.decodeSync(s)
return (overrides?: Partial) => {
const v = gen.value
if (!overrides) return v
return decode({ ...encode(v), ...overrides })
}
}
export * from "./arbs.js"