Skip to content

Commit ec3aa5c

Browse files
committed
moving session to core
1 parent a5e0eb6 commit ec3aa5c

14 files changed

+104
-106
lines changed

core/src/index.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import ResultSummary, {
6767
import Result, { QueryResult, ResultObserver } from './result'
6868
import ConnectionProvider from './connection-provider'
6969
import Transaction from './transaction'
70+
import Session, { TransactionConfig } from './session'
7071
import * as internal from './internal' // todo: removed afterwards
7172

7273
/**
@@ -125,7 +126,8 @@ const forExport = {
125126
ProfiledPlan,
126127
QueryStatistics,
127128
Result,
128-
Transaction
129+
Transaction,
130+
Session
129131
}
130132

131133
export {
@@ -178,7 +180,9 @@ export {
178180
QueryResult,
179181
ResultObserver,
180182
ConnectionProvider,
181-
Transaction
183+
Transaction,
184+
Session,
185+
TransactionConfig
182186
}
183187

184188
export default forExport

src/session.js renamed to core/src/session.ts

+78-28
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,28 @@
1616
* See the License for the specific language governing permissions and
1717
* limitations under the License.
1818
*/
19-
import { ResultStreamObserver, FailedObserver } from './internal/bolt'
20-
import { newError, internal, Result, Transaction } from 'neo4j-driver-core'
21-
import ConnectionHolder from './internal/connection-holder'
19+
import { ResultStreamObserver, FailedObserver } from './internal/observers'
20+
import { validateQueryAndParameters } from './internal/util'
21+
import { newError } from './error'
22+
import Result from './result'
23+
import Transaction from './transaction'
24+
import { ConnectionHolder } from './internal/connection-holder'
2225
import { ACCESS_MODE_READ, ACCESS_MODE_WRITE } from './internal/constants'
23-
import TransactionExecutor from './internal/transaction-executor'
24-
import Bookmark from './internal/bookmark'
25-
import TxConfig from './internal/tx-config'
26+
import { TransactionExecutor } from './internal/transaction-executor'
27+
import { Bookmark } from './internal/bookmark'
28+
import { TxConfig } from './internal/tx-config'
29+
import ConnectionProvider from './connection-provider'
30+
import { Query } from './types'
31+
import Connection from './connection'
32+
import { NumberOrInteger } from './graph-types'
2633

27-
const {
28-
util: { validateQueryAndParameters }
29-
} = internal
34+
type ConnectionConsumer = (connection: Connection | void) => any | undefined
35+
type TransactionWork<T> = (tx: Transaction) => Promise<T> | T
36+
37+
interface TransactionConfig {
38+
timeout?: NumberOrInteger
39+
metadata?: object
40+
}
3041

3142
/**
3243
* A Session instance is used for handling the connection and
@@ -36,6 +47,18 @@ const {
3647
* @access public
3748
*/
3849
class Session {
50+
private _mode: string
51+
private _database: string
52+
private _reactive: boolean
53+
private _fetchSize: number
54+
private _readConnectionHolder: ConnectionHolder
55+
private _writeConnectionHolder: ConnectionHolder
56+
private _open: boolean
57+
private _hasTx: boolean
58+
private _lastBookmark: Bookmark
59+
private _transactionExecutor: TransactionExecutor
60+
private _onComplete: (meta: any) => void
61+
3962
/**
4063
* @constructor
4164
* @protected
@@ -48,14 +71,22 @@ class Session {
4871
* @param {boolean} args.reactive - Whether this session should create reactive streams
4972
* @param {number} args.fetchSize - Defines how many records is pulled in each pulling batch
5073
*/
51-
constructor ({
74+
constructor({
5275
mode,
5376
connectionProvider,
5477
bookmark,
5578
database,
5679
config,
5780
reactive,
5881
fetchSize
82+
}: {
83+
mode: string
84+
connectionProvider: ConnectionProvider
85+
bookmark: Bookmark
86+
database: string
87+
config: any
88+
reactive: boolean
89+
fetchSize: number
5990
}) {
6091
this._mode = mode
6192
this._database = database
@@ -91,7 +122,11 @@ class Session {
91122
* @param {TransactionConfig} [transactionConfig] - Configuration for the new auto-commit transaction.
92123
* @return {Result} New Result.
93124
*/
94-
run (query, parameters, transactionConfig) {
125+
run(
126+
query: Query,
127+
parameters?: any,
128+
transactionConfig?: TransactionConfig
129+
): Result {
95130
const { validatedQuery, params } = validateQueryAndParameters(
96131
query,
97132
parameters
@@ -102,7 +137,7 @@ class Session {
102137

103138
return this._run(validatedQuery, params, connection => {
104139
this._assertSessionIsOpen()
105-
return connection.protocol().run(validatedQuery, params, {
140+
return (connection as Connection).protocol().run(validatedQuery, params, {
106141
bookmark: this._lastBookmark,
107142
txConfig: autoCommitTxConfig,
108143
mode: this._mode,
@@ -114,7 +149,11 @@ class Session {
114149
})
115150
}
116151

117-
_run (query, parameters, customRunner) {
152+
_run(
153+
query: Query,
154+
parameters: any,
155+
customRunner: ConnectionConsumer
156+
): Result {
118157
const connectionHolder = this._connectionHolderWithMode(this._mode)
119158

120159
let observerPromise
@@ -143,7 +182,7 @@ class Session {
143182
return new Result(observerPromise, query, parameters, connectionHolder)
144183
}
145184

146-
async _acquireConnection (connectionConsumer) {
185+
async _acquireConnection(connectionConsumer: ConnectionConsumer) {
147186
let promise
148187
const connectionHolder = this._connectionHolderWithMode(this._mode)
149188
if (!this._open) {
@@ -180,7 +219,7 @@ class Session {
180219
* @param {TransactionConfig} [transactionConfig] - Configuration for the new auto-commit transaction.
181220
* @returns {Transaction} New Transaction.
182221
*/
183-
beginTransaction (transactionConfig) {
222+
beginTransaction(transactionConfig?: TransactionConfig): Transaction {
184223
// this function needs to support bookmarks parameter for backwards compatibility
185224
// parameter was of type {string|string[]} and represented either a single or multiple bookmarks
186225
// that's why we need to check parameter type and decide how to interpret the value
@@ -194,7 +233,7 @@ class Session {
194233
return this._beginTransaction(this._mode, txConfig)
195234
}
196235

197-
_beginTransaction (accessMode, txConfig) {
236+
_beginTransaction(accessMode: string, txConfig: TxConfig): Transaction {
198237
if (!this._open) {
199238
throw newError('Cannot begin a transaction on a closed session.')
200239
}
@@ -222,13 +261,13 @@ class Session {
222261
return tx
223262
}
224263

225-
_assertSessionIsOpen () {
264+
_assertSessionIsOpen() {
226265
if (!this._open) {
227266
throw newError('You cannot run more transactions on a closed session.')
228267
}
229268
}
230269

231-
_transactionClosed () {
270+
_transactionClosed() {
232271
this._hasTx = false
233272
}
234273

@@ -237,7 +276,7 @@ class Session {
237276
*
238277
* @return {string[]} A reference to a previous transaction.
239278
*/
240-
lastBookmark () {
279+
lastBookmark(): string[] {
241280
return this._lastBookmark.values()
242281
}
243282

@@ -255,7 +294,10 @@ class Session {
255294
* @return {Promise} Resolved promise as returned by the given function or rejected promise when given
256295
* function or commit fails.
257296
*/
258-
readTransaction (transactionWork, transactionConfig) {
297+
readTransaction<T>(
298+
transactionWork: TransactionWork<T>,
299+
transactionConfig?: TransactionConfig
300+
): Promise<T> {
259301
const config = new TxConfig(transactionConfig)
260302
return this._runTransaction(ACCESS_MODE_READ, config, transactionWork)
261303
}
@@ -274,12 +316,19 @@ class Session {
274316
* @return {Promise} Resolved promise as returned by the given function or rejected promise when given
275317
* function or commit fails.
276318
*/
277-
writeTransaction (transactionWork, transactionConfig) {
319+
writeTransaction<T>(
320+
transactionWork: TransactionWork<T>,
321+
transactionConfig?: TransactionConfig
322+
): Promise<T> {
278323
const config = new TxConfig(transactionConfig)
279324
return this._runTransaction(ACCESS_MODE_WRITE, config, transactionWork)
280325
}
281326

282-
_runTransaction (accessMode, transactionConfig, transactionWork) {
327+
_runTransaction<T>(
328+
accessMode: string,
329+
transactionConfig: TxConfig,
330+
transactionWork: TransactionWork<T>
331+
): Promise<T> {
283332
return this._transactionExecutor.execute(
284333
() => this._beginTransaction(accessMode, transactionConfig),
285334
transactionWork
@@ -290,7 +339,7 @@ class Session {
290339
* Update value of the last bookmark.
291340
* @param {Bookmark} newBookmark - The new bookmark.
292341
*/
293-
_updateBookmark (newBookmark) {
342+
_updateBookmark(newBookmark?: Bookmark) {
294343
if (newBookmark && !newBookmark.isEmpty()) {
295344
this._lastBookmark = newBookmark
296345
}
@@ -300,7 +349,7 @@ class Session {
300349
* Close this session.
301350
* @return {Promise}
302351
*/
303-
async close () {
352+
async close(): Promise<void> {
304353
if (this._open) {
305354
this._open = false
306355
this._transactionExecutor.close()
@@ -310,7 +359,7 @@ class Session {
310359
}
311360
}
312361

313-
_connectionHolderWithMode (mode) {
362+
_connectionHolderWithMode(mode: string): ConnectionHolder {
314363
if (mode === ACCESS_MODE_READ) {
315364
return this._readConnectionHolder
316365
} else if (mode === ACCESS_MODE_WRITE) {
@@ -320,14 +369,14 @@ class Session {
320369
}
321370
}
322371

323-
_onCompleteCallback (meta) {
372+
_onCompleteCallback(meta: any) {
324373
this._updateBookmark(new Bookmark(meta.bookmark))
325374
}
326375

327376
/**
328377
* @protected
329378
*/
330-
static _validateSessionMode (rawMode) {
379+
static _validateSessionMode(rawMode?: string): string {
331380
const mode = rawMode || ACCESS_MODE_WRITE
332381
if (mode !== ACCESS_MODE_READ && mode !== ACCESS_MODE_WRITE) {
333382
throw newError('Illegal session mode ' + mode)
@@ -336,7 +385,7 @@ class Session {
336385
}
337386
}
338387

339-
function _createTransactionExecutor (config) {
388+
function _createTransactionExecutor(config: any): TransactionExecutor {
340389
const maxRetryTimeMs =
341390
config && config.maxTransactionRetryTime
342391
? config.maxTransactionRetryTime
@@ -345,3 +394,4 @@ function _createTransactionExecutor (config) {
345394
}
346395

347396
export default Session
397+
export { TransactionConfig }

src/driver.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
DEFAULT_ACQUISITION_TIMEOUT,
2828
DEFAULT_MAX_SIZE
2929
} from './internal/pool-config'
30-
import Session from './session'
30+
import { Session } from 'neo4j-driver-core'
3131
import RxSession from './session-rx'
3232
import { FETCH_ALL } from './internal/bolt'
3333
import { ENCRYPTION_ON, ENCRYPTION_OFF } from './internal/util'

src/internal/connection-provider-routing.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
* limitations under the License.
1818
*/
1919

20-
import { newError, error, int } from 'neo4j-driver-core'
20+
import { newError, error, int, Session } from 'neo4j-driver-core'
2121
import { READ, WRITE } from '../driver'
22-
import Session from '../session'
2322
import RoutingTable from './routing-table'
2423
import Rediscovery from './rediscovery'
2524
import { HostNameResolver } from './node'

src/internal/rediscovery.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818
*/
1919
import RoutingTable from './routing-table'
2020
import { RawRoutingTable } from './bolt'
21-
import Session from '../session'
2221
import ServerAddress from './server-address'
23-
import { newError, error } from 'neo4j-driver-core'
22+
import { newError, error, Session } from 'neo4j-driver-core'
2423

2524
const { SERVICE_UNAVAILABLE } = error
2625
const PROCEDURE_NOT_FOUND_CODE = 'Neo.ClientError.Procedure.ProcedureNotFound'

src/session-rx.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import { defer, Observable, throwError } from 'rxjs'
2020
import { flatMap, catchError, concat } from 'rxjs/operators'
2121
import RxResult from './result-rx'
22-
import Session from './session'
22+
import { Session } from 'neo4j-driver-core'
2323
import RxTransaction from './transaction-rx'
2424
import { ACCESS_MODE_READ, ACCESS_MODE_WRITE } from './internal/constants'
2525
import TxConfig from './internal/tx-config'

test/session.test.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@
1818
*/
1919

2020
import neo4j from '../src'
21-
import Session from '../src/session'
2221
import { READ } from '../src/driver'
2322
import SingleConnectionProvider from '../src/internal/connection-provider-single'
2423
import FakeConnection from './internal/fake-connection'
2524
import sharedNeo4j from './internal/shared-neo4j'
2625
import _ from 'lodash'
2726
import { isString } from '../src/internal/util'
2827
import testUtils from './internal/test-utils'
29-
import { newError, error, queryType } from 'neo4j-driver-core'
28+
import { newError, error, queryType, Session } from 'neo4j-driver-core'
3029
import ServerAddress from '../src/internal/server-address'
3130

3231
const { PROTOCOL_ERROR, SESSION_EXPIRED } = error

test/types/driver.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ import Driver, {
2727
WRITE
2828
} from '../../types/driver'
2929
import { Parameters } from '../../types/query-runner'
30-
import Session from '../../types/session'
31-
import { ServerInfo } from 'neo4j-driver-core'
30+
import { ServerInfo, Session } from 'neo4j-driver-core'
3231
import RxSession from '../../types/session-rx'
3332
import { concat, map, catchError } from 'rxjs/operators'
3433
import { throwError } from 'rxjs'

test/types/session-rx.test.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@
1818
*/
1919

2020
import RxSession from '../../types/session-rx'
21-
import { TransactionConfig } from '../../types/session'
2221
import RxTransaction from '../../types/transaction-rx'
2322
import RxResult from '../../types/result-rx'
24-
import { Integer, Record, ResultSummary } from 'neo4j-driver-core'
23+
import {
24+
Integer,
25+
Record,
26+
ResultSummary,
27+
TransactionConfig
28+
} from 'neo4j-driver-core'
2529
import { Observable, of, Observer, throwError } from 'rxjs'
2630
import { concat, finalize, catchError } from 'rxjs/operators'
2731

test/types/session.test.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
* limitations under the License.
1818
*/
1919

20-
import Session, { TransactionConfig } from '../../types/session'
2120
import {
2221
Integer,
2322
Record,
2423
ResultSummary,
2524
QueryResult,
2625
Result,
27-
Transaction
26+
Transaction,
27+
Session,
28+
TransactionConfig
2829
} from 'neo4j-driver-core'
2930

3031
const dummy: any = null
@@ -54,7 +55,7 @@ const txConfig7: TransactionConfig = {
5455
}
5556

5657
const tx1: Transaction = session.beginTransaction()
57-
const bookmark: null | string = <null>session.lastBookmark()
58+
const bookmark: string[] = session.lastBookmark()
5859

5960
const promise1: Promise<number> = session.readTransaction((tx: Transaction) => {
6061
return 10

0 commit comments

Comments
 (0)