Skip to content

Commit 0edbf02

Browse files
Export validateConfiguration
1 parent 86a1097 commit 0edbf02

File tree

6 files changed

+51
-47
lines changed

6 files changed

+51
-47
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sqlitecloud/drivers",
3-
"version": "0.0.38",
3+
"version": "0.0.40",
44
"description": "SQLiteCloud drivers for Typescript/Javascript in edge, web and node clients",
55
"main": "./lib/index.js",
66
"types": "./lib/index.d.ts",

src/connection.ts

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@
33
*/
44

55
import { SQLiteCloudConfig, SQLiteCloudError, ErrorCallback, ResultsCallback } from './types'
6-
import { parseConnectionString, parseBoolean, isBrowser } from './utilities'
7-
8-
/** Default timeout value for queries */
9-
export const DEFAULT_TIMEOUT = 300 * 1000
10-
/** Default tls connection port */
11-
export const DEFAULT_PORT = 9960
6+
import { validateConfiguration, isBrowser } from './utilities'
127

138
/**
149
* Base class for SQLiteCloudConnection handles basics and defines methods.
@@ -18,9 +13,9 @@ export class SQLiteCloudConnection {
1813
/** Parse and validate provided connectionString or configuration */
1914
constructor(config: SQLiteCloudConfig | string, callback?: ErrorCallback) {
2015
if (typeof config === 'string') {
21-
this.config = this.validateConfiguration({ connectionString: config })
16+
this.config = validateConfiguration({ connectionString: config })
2217
} else {
23-
this.config = this.validateConfiguration(config)
18+
this.config = validateConfiguration(config)
2419
}
2520

2621
// connect transport layer to server
@@ -93,41 +88,6 @@ export class SQLiteCloudConnection {
9388
// private methods
9489
//
9590

96-
/** Validate configuration, apply defaults, throw if something is missing or misconfigured */
97-
protected validateConfiguration(config: SQLiteCloudConfig): SQLiteCloudConfig {
98-
if (config.connectionString) {
99-
config = {
100-
...config,
101-
...parseConnectionString(config.connectionString),
102-
connectionString: config.connectionString // keep original connection string
103-
}
104-
}
105-
106-
// apply defaults where needed
107-
config.port ||= DEFAULT_PORT
108-
config.timeout = config.timeout && config.timeout > 0 ? config.timeout : DEFAULT_TIMEOUT
109-
config.clientId ||= 'SQLiteCloud'
110-
111-
config.verbose = parseBoolean(config.verbose)
112-
config.noBlob = parseBoolean(config.noBlob)
113-
config.compression = parseBoolean(config.compression)
114-
config.createDatabase = parseBoolean(config.createDatabase)
115-
config.nonlinearizable = parseBoolean(config.nonlinearizable)
116-
117-
if (!config.username || !config.password || !config.host) {
118-
console.error('SQLiteCloudConnection.validateConfiguration - missing arguments', config)
119-
throw new SQLiteCloudError('The user, password and host arguments must be specified.', { errorCode: 'ERR_MISSING_ARGS' })
120-
}
121-
122-
if (!config.connectionString) {
123-
// build connection string from configuration, values are already validated
124-
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
125-
config.connectionString = `sqlitecloud://${config.username}:${config.password}@${config.host}:${config.port}/${config.database}`
126-
}
127-
128-
return config
129-
}
130-
13191
/** Will log to console if verbose mode is enabled */
13292
protected log(message: string, ...optionalParams: any[]): void {
13393
if (this.config.verbose) {

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ export { Statement } from './statement'
77
export { SQLiteCloudConfig, SQLCloudRowsetMetadata, SQLiteCloudError, ErrorCallback } from './types'
88
export { SQLiteCloudRowset, SQLiteCloudRow } from './rowset'
99
export { SQLiteCloudConnection } from './connection'
10-
export { escapeSqlParameter, prepareSql } from './utilities'
10+
export { escapeSqlParameter, prepareSql, parseConnectionString, validateConfiguration } from './utilities'
1111
export { WebSocketTransport } from './transport-ws'
1212
export { TlsSocketTransport } from './transport-tls'

src/transport-tls.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export class TlsSocketTransport implements ConnectionTransport {
126126

127127
let buffer = Buffer.alloc(0)
128128
const rowsetChunks: Buffer[] = []
129-
const startedOn = new Date()
129+
// const startedOn = new Date()
130130

131131
// define what to do if an answer does not arrive within the set timeout
132132
let socketTimeout: number

src/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44

55
import tls from 'tls'
66

7+
/** Default timeout value for queries */
8+
export const DEFAULT_TIMEOUT = 300 * 1000
9+
/** Default tls connection port */
10+
export const DEFAULT_PORT = 9960
11+
712
/** Configuration for SQLite cloud connection */
813
export interface SQLiteCloudConfig {
914
/** Connection string in the form of sqlitecloud://user:password@host:port/database?options */

src/utilities.ts

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// utilities.ts - utility methods to manipulate SQL statements
33
//
44

5-
import { SQLiteCloudConfig, SQLiteCloudError, SQLiteCloudDataTypes } from './types'
5+
import { SQLiteCloudConfig, SQLiteCloudError, SQLiteCloudDataTypes, DEFAULT_PORT, DEFAULT_TIMEOUT } from './types'
66

77
//
88
// determining running environment, thanks to browser-or-node
@@ -115,6 +115,45 @@ export function popCallback<T extends ErrorCallback = ErrorCallback>(
115115
return { args: remaining }
116116
}
117117

118+
//
119+
// configuration validation
120+
//
121+
122+
/** Validate configuration, apply defaults, throw if something is missing or misconfigured */
123+
export function validateConfiguration(config: SQLiteCloudConfig): SQLiteCloudConfig {
124+
if (config.connectionString) {
125+
config = {
126+
...config,
127+
...parseConnectionString(config.connectionString),
128+
connectionString: config.connectionString // keep original connection string
129+
}
130+
}
131+
132+
// apply defaults where needed
133+
config.port ||= DEFAULT_PORT
134+
config.timeout = config.timeout && config.timeout > 0 ? config.timeout : DEFAULT_TIMEOUT
135+
config.clientId ||= 'SQLiteCloud'
136+
137+
config.verbose = parseBoolean(config.verbose)
138+
config.noBlob = parseBoolean(config.noBlob)
139+
config.compression = parseBoolean(config.compression)
140+
config.createDatabase = parseBoolean(config.createDatabase)
141+
config.nonlinearizable = parseBoolean(config.nonlinearizable)
142+
143+
if (!config.username || !config.password || !config.host) {
144+
console.error('SQLiteCloudConnection.validateConfiguration - missing arguments', config)
145+
throw new SQLiteCloudError('The user, password and host arguments must be specified.', { errorCode: 'ERR_MISSING_ARGS' })
146+
}
147+
148+
if (!config.connectionString) {
149+
// build connection string from configuration, values are already validated
150+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
151+
config.connectionString = `sqlitecloud://${config.username}:${config.password}@${config.host}:${config.port}/${config.database}`
152+
}
153+
154+
return config
155+
}
156+
118157
/** Parse connectionString like sqlitecloud://username:password@host:port/database?option1=xxx&option2=xxx into its components */
119158
export function parseConnectionString(connectionString: string): SQLiteCloudConfig {
120159
try {

0 commit comments

Comments
 (0)