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'
2225import { 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 */
3849class 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
347396export default Session
397+ export { TransactionConfig }
0 commit comments