@@ -21,6 +21,7 @@ type Options<T = TypeNode> = {
21
21
currentType : T ;
22
22
customScalars ?: ScalarMap ;
23
23
transformUnderscore : boolean ;
24
+ dynamicValues ?: boolean ;
24
25
} ;
25
26
26
27
const convertName = ( value : string , fn : ( v : string ) => string , transformUnderscore : boolean ) : string => {
@@ -102,20 +103,22 @@ const getNamedType = (opts: Options<NamedTypeNode>): string | number | boolean =
102
103
return '' ;
103
104
}
104
105
105
- casual . seed ( hashedString ( opts . typeName + opts . fieldName ) ) ;
106
+ if ( ! opts . dynamicValues ) casual . seed ( hashedString ( opts . typeName + opts . fieldName ) ) ;
106
107
const name = opts . currentType . name . value ;
107
108
const casedName = createNameConverter ( opts . typenamesConvention , opts . transformUnderscore ) ( name ) ;
108
109
switch ( name ) {
109
110
case 'String' :
110
- return `'${ casual . word } '` ;
111
+ return opts . dynamicValues ? `casual.word` : `'${ casual . word } '` ;
111
112
case 'Float' :
112
- return Math . round ( casual . double ( 0 , 10 ) * 100 ) / 100 ;
113
+ return opts . dynamicValues
114
+ ? `Math.round(casual.double(0, 10) * 100) / 100`
115
+ : Math . round ( casual . double ( 0 , 10 ) * 100 ) / 100 ;
113
116
case 'ID' :
114
- return `'${ casual . uuid } '` ;
117
+ return opts . dynamicValues ? `casual.uuid` : `'${ casual . uuid } '` ;
115
118
case 'Boolean' :
116
- return casual . boolean ;
119
+ return opts . dynamicValues ? `casual.boolean` : casual . boolean ;
117
120
case 'Int' :
118
- return casual . integer ( 0 , 9999 ) ;
121
+ return opts . dynamicValues ? `casual.integer(0, 9999)` : casual . integer ( 0 , 9999 ) ;
119
122
default : {
120
123
const foundType = opts . types . find ( ( enumType : TypeItem ) => enumType . name === name ) ;
121
124
if ( foundType ) {
@@ -147,9 +150,11 @@ const getNamedType = (opts: Options<NamedTypeNode>): string | number | boolean =
147
150
// mapping for this particular scalar
148
151
if ( ! customScalar || ! customScalar . generator ) {
149
152
if ( foundType . name === 'Date' ) {
150
- return `'${ new Date ( casual . unix_time ) . toISOString ( ) } '` ;
153
+ return opts . dynamicValues
154
+ ? `new Date(casual.unix_time).toISOString()`
155
+ : `'${ new Date ( casual . unix_time ) . toISOString ( ) } '` ;
151
156
}
152
- return `'${ casual . word } '` ;
157
+ return opts . dynamicValues ? `casual.word` : `'${ casual . word } '` ;
153
158
}
154
159
155
160
// If there is a mapping to a `casual` type, then use it and make sure
@@ -163,6 +168,11 @@ const getNamedType = (opts: Options<NamedTypeNode>): string | number | boolean =
163
168
const generatorArgs : unknown [ ] = Array . isArray ( customScalar . arguments )
164
169
? customScalar . arguments
165
170
: [ customScalar . arguments ] ;
171
+ if ( opts . dynamicValues ) {
172
+ return `casual['${ customScalar . generator } ']${
173
+ typeof embeddedGenerator === 'function' ? `(...${ JSON . stringify ( generatorArgs ) } )` : ''
174
+ } `;
175
+ }
166
176
const value =
167
177
typeof embeddedGenerator === 'function'
168
178
? embeddedGenerator ( ...generatorArgs )
@@ -316,6 +326,7 @@ export interface TypescriptMocksPluginConfig {
316
326
typesPrefix ?: string ;
317
327
enumsPrefix ?: string ;
318
328
transformUnderscore ?: boolean ;
329
+ dynamicValues ?: boolean ;
319
330
}
320
331
321
332
interface TypeItem {
@@ -396,6 +407,7 @@ export const plugin: PluginFunction<TypescriptMocksPluginConfig> = (schema, docu
396
407
currentType : node . type ,
397
408
customScalars : config . scalars ,
398
409
transformUnderscore,
410
+ dynamicValues : config . dynamicValues ,
399
411
} ) ;
400
412
401
413
return ` ${ fieldName } : overrides && overrides.hasOwnProperty('${ fieldName } ') ? overrides.${ fieldName } ! : ${ value } ,` ;
@@ -424,6 +436,7 @@ export const plugin: PluginFunction<TypescriptMocksPluginConfig> = (schema, docu
424
436
currentType : field . type ,
425
437
customScalars : config . scalars ,
426
438
transformUnderscore,
439
+ dynamicValues : config . dynamicValues ,
427
440
} ) ;
428
441
429
442
return ` ${ field . name . value } : overrides && overrides.hasOwnProperty('${ field . name . value } ') ? overrides.${ field . name . value } ! : ${ value } ,` ;
@@ -512,12 +525,20 @@ export const plugin: PluginFunction<TypescriptMocksPluginConfig> = (schema, docu
512
525
enumsPrefix : config . enumsPrefix ,
513
526
transformUnderscore : transformUnderscore ,
514
527
} ) ;
515
- // List of function that will generate the mock .
528
+ // Function that will generate the mocks .
516
529
// We generate it after having visited because we need to distinct types from enums
517
530
const mockFns = definitions
518
531
. map ( ( { mockFn } : { mockFn : ( ) => string } ) => mockFn )
519
- . filter ( ( mockFn : ( ) => string ) => ! ! mockFn ) ;
520
-
521
- return `${ typesFileImport } ${ mockFns . map ( ( mockFn : ( ) => string ) => mockFn ( ) ) . join ( '\n' ) }
522
- ` ;
532
+ . filter ( ( mockFn : ( ) => string ) => ! ! mockFn )
533
+ . map ( ( mockFn : ( ) => string ) => mockFn ( ) )
534
+ . join ( '\n' ) ;
535
+
536
+ let mockFile = '' ;
537
+ if ( config . dynamicValues ) mockFile += "import casual from 'casual';\n" ;
538
+ mockFile += typesFileImport ;
539
+ if ( config . dynamicValues ) mockFile += '\ncasual.seed(0);\n' ;
540
+ mockFile += mockFns ;
541
+ if ( config . dynamicValues ) mockFile += '\n\nexport const seedMocks = (seed: number) => casual.seed(seed);' ;
542
+ mockFile += '\n' ;
543
+ return mockFile ;
523
544
} ;
0 commit comments