@@ -115,6 +115,42 @@ function valueResponseOfObject (x) {
115
115
}
116
116
}
117
117
}
118
+
119
+ if ( neo4j . isDate ( x ) ) {
120
+ return structResponse ( 'CypherDate' , {
121
+ year : x . year ,
122
+ month : x . month ,
123
+ day : x . day
124
+ } )
125
+ } else if ( neo4j . isDateTime ( x ) || neo4j . isLocalDateTime ( x ) ) {
126
+ return structResponse ( 'CypherDateTime' , {
127
+ year : x . year ,
128
+ month : x . month ,
129
+ day : x . day ,
130
+ hour : x . hour ,
131
+ minute : x . minute ,
132
+ second : x . second ,
133
+ nanosecond : x . nanosecond ,
134
+ utc_offset_s : x . timeZoneOffsetSeconds ,
135
+ timezone_id : x . timeZoneId
136
+ } )
137
+ } else if ( neo4j . isTime ( x ) || neo4j . isLocalTime ( x ) ) {
138
+ return structResponse ( 'CypherTime' , {
139
+ hour : x . hour ,
140
+ minute : x . minute ,
141
+ second : x . second ,
142
+ nanosecond : x . nanosecond ,
143
+ utc_offset_s : x . timeZoneOffsetSeconds
144
+ } )
145
+ } else if ( neo4j . isDuration ( x ) ) {
146
+ return structResponse ( 'CypherDuration' , {
147
+ months : x . months ,
148
+ days : x . days ,
149
+ seconds : x . seconds ,
150
+ nanoseconds : x . nanoseconds
151
+ } )
152
+ }
153
+
118
154
// If all failed, interpret as a map
119
155
const map = { }
120
156
for ( const [ key , value ] of Object . entries ( x ) ) {
@@ -123,6 +159,16 @@ function valueResponseOfObject (x) {
123
159
return valueResponse ( 'CypherMap' , map )
124
160
}
125
161
162
+ function structResponse ( name , data ) {
163
+ const map = { }
164
+ for ( const [ key , value ] of Object . entries ( data ) ) {
165
+ map [ key ] = typeof value === 'bigint' || neo4j . isInt ( value )
166
+ ? neo4j . int ( value ) . toNumber ( )
167
+ : value
168
+ }
169
+ return { name, data : map }
170
+ }
171
+
126
172
export function cypherToNative ( c ) {
127
173
const {
128
174
name,
@@ -142,6 +188,17 @@ export function cypherToNative (c) {
142
188
case 'CypherList' :
143
189
return data . value . map ( cypherToNative )
144
190
case 'CypherDateTime' :
191
+ if ( data . utc_offset_s == null && data . timezone_id == null ) {
192
+ return new neo4j . LocalDateTime (
193
+ data . year ,
194
+ data . month ,
195
+ data . day ,
196
+ data . hour ,
197
+ data . minute ,
198
+ data . second ,
199
+ data . nanosecond
200
+ )
201
+ }
145
202
return new neo4j . DateTime (
146
203
data . year ,
147
204
data . month ,
@@ -153,6 +210,35 @@ export function cypherToNative (c) {
153
210
data . utc_offset_s ,
154
211
data . timezone_id
155
212
)
213
+ case 'CypherTime' :
214
+ if ( data . utc_offset_s == null ) {
215
+ return new neo4j . LocalTime (
216
+ data . hour ,
217
+ data . minute ,
218
+ data . second ,
219
+ data . nanosecond
220
+ )
221
+ }
222
+ return new neo4j . Time (
223
+ data . hour ,
224
+ data . minute ,
225
+ data . second ,
226
+ data . nanosecond ,
227
+ data . utc_offset_s
228
+ )
229
+ case 'CypherDate' :
230
+ return new neo4j . Date (
231
+ data . year ,
232
+ data . month ,
233
+ data . day
234
+ )
235
+ case 'CypherDuration' :
236
+ return new neo4j . Duration (
237
+ data . months ,
238
+ data . days ,
239
+ data . seconds ,
240
+ data . nanoseconds
241
+ )
156
242
case 'CypherMap' :
157
243
return Object . entries ( data . value ) . reduce ( ( acc , [ key , val ] ) => {
158
244
acc [ key ] = cypherToNative ( val )
0 commit comments