@@ -129,7 +129,28 @@ describe('valibot', () => {
129
129
"
130
130
` ) ;
131
131
} )
132
- it . todo ( 'nested input object' )
132
+ it ( 'nested input object' , async ( ) => {
133
+ const schema = buildSchema ( /* GraphQL */ `
134
+ input NestedInput {
135
+ child: NestedInput
136
+ childrens: [NestedInput]
137
+ }
138
+ ` ) ;
139
+ const scalars = undefined
140
+ const result = await plugin ( schema , [ ] , { schema : 'valibot' , scalars } , { } ) ;
141
+
142
+ expect ( result . content ) . toMatchInlineSnapshot ( `
143
+ "
144
+
145
+ export function NestedInputSchema(): v.GenericSchema<NestedInput> {
146
+ return v.object({
147
+ child: v.lazy(() => v.nullish(NestedInputSchema())),
148
+ childrens: v.nullish(v.array(v.lazy(() => v.nullable(NestedInputSchema()))))
149
+ })
150
+ }
151
+ "
152
+ ` )
153
+ } )
133
154
it ( 'enum' , async ( ) => {
134
155
const schema = buildSchema ( /* GraphQL */ `
135
156
enum PageType {
@@ -301,8 +322,82 @@ describe('valibot', () => {
301
322
"
302
323
` ) ;
303
324
} ) ;
304
- it . todo ( 'with notAllowEmptyString' )
305
- it . todo ( 'with notAllowEmptyString issue #386' )
325
+ it ( 'with notAllowEmptyString' , async ( ) => {
326
+ const schema = buildSchema ( /* GraphQL */ `
327
+ input PrimitiveInput {
328
+ a: ID!
329
+ b: String!
330
+ c: Boolean!
331
+ d: Int!
332
+ e: Float!
333
+ }
334
+ ` ) ;
335
+ const result = await plugin (
336
+ schema ,
337
+ [ ] ,
338
+ {
339
+ schema : 'valibot' ,
340
+ notAllowEmptyString : true ,
341
+ scalars : {
342
+ ID : 'string' ,
343
+ } ,
344
+ } ,
345
+ { } ,
346
+ ) ;
347
+ expect ( result . content ) . toMatchInlineSnapshot ( `
348
+ "
349
+
350
+ export function PrimitiveInputSchema(): v.GenericSchema<PrimitiveInput> {
351
+ return v.object({
352
+ a: v.pipe(v.string(), v.minLength(1)),
353
+ b: v.pipe(v.string(), v.minLength(1)),
354
+ c: v.boolean(),
355
+ d: v.number(),
356
+ e: v.number()
357
+ })
358
+ }
359
+ "
360
+ ` )
361
+ } )
362
+ it ( 'with notAllowEmptyString issue #386' , async ( ) => {
363
+ const schema = buildSchema ( /* GraphQL */ `
364
+ input InputOne {
365
+ field: InputNested!
366
+ }
367
+
368
+ input InputNested {
369
+ field: String!
370
+ }
371
+ ` ) ;
372
+ const result = await plugin (
373
+ schema ,
374
+ [ ] ,
375
+ {
376
+ schema : 'valibot' ,
377
+ notAllowEmptyString : true ,
378
+ scalars : {
379
+ ID : 'string' ,
380
+ } ,
381
+ } ,
382
+ { } ,
383
+ ) ;
384
+ expect ( result . content ) . toMatchInlineSnapshot ( `
385
+ "
386
+
387
+ export function InputOneSchema(): v.GenericSchema<InputOne> {
388
+ return v.object({
389
+ field: v.lazy(() => InputNestedSchema())
390
+ })
391
+ }
392
+
393
+ export function InputNestedSchema(): v.GenericSchema<InputNested> {
394
+ return v.object({
395
+ field: v.pipe(v.string(), v.minLength(1))
396
+ })
397
+ }
398
+ "
399
+ ` )
400
+ } )
306
401
it ( 'with scalarSchemas' , async ( ) => {
307
402
const schema = buildSchema ( /* GraphQL */ `
308
403
input ScalarsInput {
@@ -338,8 +433,72 @@ describe('valibot', () => {
338
433
"
339
434
` )
340
435
} ) ;
341
- it . todo ( 'with typesPrefix' )
342
- it . todo ( 'with typesSuffix' )
436
+ it ( 'with typesPrefix' , async ( ) => {
437
+ const schema = buildSchema ( /* GraphQL */ `
438
+ input Say {
439
+ phrase: String!
440
+ }
441
+ ` ) ;
442
+ const result = await plugin (
443
+ schema ,
444
+ [ ] ,
445
+ {
446
+ schema : 'valibot' ,
447
+ typesPrefix : 'I' ,
448
+ importFrom : './types' ,
449
+ } ,
450
+ { } ,
451
+ ) ;
452
+ expect ( result . prepend ) . toMatchInlineSnapshot ( `
453
+ [
454
+ "import * as v from 'valibot'",
455
+ "import { ISay } from './types'",
456
+ ]
457
+ ` )
458
+ expect ( result . content ) . toMatchInlineSnapshot ( `
459
+ "
460
+
461
+ export function ISaySchema(): v.GenericSchema<ISay> {
462
+ return v.object({
463
+ phrase: v.string()
464
+ })
465
+ }
466
+ "
467
+ ` )
468
+ } )
469
+ it ( 'with typesSuffix' , async ( ) => {
470
+ const schema = buildSchema ( /* GraphQL */ `
471
+ input Say {
472
+ phrase: String!
473
+ }
474
+ ` ) ;
475
+ const result = await plugin (
476
+ schema ,
477
+ [ ] ,
478
+ {
479
+ schema : 'valibot' ,
480
+ typesSuffix : 'I' ,
481
+ importFrom : './types' ,
482
+ } ,
483
+ { } ,
484
+ ) ;
485
+ expect ( result . prepend ) . toMatchInlineSnapshot ( `
486
+ [
487
+ "import * as v from 'valibot'",
488
+ "import { SayI } from './types'",
489
+ ]
490
+ ` )
491
+ expect ( result . content ) . toMatchInlineSnapshot ( `
492
+ "
493
+
494
+ export function SayISchema(): v.GenericSchema<SayI> {
495
+ return v.object({
496
+ phrase: v.string()
497
+ })
498
+ }
499
+ "
500
+ ` )
501
+ } )
343
502
it . todo ( 'with default input values' )
344
503
describe ( 'issues #19' , ( ) => {
345
504
it ( 'string field' , async ( ) => {
0 commit comments