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"