Skip to content

Commit eb69db0

Browse files
committed
fix(zod-test): fixes type-level bug where SeedGenerator was returning type fc.Arbitrary<unknown> (#557)
1 parent 8b3a6e9 commit eb69db0

File tree

4 files changed

+59
-3
lines changed

4 files changed

+59
-3
lines changed

.changeset/shy-shoes-shave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@traversable/zod-test": patch
3+
---
4+
5+
fix(zod-test): fixes type-level bug where `SeedGenerator` was returning type `fc.Arbitrary<unknown>` (#557)

packages/zod-test/src/exports.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ export * as Seed from './generator-seed.js'
66

77
export { fuzz } from './fuzz.js'
88
export type { Config } from './generator-options.js'
9+
export type * as Bounds from './generator-bounds.js'
910
export {
11+
SeedMap,
1012
SchemaGenerator,
1113
SeedGenerator,
1214
SeedInvalidDataGenerator,

packages/zod-test/src/generator.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ const UnaryMap = {
136136
map: (tie) => fc.tuple(fc.constant(byTag.map), fc.tuple(tie('*'), tie('*'))),
137137
pipe: (tie) => fc.tuple(fc.constant(byTag.pipe), fc.tuple(tie('*'), tie('*'))),
138138
transform: (tie) => fc.tuple(fc.constant(byTag.transform), tie('*')),
139-
promise: () => PromiseSchemaIsUnsupported('SeedMap'),
139+
promise: (tie) => fc.tuple(fc.constant(byTag.promise), tie('*')),
140140
} satisfies { [K in keyof Seed.UnaryMap<never>]: SeedBuilder<K> }
141141

142142
const TerminalSeeds = fn.map(Object_keys(TerminalMap), (tag) => byTag[tag])
@@ -657,7 +657,7 @@ const seedsThatPreventGeneratingInvalidData = [
657657
* const ZodSchema = zxTest.seedToSchema(seed)
658658
* const dataset = fc.sample(zxTest.seedToValidData(seed), 5)
659659
*
660-
* const results = dataset.map((pt) => ZodSchema.safeParse(pt).success)
660+
* const results = dataset.map((data) => ZodSchema.safeParse(data).success)
661661
*
662662
* console.log(results) // => [true, true, true, true, true]
663663
*/
@@ -692,7 +692,7 @@ export const SeedValidDataGenerator = SeedGenerator({ exclude: seedsThatPreventG
692692
* const ZodSchema = zxTest.seedToSchema(seed)
693693
* const dataset = fc.sample(zxTest.seedToInvalidData(seed), 5)
694694
*
695-
* const results = dataset.map((pt) => ZodSchema.safeParse(pt).success)
695+
* const results = dataset.map((data) => ZodSchema.safeParse(data).success)
696696
*
697697
* console.log(results) // => [false, false, false, false, false]
698698
*/

packages/zod-test/test/generator.test.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,52 @@ vi.describe('〖️⛳️〗‹‹‹ ❲@traversable/zod-test❳', () => {
139139
`)
140140
})
141141
})
142+
143+
vi.describe('〖️⛳️〗‹‹‹ ❲@traversable/zod-test❳: type-level tests', () => {
144+
vi.test('〖️⛳️〗› ❲zxTest.SeedGenerator❳: Builder["*"] return type', () => {
145+
vi.expectTypeOf(zxTest.SeedGenerator()['*']).toEqualTypeOf<
146+
fc.Arbitrary<
147+
| [10]
148+
| [15]
149+
| [20]
150+
| [25]
151+
| [30]
152+
| [35]
153+
| [40]
154+
| [45]
155+
| [50]
156+
| [55]
157+
| [60]
158+
| [100, zxTest.Bounds.int]
159+
| [150, zxTest.Bounds.bigint]
160+
| [200, zxTest.Bounds.number]
161+
| [250, zxTest.Bounds.string]
162+
| [500, any]
163+
| [550, string | number | bigint | boolean]
164+
| zxTest.Seed.Seed.TemplateLiteral
165+
| [1000, unknown, zxTest.Bounds.array]
166+
| [1500, unknown]
167+
| [2000, unknown]
168+
| [2500, unknown]
169+
| [3000, unknown]
170+
| [3500, unknown]
171+
| [4000, unknown]
172+
| [5000, unknown]
173+
| [5500, unknown]
174+
| [5600, unknown]
175+
| [6000, [[7500, [string, unknown][]], [7500, [string, unknown][]]]]
176+
| [6500, [unknown, unknown]]
177+
| [7000, unknown]
178+
| [7500, [string, unknown][]]
179+
| [8000, unknown[]]
180+
| [8500, unknown[]]
181+
| [9000, [unknown, unknown]]
182+
| [9500, unknown]
183+
| [10000, unknown]
184+
| [10500, () => unknown]
185+
| [100000, unknown]
186+
>
187+
>()
188+
})
189+
})
190+

0 commit comments

Comments
 (0)