diff --git a/.changeset/shy-shoes-shave.md b/.changeset/shy-shoes-shave.md new file mode 100644 index 00000000..a599ec97 --- /dev/null +++ b/.changeset/shy-shoes-shave.md @@ -0,0 +1,5 @@ +--- +"@traversable/zod-test": patch +--- + +fix(zod-test): fixes type-level bug where `SeedGenerator` was returning type `fc.Arbitrary` (#557) diff --git a/packages/zod-test/src/exports.ts b/packages/zod-test/src/exports.ts index de2e13a0..db7af23d 100644 --- a/packages/zod-test/src/exports.ts +++ b/packages/zod-test/src/exports.ts @@ -6,7 +6,9 @@ export * as Seed from './generator-seed.js' export { fuzz } from './fuzz.js' export type { Config } from './generator-options.js' +export type * as Bounds from './generator-bounds.js' export { + SeedMap, SchemaGenerator, SeedGenerator, SeedInvalidDataGenerator, diff --git a/packages/zod-test/src/generator.ts b/packages/zod-test/src/generator.ts index 1ee7aa65..a07b1120 100644 --- a/packages/zod-test/src/generator.ts +++ b/packages/zod-test/src/generator.ts @@ -136,7 +136,7 @@ const UnaryMap = { map: (tie) => fc.tuple(fc.constant(byTag.map), fc.tuple(tie('*'), tie('*'))), pipe: (tie) => fc.tuple(fc.constant(byTag.pipe), fc.tuple(tie('*'), tie('*'))), transform: (tie) => fc.tuple(fc.constant(byTag.transform), tie('*')), - promise: () => PromiseSchemaIsUnsupported('SeedMap'), + promise: (tie) => fc.tuple(fc.constant(byTag.promise), tie('*')), } satisfies { [K in keyof Seed.UnaryMap]: SeedBuilder } const TerminalSeeds = fn.map(Object_keys(TerminalMap), (tag) => byTag[tag]) @@ -657,7 +657,7 @@ const seedsThatPreventGeneratingInvalidData = [ * const ZodSchema = zxTest.seedToSchema(seed) * const dataset = fc.sample(zxTest.seedToValidData(seed), 5) * - * const results = dataset.map((pt) => ZodSchema.safeParse(pt).success) + * const results = dataset.map((data) => ZodSchema.safeParse(data).success) * * console.log(results) // => [true, true, true, true, true] */ @@ -692,7 +692,7 @@ export const SeedValidDataGenerator = SeedGenerator({ exclude: seedsThatPreventG * const ZodSchema = zxTest.seedToSchema(seed) * const dataset = fc.sample(zxTest.seedToInvalidData(seed), 5) * - * const results = dataset.map((pt) => ZodSchema.safeParse(pt).success) + * const results = dataset.map((data) => ZodSchema.safeParse(data).success) * * console.log(results) // => [false, false, false, false, false] */ diff --git a/packages/zod-test/test/generator.test.ts b/packages/zod-test/test/generator.test.ts index 548884f2..d7c4feb6 100644 --- a/packages/zod-test/test/generator.test.ts +++ b/packages/zod-test/test/generator.test.ts @@ -139,3 +139,52 @@ vi.describe('〖️⛳️〗‹‹‹ ❲@traversable/zod-test❳', () => { `) }) }) + +vi.describe('〖️⛳️〗‹‹‹ ❲@traversable/zod-test❳: type-level tests', () => { + vi.test('〖️⛳️〗› ❲zxTest.SeedGenerator❳: Builder["*"] return type', () => { + vi.expectTypeOf(zxTest.SeedGenerator()['*']).toEqualTypeOf< + fc.Arbitrary< + | [10] + | [15] + | [20] + | [25] + | [30] + | [35] + | [40] + | [45] + | [50] + | [55] + | [60] + | [100, zxTest.Bounds.int] + | [150, zxTest.Bounds.bigint] + | [200, zxTest.Bounds.number] + | [250, zxTest.Bounds.string] + | [500, any] + | [550, string | number | bigint | boolean] + | zxTest.Seed.Seed.TemplateLiteral + | [1000, unknown, zxTest.Bounds.array] + | [1500, unknown] + | [2000, unknown] + | [2500, unknown] + | [3000, unknown] + | [3500, unknown] + | [4000, unknown] + | [5000, unknown] + | [5500, unknown] + | [5600, unknown] + | [6000, [[7500, [string, unknown][]], [7500, [string, unknown][]]]] + | [6500, [unknown, unknown]] + | [7000, unknown] + | [7500, [string, unknown][]] + | [8000, unknown[]] + | [8500, unknown[]] + | [9000, [unknown, unknown]] + | [9500, unknown] + | [10000, unknown] + | [10500, () => unknown] + | [100000, unknown] + > + >() + }) +}) +