Skip to content

Commit 5cf514c

Browse files
committed
Fix executeQuery default return type (neo4j#1055)
The executeQuery method was returning `Promise<unknown` when no transformer or typing was provided like in the example bellow: ``` // works const { records } = await driver.executeQuery<EegerResult>(`query`) // works const { records }: EagerResult = await driver.executeQuery(`query`) // doesn't work, but it is fixed by this change const { records } = await driver.executeQuery(`query`) ``` Defining a default generic type solves the issue.
1 parent c22f7a7 commit 5cf514c

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

packages/core/src/driver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ class Driver {
494494
* @see {@link resultTransformers} for provided result transformers.
495495
* @see https://github.com/neo4j/neo4j-javascript-driver/discussions/1052
496496
*/
497-
async executeQuery<T> (query: Query, parameters?: any, config: QueryConfig<T> = {}): Promise<T> {
497+
async executeQuery<T = EagerResult> (query: Query, parameters?: any, config: QueryConfig<T> = {}): Promise<T> {
498498
const bookmarkManager = config.bookmarkManager === null ? undefined : (config.bookmarkManager ?? this.queryBookmarkManager)
499499
const resultTransformer = (config.resultTransformer ?? resultTransformers.eagerResultTransformer()) as ResultTransformer<T>
500500
const routingConfig: string = config.routing ?? routing.WRITERS

packages/core/test/driver.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,32 @@ describe('Driver', () => {
379379
}, query, params)
380380
})
381381

382+
it('should be able to destruct the result in records, keys and summary', async () => {
383+
const query = 'Query'
384+
const params = {}
385+
const spiedExecute = jest.spyOn(queryExecutor, 'execute')
386+
const expected: EagerResult = {
387+
keys: ['a'],
388+
records: [],
389+
summary: new ResultSummary(query, params, {}, 5.0)
390+
}
391+
spiedExecute.mockResolvedValue(expected)
392+
393+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
394+
const { records, keys, summary } = await driver!.executeQuery(query, params)
395+
396+
expect(records).toEqual(expected.records)
397+
expect(keys).toEqual(expected.keys)
398+
expect(summary).toEqual(expected.summary)
399+
expect(spiedExecute).toBeCalledWith({
400+
resultTransformer: resultTransformers.eagerResultTransformer(),
401+
bookmarkManager: driver?.queryBookmarkManager,
402+
routing: routing.WRITERS,
403+
database: undefined,
404+
impersonatedUser: undefined
405+
}, query, params)
406+
})
407+
382408
it('should be able get type-safe Records', async () => {
383409
interface Person {
384410
name: string

packages/neo4j-driver-deno/lib/core/driver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ class Driver {
494494
* @see {@link resultTransformers} for provided result transformers.
495495
* @see https://github.com/neo4j/neo4j-javascript-driver/discussions/1052
496496
*/
497-
async executeQuery<T> (query: Query, parameters?: any, config: QueryConfig<T> = {}): Promise<T> {
497+
async executeQuery<T = EagerResult> (query: Query, parameters?: any, config: QueryConfig<T> = {}): Promise<T> {
498498
const bookmarkManager = config.bookmarkManager === null ? undefined : (config.bookmarkManager ?? this.queryBookmarkManager)
499499
const resultTransformer = (config.resultTransformer ?? resultTransformers.eagerResultTransformer()) as ResultTransformer<T>
500500
const routingConfig: string = config.routing ?? routing.WRITERS

0 commit comments

Comments
 (0)