Skip to content

Commit 15386b7

Browse files
authored
Fix executeQuery default return type (#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 d332448 commit 15386b7

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
@@ -471,7 +471,7 @@ class Driver {
471471
* @see {@link resultTransformers} for provided result transformers.
472472
* @see https://github.com/neo4j/neo4j-javascript-driver/discussions/1052
473473
*/
474-
async executeQuery<T> (query: Query, parameters?: any, config: QueryConfig<T> = {}): Promise<T> {
474+
async executeQuery<T = EagerResult> (query: Query, parameters?: any, config: QueryConfig<T> = {}): Promise<T> {
475475
const bookmarkManager = config.bookmarkManager === null ? undefined : (config.bookmarkManager ?? this.queryBookmarkManager)
476476
const resultTransformer = (config.resultTransformer ?? resultTransformers.eagerResultTransformer()) as ResultTransformer<T>
477477
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
@@ -342,6 +342,32 @@ describe('Driver', () => {
342342
}, query, params)
343343
})
344344

345+
it('should be able to destruct the result in records, keys and summary', async () => {
346+
const query = 'Query'
347+
const params = {}
348+
const spiedExecute = jest.spyOn(queryExecutor, 'execute')
349+
const expected: EagerResult = {
350+
keys: ['a'],
351+
records: [],
352+
summary: new ResultSummary(query, params, {}, 5.0)
353+
}
354+
spiedExecute.mockResolvedValue(expected)
355+
356+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
357+
const { records, keys, summary } = await driver!.executeQuery(query, params)
358+
359+
expect(records).toEqual(expected.records)
360+
expect(keys).toEqual(expected.keys)
361+
expect(summary).toEqual(expected.summary)
362+
expect(spiedExecute).toBeCalledWith({
363+
resultTransformer: resultTransformers.eagerResultTransformer(),
364+
bookmarkManager: driver?.queryBookmarkManager,
365+
routing: routing.WRITERS,
366+
database: undefined,
367+
impersonatedUser: undefined
368+
}, query, params)
369+
})
370+
345371
it('should be able get type-safe Records', async () => {
346372
interface Person {
347373
name: string

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

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

0 commit comments

Comments
 (0)