1
1
import { CodeGenField , CodeGenFieldDirective , CodeGenModel , CodeGenModelMap } from '../visitors/appsync-visitor' ;
2
2
import {
3
- CodeGenFieldConnection , DEFAULT_HASH_KEY_FIELD , flattenFieldDirectives ,
3
+ CodeGenFieldConnection ,
4
+ DEFAULT_HASH_KEY_FIELD ,
5
+ flattenFieldDirectives ,
4
6
getDirective ,
5
7
makeConnectionAttributeName ,
6
8
} from './process-connections' ;
@@ -10,13 +12,18 @@ import { processHasManyConnection } from './process-has-many';
10
12
11
13
// TODO: This file holds several references to utility functions in the v1 process connections file, those functions need to go here before that file is removed
12
14
13
- export function getConnectedFieldV2 ( field : CodeGenField , model : CodeGenModel , connectedModel : CodeGenModel , directiveName : string ) : CodeGenField {
15
+ export function getConnectedFieldV2 (
16
+ field : CodeGenField ,
17
+ model : CodeGenModel ,
18
+ connectedModel : CodeGenModel ,
19
+ directiveName : string ,
20
+ ) : CodeGenField {
14
21
const connectionInfo = getDirective ( field ) ( directiveName ) ;
15
22
if ( ! connectionInfo ) {
16
23
throw new Error ( `The ${ field . name } on model ${ model . name } is not connected` ) ;
17
24
}
18
25
19
- if ( connectionInfo . name === 'belongsTo' ) {
26
+ if ( connectionInfo . name === 'belongsTo' ) {
20
27
let connectedFieldBelongsTo = getBelongsToConnectedField ( field , model , connectedModel ) ;
21
28
if ( connectedFieldBelongsTo ) {
22
29
return connectedFieldBelongsTo ;
@@ -25,7 +32,7 @@ export function getConnectedFieldV2(field: CodeGenField, model: CodeGenModel, co
25
32
26
33
const indexName = connectionInfo . arguments . indexName ;
27
34
const connectionFields = connectionInfo . arguments . fields ;
28
- if ( connectionFields ) {
35
+ if ( connectionFields || directiveName === 'hasOne' ) {
29
36
let indexDirective ;
30
37
if ( indexName ) {
31
38
indexDirective = flattenFieldDirectives ( connectedModel ) . find ( dir => {
@@ -43,12 +50,20 @@ export function getConnectedFieldV2(field: CodeGenField, model: CodeGenModel, co
43
50
}
44
51
45
52
// when there is a fields argument in the connection
46
- const connectedFieldName = indexDirective ? ( ( fieldDir : CodeGenFieldDirective ) => { return fieldDir . fieldName ; } ) ( indexDirective as CodeGenFieldDirective ) : DEFAULT_HASH_KEY_FIELD ;
53
+ const connectedFieldName = indexDirective
54
+ ? ( ( fieldDir : CodeGenFieldDirective ) => {
55
+ return fieldDir . fieldName ;
56
+ } ) ( indexDirective as CodeGenFieldDirective )
57
+ : DEFAULT_HASH_KEY_FIELD ;
47
58
48
59
// Find a field on the other side which connected by a @connection and has the same fields[0] as indexName field
49
60
const otherSideConnectedField = connectedModel . fields . find ( f => {
50
61
return f . directives . find ( d => {
51
- return ( d . name === 'belongsTo' || d . name === 'hasOne' || d . name === 'hasMany' ) && d . arguments . fields && d . arguments . fields [ 0 ] === connectedFieldName ;
62
+ return (
63
+ ( d . name === 'belongsTo' || d . name === 'hasOne' || d . name === 'hasMany' ) &&
64
+ d . arguments . fields &&
65
+ d . arguments . fields [ 0 ] === connectedFieldName
66
+ ) ;
52
67
} ) ;
53
68
} ) ;
54
69
if ( otherSideConnectedField ) {
@@ -68,25 +83,23 @@ export function getConnectedFieldV2(field: CodeGenField, model: CodeGenModel, co
68
83
return connectedField
69
84
? connectedField
70
85
: {
71
- name : connectedFieldName ,
72
- directives : [ ] ,
73
- type : 'ID' ,
74
- isList : false ,
75
- isNullable : true ,
76
- } ;
86
+ name : connectedFieldName ,
87
+ directives : [ ] ,
88
+ type : 'ID' ,
89
+ isList : false ,
90
+ isNullable : true ,
91
+ } ;
77
92
}
78
93
79
-
80
94
export function processConnectionsV2 (
81
95
field : CodeGenField ,
82
96
model : CodeGenModel ,
83
97
modelMap : CodeGenModelMap ,
84
98
) : CodeGenFieldConnection | undefined {
85
99
const connectionDirective = field . directives . find ( d => d . name === 'hasOne' || d . name === 'hasMany' || d . name === 'belongsTo' ) ;
86
100
87
- if ( connectionDirective ) {
88
-
89
- switch ( connectionDirective . name ) {
101
+ if ( connectionDirective ) {
102
+ switch ( connectionDirective . name ) {
90
103
case 'hasOne' :
91
104
return processHasOneConnection ( field , model , modelMap , connectionDirective ) ;
92
105
case 'belongsTo' :
0 commit comments