@@ -277,88 +277,74 @@ export type Database = {
277
277
278
278
return Object . entries ( schemaFunctionsGroupedByName ) . map (
279
279
( [ fnName , fns ] ) =>
280
- `${ JSON . stringify ( fnName ) } : ${ fns
281
- . map (
282
- ( {
283
- args,
284
- return_type_id,
285
- return_type_relation_id,
286
- is_set_returning_function,
287
- } ) => `{
288
- Args: ${ ( ( ) => {
289
- const inArgs = args . filter ( ( { mode } ) => mode === 'in' )
290
-
291
- if ( inArgs . length === 0 ) {
292
- return 'Record<PropertyKey, never>'
293
- }
294
-
295
- const argsNameAndType = inArgs . map ( ( { name, type_id, has_default } ) => {
296
- const type = types . find ( ( { id } ) => id === type_id )
297
- let tsType = 'unknown'
298
- if ( type ) {
299
- tsType = pgTypeToTsType ( type . name , { types, schemas, tables, views } )
300
- }
301
- return { name, type : tsType , has_default }
302
- } )
280
+ `${ JSON . stringify ( fnName ) } : {
281
+ Args: ${ fns
282
+ . map ( ( { args } ) => {
283
+ const inArgs = args . filter ( ( { mode } ) => mode === 'in' )
303
284
304
- return `{
305
- ${ argsNameAndType . map (
306
- ( { name, type, has_default } ) =>
307
- `${ JSON . stringify ( name ) } ${ has_default ? '?' : '' } : ${ type } `
308
- ) }
309
- }`
310
- } ) ( ) }
311
- Returns: (${ ( ( ) => {
312
- // Case 1: `returns table`.
313
- const tableArgs = args . filter ( ( { mode } ) => mode === 'table' )
314
- if ( tableArgs . length > 0 ) {
315
- const argsNameAndType = tableArgs . map ( ( { name, type_id } ) => {
316
- const type = types . find ( ( { id } ) => id === type_id )
317
- let tsType = 'unknown'
318
- if ( type ) {
319
- tsType = pgTypeToTsType ( type . name , { types, schemas, tables, views } )
285
+ if ( inArgs . length === 0 ) {
286
+ return 'Record<PropertyKey, never>'
287
+ }
288
+
289
+ const argsNameAndType = inArgs . map ( ( { name, type_id, has_default } ) => {
290
+ const type = types . find ( ( { id } ) => id === type_id )
291
+ let tsType = 'unknown'
292
+ if ( type ) {
293
+ tsType = pgTypeToTsType ( type . name , { types, schemas, tables, views } )
294
+ }
295
+ return { name, type : tsType , has_default }
296
+ } )
297
+ return `{ ${ argsNameAndType . map ( ( { name, type, has_default } ) => `${ JSON . stringify ( name ) } ${ has_default ? '?' : '' } : ${ type } ` ) } }`
298
+ } )
299
+ // A function can have multiples definitions with differents args, but will always return the same type
300
+ . join ( ' | ' ) }
301
+ Returns: ${ ( ( ) => {
302
+ // Case 1: `returns table`.
303
+ const tableArgs = fns [ 0 ] . args . filter ( ( { mode } ) => mode === 'table' )
304
+ if ( tableArgs . length > 0 ) {
305
+ const argsNameAndType = tableArgs . map ( ( { name, type_id } ) => {
306
+ const type = types . find ( ( { id } ) => id === type_id )
307
+ let tsType = 'unknown'
308
+ if ( type ) {
309
+ tsType = pgTypeToTsType ( type . name , { types, schemas, tables, views } )
310
+ }
311
+ return { name, type : tsType }
312
+ } )
313
+
314
+ return `{
315
+ ${ argsNameAndType . map (
316
+ ( { name, type } ) => `${ JSON . stringify ( name ) } : ${ type } `
317
+ ) }
318
+ }`
320
319
}
321
- return { name, type : tsType }
322
- } )
323
320
324
- return `{
325
- ${ argsNameAndType . map (
326
- ( { name, type } ) => `${ JSON . stringify ( name ) } : ${ type } `
327
- ) }
328
- }`
329
- }
330
-
331
- // Case 2: returns a relation's row type.
332
- const relation = [ ...tables , ...views ] . find (
333
- ( { id } ) => id === return_type_relation_id
334
- )
335
- if ( relation ) {
336
- return `{
337
- ${ columnsByTableId [ relation . id ] . map (
338
- ( column ) =>
339
- `${ JSON . stringify ( column . name ) } : ${ pgTypeToTsType ( column . format , {
340
- types,
341
- schemas,
342
- tables,
343
- views,
344
- } ) } ${ column . is_nullable ? '| null' : '' } `
345
- ) }
346
- }`
347
- }
321
+ // Case 2: returns a relation's row type.
322
+ const relation = [ ...tables , ...views ] . find (
323
+ ( { id } ) => id === fns [ 0 ] . return_type_relation_id
324
+ )
325
+ if ( relation ) {
326
+ return `{
327
+ ${ columnsByTableId [ relation . id ] . map (
328
+ ( column ) =>
329
+ `${ JSON . stringify ( column . name ) } : ${ pgTypeToTsType ( column . format , {
330
+ types,
331
+ schemas,
332
+ tables,
333
+ views,
334
+ } ) } ${ column . is_nullable ? '| null' : '' } `
335
+ ) }
336
+ }`
337
+ }
348
338
349
- // Case 3: returns base/array/composite/enum type.
350
- const type = types . find ( ( { id } ) => id === return_type_id )
351
- if ( type ) {
352
- return pgTypeToTsType ( type . name , { types, schemas, tables, views } )
353
- }
339
+ // Case 3: returns base/array/composite/enum type.
340
+ const type = types . find ( ( { id } ) => id === fns [ 0 ] . return_type_id )
341
+ if ( type ) {
342
+ return pgTypeToTsType ( type . name , { types, schemas, tables, views } )
343
+ }
354
344
355
- return 'unknown'
356
- } ) ( ) } )${ is_set_returning_function ? '[]' : '' }
357
- }`
358
- )
359
- // We only sorted by name on schemaFunctions - here we sort by arg names, arg types, and return type.
360
- . sort ( )
361
- . join ( '|' ) } `
345
+ return 'unknown'
346
+ } ) ( ) } ${ fns [ 0 ] . is_set_returning_function ? '[]' : '' }
347
+ }`
362
348
)
363
349
} ) ( ) }
364
350
}
0 commit comments