|
9 | 9 | isListType,
|
10 | 10 | isNonNullType,
|
11 | 11 | Kind,
|
| 12 | + print, |
12 | 13 | SelectionNode,
|
13 | 14 | visit,
|
14 | 15 | } from 'graphql'
|
@@ -89,67 +90,68 @@ export default class AutoPaginationTransform implements MeshTransform {
|
89 | 90 | if (selectionNode.kind === Kind.FIELD) {
|
90 | 91 | if (
|
91 | 92 | !selectionNode.name.value.startsWith('_') &&
|
92 |
| - getQueryFieldNames(delegationContext.transformedSchema).includes(selectionNode.name.value) |
| 93 | + getQueryFieldNames(delegationContext.transformedSchema).includes(selectionNode.name.value) && |
| 94 | + !selectionNode.arguments?.some((argNode) => argNode.name.value === 'id') |
93 | 95 | ) {
|
94 |
| - if (!selectionNode.arguments?.some((argNode) => argNode.name.value === 'id')) { |
95 |
| - const firstArg = selectionNode.arguments?.find( |
96 |
| - (argNode) => argNode.name.value === this.config.firstArgumentName, |
97 |
| - ) |
98 |
| - const skipArg = selectionNode.arguments?.find( |
99 |
| - (argNode) => argNode.name.value === this.config.skipArgumentName, |
100 |
| - )?.value as IntValueNode | undefined |
101 |
| - if (firstArg != null && firstArg.value.kind === Kind.INT) { |
102 |
| - const numberOfTotalRecords = parseInt(firstArg.value.value) |
103 |
| - if (numberOfTotalRecords > this.config.limitOfRecords) { |
104 |
| - const fieldName = selectionNode.name.value |
105 |
| - const aliasName = selectionNode.alias?.value || fieldName |
106 |
| - let skip: number |
107 |
| - for ( |
108 |
| - skip = skipArg?.value ? parseInt(skipArg.value) : 0; |
109 |
| - skip < numberOfTotalRecords; |
110 |
| - skip += this.config.limitOfRecords |
111 |
| - ) { |
112 |
| - newSelections.push({ |
113 |
| - ...selectionNode, |
114 |
| - alias: { |
115 |
| - kind: Kind.NAME, |
116 |
| - value: `splitted_${skip}_${aliasName}`, |
| 96 | + const firstArg = selectionNode.arguments?.find( |
| 97 | + (argNode) => argNode.name.value === this.config.firstArgumentName, |
| 98 | + ) |
| 99 | + const skipArg = selectionNode.arguments?.find( |
| 100 | + (argNode) => argNode.name.value === this.config.skipArgumentName, |
| 101 | + )?.value as IntValueNode | undefined |
| 102 | + if (firstArg != null && firstArg.value.kind === Kind.INT) { |
| 103 | + const numberOfTotalRecords = parseInt(firstArg.value.value) |
| 104 | + if (numberOfTotalRecords > this.config.limitOfRecords) { |
| 105 | + const fieldName = selectionNode.name.value |
| 106 | + const aliasName = selectionNode.alias?.value || fieldName |
| 107 | + const initialSkip = skipArg?.value ? parseInt(skipArg.value) : 0 |
| 108 | + let skip: number |
| 109 | + for ( |
| 110 | + skip = initialSkip; |
| 111 | + numberOfTotalRecords - skip + initialSkip > 0; |
| 112 | + skip += this.config.limitOfRecords |
| 113 | + ) { |
| 114 | + newSelections.push({ |
| 115 | + ...selectionNode, |
| 116 | + alias: { |
| 117 | + kind: Kind.NAME, |
| 118 | + value: `splitted_${skip}_${aliasName}`, |
| 119 | + }, |
| 120 | + arguments: [ |
| 121 | + { |
| 122 | + kind: Kind.ARGUMENT, |
| 123 | + name: { |
| 124 | + kind: Kind.NAME, |
| 125 | + value: this.config.firstArgumentName, |
| 126 | + }, |
| 127 | + value: { |
| 128 | + kind: Kind.INT, |
| 129 | + value: Math.min( |
| 130 | + numberOfTotalRecords - skip + initialSkip, |
| 131 | + this.config.limitOfRecords, |
| 132 | + ).toString(), |
| 133 | + }, |
117 | 134 | },
|
118 |
| - arguments: [ |
119 |
| - { |
120 |
| - kind: Kind.ARGUMENT, |
121 |
| - name: { |
122 |
| - kind: Kind.NAME, |
123 |
| - value: this.config.firstArgumentName, |
124 |
| - }, |
125 |
| - value: { |
126 |
| - kind: Kind.INT, |
127 |
| - value: Math.min(numberOfTotalRecords - skip, this.config.limitOfRecords).toString(), |
128 |
| - }, |
| 135 | + { |
| 136 | + kind: Kind.ARGUMENT, |
| 137 | + name: { |
| 138 | + kind: Kind.NAME, |
| 139 | + value: this.config.skipArgumentName, |
129 | 140 | },
|
130 |
| - { |
131 |
| - kind: Kind.ARGUMENT, |
132 |
| - name: { |
133 |
| - kind: Kind.NAME, |
134 |
| - value: this.config.skipArgumentName, |
135 |
| - }, |
136 |
| - value: { |
137 |
| - kind: Kind.INT, |
138 |
| - value: skip.toString(), |
139 |
| - }, |
| 141 | + value: { |
| 142 | + kind: Kind.INT, |
| 143 | + value: skip.toString(), |
140 | 144 | },
|
141 |
| - ], |
142 |
| - }) |
143 |
| - } |
| 145 | + }, |
| 146 | + ], |
| 147 | + }) |
144 | 148 | }
|
| 149 | + continue |
145 | 150 | }
|
146 |
| - } else { |
147 |
| - newSelections.push(selectionNode) |
148 | 151 | }
|
149 |
| - } else { |
150 |
| - newSelections.push(selectionNode) |
151 | 152 | }
|
152 | 153 | }
|
| 154 | + newSelections.push(selectionNode) |
153 | 155 | }
|
154 | 156 | return {
|
155 | 157 | ...selectionSet,
|
|
0 commit comments