@sqb/nestjs 4.20.3 → 4.20.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSqbConfig = getSqbConfig;
4
+ const tslib_1 = require("tslib");
5
+ const node_process_1 = tslib_1.__importDefault(require("node:process"));
6
+ const objects_1 = require("@jsopen/objects");
7
+ const putil_varhelpers_1 = require("putil-varhelpers");
8
+ function getSqbConfig(moduleOptions, prefix = 'SQB_') {
9
+ const options = (0, objects_1.clone)(moduleOptions);
10
+ const env = node_process_1.default.env;
11
+ options.dialect = options.dialect || env[prefix + 'DIALECT'];
12
+ options.name = options.name || env[prefix + 'CONNECTION_NAME'];
13
+ options.host = options.host || env[prefix + 'HOST'];
14
+ options.port = options.port || (0, putil_varhelpers_1.toInt)(env[prefix + 'PORT']);
15
+ options.database = options.database || env[prefix + 'DATABASE'];
16
+ options.schema = options.schema || env[prefix + 'SCHEMA'];
17
+ options.user = options.user || env[prefix + 'USER'];
18
+ options.password = options.password || env[prefix + 'PASSWORD'];
19
+ options.driver = options.driver || env[prefix + 'DRIVER'];
20
+ options.pool = options.pool || {};
21
+ options.pool.max = options.pool.max || (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_MAX']);
22
+ options.pool.min = options.pool.min || (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_MIN']);
23
+ options.pool.idleTimeoutMillis =
24
+ options.pool.idleTimeoutMillis || (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_IDLE_TIMEOUT']);
25
+ options.pool.acquireTimeoutMillis =
26
+ options.pool.acquireTimeoutMillis ||
27
+ (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_ACQUIRE_TIMEOUT']);
28
+ options.pool.acquireMaxRetries =
29
+ options.pool.acquireMaxRetries ||
30
+ (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_ACQUIRE_MAX_RETRIES']);
31
+ options.pool.acquireRetryWait =
32
+ options.pool.acquireRetryWait ||
33
+ (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_ACQUIRE_RETRY_WAIT']);
34
+ options.pool.fifo = options.pool.fifo || (0, putil_varhelpers_1.toBoolean)(env[prefix + 'POOL_FIFO']);
35
+ options.pool.maxQueue =
36
+ options.pool.maxQueue || (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_MAX_QUEUE']);
37
+ options.pool.minIdle =
38
+ options.pool.minIdle || (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_MIN_IDLE']);
39
+ options.pool.validation =
40
+ options.pool.validation || (0, putil_varhelpers_1.toBoolean)(env[prefix + 'POOL_VALIDATION']);
41
+ options.pool.houseKeepInterval =
42
+ options.pool.houseKeepInterval ||
43
+ (0, putil_varhelpers_1.toInt)(env[prefix + 'POOL_HOUSE_KEEP_INTERVAL']);
44
+ return options;
45
+ }
@@ -9,6 +9,7 @@ const connect_1 = require("@sqb/connect");
9
9
  const crypto = tslib_1.__importStar(require("crypto"));
10
10
  const rxjs_1 = require("rxjs");
11
11
  const rxjs = tslib_1.__importStar(require("rxjs"));
12
+ const get_sqb_config_js_1 = require("./get-sqb-config.js");
12
13
  const sqb_constants_js_1 = require("./sqb.constants.js");
13
14
  const sqb_utils_js_1 = require("./sqb.utils.js");
14
15
  let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
@@ -25,19 +26,27 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
25
26
  };
26
27
  const connectionProvider = {
27
28
  provide: (0, sqb_utils_js_1.getSQBToken)(options.name),
28
- useFactory: () => this.createConnection(options),
29
+ inject: [sqb_constants_js_1.SQB_CONNECTION_OPTIONS],
30
+ useFactory: (sqbConnectionOptions) => this.createConnection(options, sqbConnectionOptions),
29
31
  };
30
32
  return {
31
33
  module: SqbCoreModule_1,
32
- providers: [connectionProvider, optionsProvider],
34
+ providers: [
35
+ connectionProvider,
36
+ optionsProvider,
37
+ {
38
+ provide: sqb_constants_js_1.SQB_CONNECTION_OPTIONS,
39
+ useValue: (0, get_sqb_config_js_1.getSqbConfig)(options.useValue || {}, options.envPrefix),
40
+ },
41
+ ],
33
42
  exports: [connectionProvider],
34
43
  };
35
44
  }
36
45
  static forRootAsync(options) {
37
46
  const connectionProvider = {
38
47
  provide: (0, sqb_utils_js_1.getSQBToken)(options.name),
39
- inject: [sqb_constants_js_1.SQB_MODULE_OPTIONS],
40
- useFactory: async (sqbOptions) => this.createConnection(sqbOptions),
48
+ inject: [sqb_constants_js_1.SQB_MODULE_OPTIONS, sqb_constants_js_1.SQB_CONNECTION_OPTIONS],
49
+ useFactory: async (sqbOptions, sqbConnectionOptions) => this.createConnection(sqbOptions, sqbConnectionOptions),
41
50
  };
42
51
  const asyncProviders = this.createAsyncProviders(options);
43
52
  return {
@@ -46,6 +55,10 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
46
55
  providers: [
47
56
  ...asyncProviders,
48
57
  connectionProvider,
58
+ {
59
+ provide: sqb_constants_js_1.SQB_MODULE_OPTIONS,
60
+ useValue: options,
61
+ },
49
62
  {
50
63
  provide: sqb_constants_js_1.SQB_MODULE_ID,
51
64
  useValue: crypto.randomUUID(),
@@ -56,8 +69,9 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
56
69
  }
57
70
  async onApplicationShutdown() {
58
71
  const client = this.moduleRef.get((0, sqb_utils_js_1.getSQBToken)(this.options.name));
72
+ const op = this.moduleRef.get(sqb_constants_js_1.SQB_CONNECTION_OPTIONS);
59
73
  if (client)
60
- await client.close(this.options.shutdownWaitMs);
74
+ await client.close(op.shutdownWaitMs);
61
75
  }
62
76
  static createAsyncProviders(options) {
63
77
  if (options.useExisting || options.useFactory)
@@ -76,7 +90,7 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
76
90
  static createAsyncOptionsProvider(options) {
77
91
  if (options.useFactory) {
78
92
  return {
79
- provide: sqb_constants_js_1.SQB_MODULE_OPTIONS,
93
+ provide: sqb_constants_js_1.SQB_CONNECTION_OPTIONS,
80
94
  useFactory: options.useFactory,
81
95
  inject: options.inject || [],
82
96
  };
@@ -84,25 +98,25 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
84
98
  const useClass = options.useClass || options.useExisting;
85
99
  if (useClass) {
86
100
  return {
87
- provide: sqb_constants_js_1.SQB_MODULE_OPTIONS,
101
+ provide: sqb_constants_js_1.SQB_CONNECTION_OPTIONS,
88
102
  useFactory: (optionsFactory) => optionsFactory.createSqbOptions(options.name),
89
103
  inject: [useClass],
90
104
  };
91
105
  }
92
106
  throw new Error('Invalid configuration. Must provide useFactory, useClass or useExisting');
93
107
  }
94
- static async createConnection(options) {
95
- const connectionToken = options.name;
108
+ static async createConnection(moduleOptions, sqbConnectionOptions) {
109
+ const connectionToken = moduleOptions.name;
96
110
  // NestJS 8
97
111
  // @ts-ignore
98
112
  if (rxjs.lastValueFrom) {
99
113
  // @ts-ignore
100
- return await rxjs.lastValueFrom((0, rxjs_1.defer)(async () => new connect_1.SqbClient(options)).pipe((0, sqb_utils_js_1.handleRetry)(connectionToken, options.retryAttempts, options.retryDelay, options.verboseRetryLog, options.toRetry)));
114
+ return await rxjs.lastValueFrom((0, rxjs_1.defer)(async () => new connect_1.SqbClient(sqbConnectionOptions)).pipe((0, sqb_utils_js_1.handleRetry)(connectionToken, sqbConnectionOptions.retryAttempts, sqbConnectionOptions.retryDelay, sqbConnectionOptions.verboseRetryLog, sqbConnectionOptions.toRetry)));
101
115
  }
102
116
  // NestJS 7
103
117
  // @ts-ignore
104
- return await (0, rxjs_1.defer)(async () => new connect_1.SqbClient(options))
105
- .pipe((0, sqb_utils_js_1.handleRetry)(connectionToken, options.retryAttempts, options.retryDelay, options.verboseRetryLog, options.toRetry))
118
+ return await (0, rxjs_1.defer)(async () => new connect_1.SqbClient(sqbConnectionOptions))
119
+ .pipe((0, sqb_utils_js_1.handleRetry)(connectionToken, sqbConnectionOptions.retryAttempts, sqbConnectionOptions.retryDelay, sqbConnectionOptions.verboseRetryLog, sqbConnectionOptions.toRetry))
106
120
  .toPromise();
107
121
  }
108
122
  };
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SQB_MODULE_ID = exports.SQB_MODULE_OPTIONS = void 0;
3
+ exports.SQB_MODULE_ID = exports.SQB_CONNECTION_OPTIONS = exports.SQB_MODULE_OPTIONS = void 0;
4
4
  exports.SQB_MODULE_OPTIONS = Symbol('SQB_MODULE_OPTIONS');
5
+ exports.SQB_CONNECTION_OPTIONS = Symbol('SQB_CONNECTION_OPTIONS');
5
6
  exports.SQB_MODULE_ID = Symbol('SQB_MODULE_ID');
@@ -0,0 +1,41 @@
1
+ import process from 'node:process';
2
+ import { clone } from '@jsopen/objects';
3
+ import { toBoolean, toInt } from 'putil-varhelpers';
4
+ export function getSqbConfig(moduleOptions, prefix = 'SQB_') {
5
+ const options = clone(moduleOptions);
6
+ const env = process.env;
7
+ options.dialect = options.dialect || env[prefix + 'DIALECT'];
8
+ options.name = options.name || env[prefix + 'CONNECTION_NAME'];
9
+ options.host = options.host || env[prefix + 'HOST'];
10
+ options.port = options.port || toInt(env[prefix + 'PORT']);
11
+ options.database = options.database || env[prefix + 'DATABASE'];
12
+ options.schema = options.schema || env[prefix + 'SCHEMA'];
13
+ options.user = options.user || env[prefix + 'USER'];
14
+ options.password = options.password || env[prefix + 'PASSWORD'];
15
+ options.driver = options.driver || env[prefix + 'DRIVER'];
16
+ options.pool = options.pool || {};
17
+ options.pool.max = options.pool.max || toInt(env[prefix + 'POOL_MAX']);
18
+ options.pool.min = options.pool.min || toInt(env[prefix + 'POOL_MIN']);
19
+ options.pool.idleTimeoutMillis =
20
+ options.pool.idleTimeoutMillis || toInt(env[prefix + 'POOL_IDLE_TIMEOUT']);
21
+ options.pool.acquireTimeoutMillis =
22
+ options.pool.acquireTimeoutMillis ||
23
+ toInt(env[prefix + 'POOL_ACQUIRE_TIMEOUT']);
24
+ options.pool.acquireMaxRetries =
25
+ options.pool.acquireMaxRetries ||
26
+ toInt(env[prefix + 'POOL_ACQUIRE_MAX_RETRIES']);
27
+ options.pool.acquireRetryWait =
28
+ options.pool.acquireRetryWait ||
29
+ toInt(env[prefix + 'POOL_ACQUIRE_RETRY_WAIT']);
30
+ options.pool.fifo = options.pool.fifo || toBoolean(env[prefix + 'POOL_FIFO']);
31
+ options.pool.maxQueue =
32
+ options.pool.maxQueue || toInt(env[prefix + 'POOL_MAX_QUEUE']);
33
+ options.pool.minIdle =
34
+ options.pool.minIdle || toInt(env[prefix + 'POOL_MIN_IDLE']);
35
+ options.pool.validation =
36
+ options.pool.validation || toBoolean(env[prefix + 'POOL_VALIDATION']);
37
+ options.pool.houseKeepInterval =
38
+ options.pool.houseKeepInterval ||
39
+ toInt(env[prefix + 'POOL_HOUSE_KEEP_INTERVAL']);
40
+ return options;
41
+ }
@@ -6,7 +6,8 @@ import { SqbClient } from '@sqb/connect';
6
6
  import * as crypto from 'crypto';
7
7
  import { defer } from 'rxjs';
8
8
  import * as rxjs from 'rxjs';
9
- import { SQB_MODULE_ID, SQB_MODULE_OPTIONS } from './sqb.constants.js';
9
+ import { getSqbConfig } from './get-sqb-config.js';
10
+ import { SQB_CONNECTION_OPTIONS, SQB_MODULE_ID, SQB_MODULE_OPTIONS, } from './sqb.constants.js';
10
11
  import { getSQBToken, handleRetry } from './sqb.utils.js';
11
12
  let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
12
13
  options;
@@ -22,19 +23,27 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
22
23
  };
23
24
  const connectionProvider = {
24
25
  provide: getSQBToken(options.name),
25
- useFactory: () => this.createConnection(options),
26
+ inject: [SQB_CONNECTION_OPTIONS],
27
+ useFactory: (sqbConnectionOptions) => this.createConnection(options, sqbConnectionOptions),
26
28
  };
27
29
  return {
28
30
  module: SqbCoreModule_1,
29
- providers: [connectionProvider, optionsProvider],
31
+ providers: [
32
+ connectionProvider,
33
+ optionsProvider,
34
+ {
35
+ provide: SQB_CONNECTION_OPTIONS,
36
+ useValue: getSqbConfig(options.useValue || {}, options.envPrefix),
37
+ },
38
+ ],
30
39
  exports: [connectionProvider],
31
40
  };
32
41
  }
33
42
  static forRootAsync(options) {
34
43
  const connectionProvider = {
35
44
  provide: getSQBToken(options.name),
36
- inject: [SQB_MODULE_OPTIONS],
37
- useFactory: async (sqbOptions) => this.createConnection(sqbOptions),
45
+ inject: [SQB_MODULE_OPTIONS, SQB_CONNECTION_OPTIONS],
46
+ useFactory: async (sqbOptions, sqbConnectionOptions) => this.createConnection(sqbOptions, sqbConnectionOptions),
38
47
  };
39
48
  const asyncProviders = this.createAsyncProviders(options);
40
49
  return {
@@ -43,6 +52,10 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
43
52
  providers: [
44
53
  ...asyncProviders,
45
54
  connectionProvider,
55
+ {
56
+ provide: SQB_MODULE_OPTIONS,
57
+ useValue: options,
58
+ },
46
59
  {
47
60
  provide: SQB_MODULE_ID,
48
61
  useValue: crypto.randomUUID(),
@@ -53,8 +66,9 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
53
66
  }
54
67
  async onApplicationShutdown() {
55
68
  const client = this.moduleRef.get(getSQBToken(this.options.name));
69
+ const op = this.moduleRef.get(SQB_CONNECTION_OPTIONS);
56
70
  if (client)
57
- await client.close(this.options.shutdownWaitMs);
71
+ await client.close(op.shutdownWaitMs);
58
72
  }
59
73
  static createAsyncProviders(options) {
60
74
  if (options.useExisting || options.useFactory)
@@ -73,7 +87,7 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
73
87
  static createAsyncOptionsProvider(options) {
74
88
  if (options.useFactory) {
75
89
  return {
76
- provide: SQB_MODULE_OPTIONS,
90
+ provide: SQB_CONNECTION_OPTIONS,
77
91
  useFactory: options.useFactory,
78
92
  inject: options.inject || [],
79
93
  };
@@ -81,25 +95,25 @@ let SqbCoreModule = SqbCoreModule_1 = class SqbCoreModule {
81
95
  const useClass = options.useClass || options.useExisting;
82
96
  if (useClass) {
83
97
  return {
84
- provide: SQB_MODULE_OPTIONS,
98
+ provide: SQB_CONNECTION_OPTIONS,
85
99
  useFactory: (optionsFactory) => optionsFactory.createSqbOptions(options.name),
86
100
  inject: [useClass],
87
101
  };
88
102
  }
89
103
  throw new Error('Invalid configuration. Must provide useFactory, useClass or useExisting');
90
104
  }
91
- static async createConnection(options) {
92
- const connectionToken = options.name;
105
+ static async createConnection(moduleOptions, sqbConnectionOptions) {
106
+ const connectionToken = moduleOptions.name;
93
107
  // NestJS 8
94
108
  // @ts-ignore
95
109
  if (rxjs.lastValueFrom) {
96
110
  // @ts-ignore
97
- return await rxjs.lastValueFrom(defer(async () => new SqbClient(options)).pipe(handleRetry(connectionToken, options.retryAttempts, options.retryDelay, options.verboseRetryLog, options.toRetry)));
111
+ return await rxjs.lastValueFrom(defer(async () => new SqbClient(sqbConnectionOptions)).pipe(handleRetry(connectionToken, sqbConnectionOptions.retryAttempts, sqbConnectionOptions.retryDelay, sqbConnectionOptions.verboseRetryLog, sqbConnectionOptions.toRetry)));
98
112
  }
99
113
  // NestJS 7
100
114
  // @ts-ignore
101
- return await defer(async () => new SqbClient(options))
102
- .pipe(handleRetry(connectionToken, options.retryAttempts, options.retryDelay, options.verboseRetryLog, options.toRetry))
115
+ return await defer(async () => new SqbClient(sqbConnectionOptions))
116
+ .pipe(handleRetry(connectionToken, sqbConnectionOptions.retryAttempts, sqbConnectionOptions.retryDelay, sqbConnectionOptions.verboseRetryLog, sqbConnectionOptions.toRetry))
103
117
  .toPromise();
104
118
  }
105
119
  };
@@ -1,2 +1,3 @@
1
1
  export const SQB_MODULE_OPTIONS = Symbol('SQB_MODULE_OPTIONS');
2
+ export const SQB_CONNECTION_OPTIONS = Symbol('SQB_CONNECTION_OPTIONS');
2
3
  export const SQB_MODULE_ID = Symbol('SQB_MODULE_ID');
package/package.json CHANGED
@@ -1,17 +1,19 @@
1
1
  {
2
2
  "name": "@sqb/nestjs",
3
3
  "description": "Nestjs module for data connection using SQB",
4
- "version": "4.20.3",
4
+ "version": "4.20.5",
5
5
  "author": "Panates",
6
6
  "license": "Apache-2.0",
7
7
  "dependencies": {
8
+ "@jsopen/objects": "^2.0.2",
9
+ "putil-varhelpers": "^1.6.5",
8
10
  "tslib": "^2.8.1"
9
11
  },
10
12
  "peerDependencies": {
11
13
  "@nestjs/common": ">=7.4.0",
12
14
  "@nestjs/core": ">=7.4.0",
13
- "@sqb/builder": "^4.20.3",
14
- "@sqb/connect": "^4.20.3",
15
+ "@sqb/builder": "^4.20.5",
16
+ "@sqb/connect": "^4.20.5",
15
17
  "reflect-metadata": "^0.2.2",
16
18
  "rxjs": ">=6.6.0"
17
19
  },
@@ -0,0 +1,2 @@
1
+ import { SqbClientConnectionOptions } from './sqb.interface.js';
2
+ export declare function getSqbConfig(moduleOptions: SqbClientConnectionOptions, prefix?: string): SqbClientConnectionOptions;
@@ -1,2 +1,3 @@
1
1
  export declare const SQB_MODULE_OPTIONS: unique symbol;
2
+ export declare const SQB_CONNECTION_OPTIONS: unique symbol;
2
3
  export declare const SQB_MODULE_ID: unique symbol;
@@ -1,11 +1,7 @@
1
- import { Type } from '@nestjs/common';
1
+ import { LoggerService, Type } from '@nestjs/common';
2
2
  import { ModuleMetadata } from '@nestjs/common/interfaces';
3
3
  import { ClientConfiguration } from '@sqb/connect';
4
- export type SqbModuleOptions = {
5
- /**
6
- * Connection name
7
- */
8
- name?: string;
4
+ export interface SqbClientConnectionOptions extends ClientConfiguration {
9
5
  /**
10
6
  * Number of times to retry connecting
11
7
  * Default: 10
@@ -37,14 +33,24 @@ export type SqbModuleOptions = {
37
33
  * Default: 10
38
34
  */
39
35
  shutdownWaitMs?: number;
40
- } & ClientConfiguration;
36
+ }
37
+ interface BaseModuleOptions {
38
+ envPrefix?: string;
39
+ logger?: LoggerService | string;
40
+ global?: boolean;
41
+ name?: string;
42
+ }
43
+ export interface SqbModuleOptions extends BaseModuleOptions {
44
+ useValue?: SqbClientConnectionOptions;
45
+ }
41
46
  export interface SqbOptionsFactory {
42
- createSqbOptions(connectionName?: string): Promise<SqbModuleOptions> | SqbModuleOptions;
47
+ createSqbOptions(connectionName?: string): Promise<SqbClientConnectionOptions> | SqbClientConnectionOptions;
43
48
  }
44
- export interface SqbModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
49
+ export interface SqbModuleAsyncOptions extends BaseModuleOptions, Pick<ModuleMetadata, 'imports'> {
45
50
  name?: string;
46
51
  useExisting?: Type<SqbOptionsFactory>;
47
52
  useClass?: Type<SqbOptionsFactory>;
48
- useFactory?: (...args: any[]) => Promise<SqbModuleOptions> | SqbModuleOptions;
53
+ useFactory?: (...args: any[]) => Promise<SqbClientConnectionOptions> | SqbClientConnectionOptions;
49
54
  inject?: any[];
50
55
  }
56
+ export {};