@@ -135,11 +135,17 @@ def connection_from_array_slice(
135
135
slice_end = slice_start + array_slice_length
136
136
if array_length is None :
137
137
array_length = slice_end
138
- before_offset = get_offset_with_default (before , array_length )
138
+
139
+ start_offset = max (slice_start , 0 )
140
+ end_offset = min (slice_end , array_length )
141
+
139
142
after_offset = get_offset_with_default (after , - 1 )
143
+ if 0 <= after_offset < array_length :
144
+ start_offset = max (start_offset , after_offset + 1 )
140
145
141
- start_offset = max (slice_start - 1 , after_offset , - 1 ) + 1
142
- end_offset = min (slice_end , before_offset , array_length )
146
+ before_offset = get_offset_with_default (before , end_offset )
147
+ if 0 <= before_offset < array_length :
148
+ end_offset = min (end_offset , before_offset )
143
149
144
150
if isinstance (first , int ):
145
151
if first < 0 :
@@ -153,9 +159,7 @@ def connection_from_array_slice(
153
159
start_offset = max (start_offset , end_offset - last )
154
160
155
161
# If supplied slice is too large, trim it down before mapping over it.
156
- trimmed_slice = array_slice [
157
- start_offset - slice_start : array_slice_length - (slice_end - end_offset )
158
- ]
162
+ trimmed_slice = array_slice [start_offset - slice_start : end_offset - slice_start ]
159
163
160
164
edges = [
161
165
edge_type (node = value , cursor = offset_to_cursor (start_offset + index ))
0 commit comments