@volontariapp/bridge-nest 0.1.0-next.20260408104813

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.
Files changed (42) hide show
  1. package/README.md +93 -0
  2. package/dist/index.d.ts +9 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +9 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/interfaces/bridge-config.interface.d.ts +7 -0
  7. package/dist/interfaces/bridge-config.interface.d.ts.map +1 -0
  8. package/dist/interfaces/bridge-config.interface.js +2 -0
  9. package/dist/interfaces/bridge-config.interface.js.map +1 -0
  10. package/dist/modules/neo4j/neo4j-bridge.module.d.ts +6 -0
  11. package/dist/modules/neo4j/neo4j-bridge.module.d.ts.map +1 -0
  12. package/dist/modules/neo4j/neo4j-bridge.module.js +28 -0
  13. package/dist/modules/neo4j/neo4j-bridge.module.js.map +1 -0
  14. package/dist/modules/postgres/postgres-bridge.module.d.ts +6 -0
  15. package/dist/modules/postgres/postgres-bridge.module.d.ts.map +1 -0
  16. package/dist/modules/postgres/postgres-bridge.module.js +28 -0
  17. package/dist/modules/postgres/postgres-bridge.module.js.map +1 -0
  18. package/dist/modules/redis/redis-bridge.module.d.ts +6 -0
  19. package/dist/modules/redis/redis-bridge.module.d.ts.map +1 -0
  20. package/dist/modules/redis/redis-bridge.module.js +28 -0
  21. package/dist/modules/redis/redis-bridge.module.js.map +1 -0
  22. package/dist/providers/neo4j.provider.d.ts +7 -0
  23. package/dist/providers/neo4j.provider.d.ts.map +1 -0
  24. package/dist/providers/neo4j.provider.js +34 -0
  25. package/dist/providers/neo4j.provider.js.map +1 -0
  26. package/dist/providers/postgres.provider.d.ts +7 -0
  27. package/dist/providers/postgres.provider.d.ts.map +1 -0
  28. package/dist/providers/postgres.provider.js +34 -0
  29. package/dist/providers/postgres.provider.js.map +1 -0
  30. package/dist/providers/redis.provider.d.ts +7 -0
  31. package/dist/providers/redis.provider.d.ts.map +1 -0
  32. package/dist/providers/redis.provider.js +34 -0
  33. package/dist/providers/redis.provider.js.map +1 -0
  34. package/dist/test/example/config.example.d.ts +3 -0
  35. package/dist/test/example/config.example.d.ts.map +1 -0
  36. package/dist/test/example/config.example.js +22 -0
  37. package/dist/test/example/config.example.js.map +1 -0
  38. package/dist/test/integration/bridge-nest.int.spec.d.ts +2 -0
  39. package/dist/test/integration/bridge-nest.int.spec.d.ts.map +1 -0
  40. package/dist/test/integration/bridge-nest.int.spec.js +36 -0
  41. package/dist/test/integration/bridge-nest.int.spec.js.map +1 -0
  42. package/package.json +57 -0
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # @volontariapp/bridge-nest
2
+
3
+ This package provides a seamless integration of the core `@volontariapp/bridge` database connection providers into your NestJS applications.
4
+
5
+ By using `@volontariapp/bridge-nest`, your NestJS projects will natively support `onModuleInit` and `onModuleDestroy` lifecycle hooks. This automatically handles your database connections upon start-up, and gracefully tears them down on application exit. In case of issues, it uniformly propagates exceptions modeled by your custom error suite `BRIDGE_CONNECTION_FAILED`, etc.
6
+
7
+ ## Features
8
+ - **PostgresBridgeModule**: Easy drop-in registration for Postgres connections via TypeORM.
9
+ - **Neo4jBridgeModule**: Global module to register a `neo4j-driver` provider.
10
+ - **RedisBridgeModule**: Global module for `ioredis` caches or stores.
11
+ - Custom Providers that can be injected wherever necessary, wrapped correctly inside Nest's context layer.
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ yarn add @volontariapp/bridge-nest @volontariapp/bridge @volontariapp/errors @volontariapp/errors-nest
17
+ ```
18
+
19
+ ## Basic Usage
20
+
21
+ The modules are exported globally by leveraging `@Global()`. When you register one, the provider instantly becomes available to any feature modules in your application without needing to specifically import it into every `module.ts`.
22
+
23
+ ### 1. Register Modules in Your App
24
+
25
+ You typically import these inside your `AppModule` or `DatabaseModule`:
26
+
27
+ ```typescript
28
+ import { Module } from '@nestjs/common';
29
+ import {
30
+ PostgresBridgeModule,
31
+ Neo4jBridgeModule,
32
+ RedisBridgeModule
33
+ } from '@volontariapp/bridge-nest';
34
+
35
+ @Module({
36
+ imports: [
37
+ PostgresBridgeModule.register({
38
+ host: 'localhost',
39
+ port: 5432,
40
+ username: 'user',
41
+ password: 'pwd',
42
+ database: 'my_db',
43
+ synchronize: true,
44
+ }),
45
+ RedisBridgeModule.register({
46
+ host: 'localhost',
47
+ port: 6379,
48
+ }),
49
+ Neo4jBridgeModule.register({
50
+ url: 'neo4j://localhost:7687',
51
+ authToken: { principal: 'neo4j', credentials: 'password' },
52
+ })
53
+ ],
54
+ })
55
+ export class AppModule {}
56
+ ```
57
+
58
+ ### 2. Injecting the Providers
59
+
60
+ Use standard NestJS dependency injection using the provider classes directly in your service layers.
61
+
62
+ ```typescript
63
+ import { Injectable } from '@nestjs/common';
64
+ import { NestPostgresProvider, NestRedisProvider, NestNeo4jProvider } from '@volontariapp/bridge-nest';
65
+
66
+ @Injectable()
67
+ export class UserService {
68
+ constructor(
69
+ private readonly postgres: NestPostgresProvider,
70
+ private readonly redis: NestRedisProvider,
71
+ private readonly neo4j: NestNeo4jProvider,
72
+ ) {}
73
+
74
+ async doSomething() {
75
+ // Access native TypeORM DataSource
76
+ const pgDriver = this.postgres.getDriver();
77
+ await pgDriver.query('SELECT 1');
78
+
79
+ // Access ioredis library
80
+ const cache = this.redis.getDriver();
81
+ await cache.set('auth_token', '12345');
82
+
83
+ // Access neo4j driver
84
+ const neoDriver = this.neo4j.getDriver();
85
+ const session = neoDriver.session();
86
+ await session.run('MATCH (n:User) RETURN n');
87
+ await session.close();
88
+ }
89
+ }
90
+ ```
91
+
92
+ ## Error Handling
93
+ Internally, these decorators and lifecycles intercept internal provider failures safely and transform them using the monorepo's shared `BRIDGE_CONNECTION_FAILED` and `BRIDGE_DISCONNECTION_FAILED` utilities. This ensures any database configuration blunders are communicated explicitly as a `500 InternalServerError`.
@@ -0,0 +1,9 @@
1
+ import 'reflect-metadata';
2
+ export * from './modules/postgres/postgres-bridge.module.js';
3
+ export * from './modules/neo4j/neo4j-bridge.module.js';
4
+ export * from './modules/redis/redis-bridge.module.js';
5
+ export * from './providers/postgres.provider.js';
6
+ export * from './providers/neo4j.provider.js';
7
+ export * from './providers/redis.provider.js';
8
+ export * from './interfaces/bridge-config.interface.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AAEvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,yCAAyC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ import 'reflect-metadata';
2
+ export * from './modules/postgres/postgres-bridge.module.js';
3
+ export * from './modules/neo4j/neo4j-bridge.module.js';
4
+ export * from './modules/redis/redis-bridge.module.js';
5
+ export * from './providers/postgres.provider.js';
6
+ export * from './providers/neo4j.provider.js';
7
+ export * from './providers/redis.provider.js';
8
+ export * from './interfaces/bridge-config.interface.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AAEvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,yCAAyC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { IPostgresConfig, INeo4jConfig, IRedisConfig } from '@volontariapp/bridge';
2
+ export interface IBridgeConfig {
3
+ postgres: IPostgresConfig;
4
+ neo4j: INeo4jConfig;
5
+ redis: IRedisConfig;
6
+ }
7
+ //# sourceMappingURL=bridge-config.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-config.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/bridge-config.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAExF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bridge-config.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-config.interface.js","sourceRoot":"","sources":["../../src/interfaces/bridge-config.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { DynamicModule } from '@nestjs/common';
2
+ import type { INeo4jConfig } from '@volontariapp/bridge';
3
+ export declare class Neo4jBridgeModule {
4
+ static register(config: INeo4jConfig): DynamicModule;
5
+ }
6
+ //# sourceMappingURL=neo4j-bridge.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j-bridge.module.d.ts","sourceRoot":"","sources":["../../../src/modules/neo4j/neo4j-bridge.module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,qBAEa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa;CAYrD"}
@@ -0,0 +1,28 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var Neo4jBridgeModule_1;
8
+ import { Module, Global } from '@nestjs/common';
9
+ import { NestNeo4jProvider } from '../../providers/neo4j.provider.js';
10
+ let Neo4jBridgeModule = Neo4jBridgeModule_1 = class Neo4jBridgeModule {
11
+ static register(config) {
12
+ const provider = {
13
+ provide: NestNeo4jProvider,
14
+ useValue: new NestNeo4jProvider(config),
15
+ };
16
+ return {
17
+ module: Neo4jBridgeModule_1,
18
+ providers: [provider],
19
+ exports: [provider],
20
+ };
21
+ }
22
+ };
23
+ Neo4jBridgeModule = Neo4jBridgeModule_1 = __decorate([
24
+ Global(),
25
+ Module({})
26
+ ], Neo4jBridgeModule);
27
+ export { Neo4jBridgeModule };
28
+ //# sourceMappingURL=neo4j-bridge.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j-bridge.module.js","sourceRoot":"","sources":["../../../src/modules/neo4j/neo4j-bridge.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAI/D,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,MAAoB;QAClC,MAAM,QAAQ,GAAa;YACzB,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;SACxC,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,mBAAiB;YACzB,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,CAAC,QAAQ,CAAC;SACpB,CAAC;IACJ,CAAC;CACF,CAAA;AAbY,iBAAiB;IAF7B,MAAM,EAAE;IACR,MAAM,CAAC,EAAE,CAAC;GACE,iBAAiB,CAa7B"}
@@ -0,0 +1,6 @@
1
+ import type { DynamicModule } from '@nestjs/common';
2
+ import type { IPostgresConfig } from '@volontariapp/bridge';
3
+ export declare class PostgresBridgeModule {
4
+ static register(options: IPostgresConfig): DynamicModule;
5
+ }
6
+ //# sourceMappingURL=postgres-bridge.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-bridge.module.d.ts","sourceRoot":"","sources":["../../../src/modules/postgres/postgres-bridge.module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,qBAEa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa;CAYzD"}
@@ -0,0 +1,28 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var PostgresBridgeModule_1;
8
+ import { Module, Global } from '@nestjs/common';
9
+ import { NestPostgresProvider } from '../../providers/postgres.provider.js';
10
+ let PostgresBridgeModule = PostgresBridgeModule_1 = class PostgresBridgeModule {
11
+ static register(options) {
12
+ const provider = {
13
+ provide: NestPostgresProvider,
14
+ useValue: new NestPostgresProvider(options),
15
+ };
16
+ return {
17
+ module: PostgresBridgeModule_1,
18
+ providers: [provider],
19
+ exports: [provider],
20
+ };
21
+ }
22
+ };
23
+ PostgresBridgeModule = PostgresBridgeModule_1 = __decorate([
24
+ Global(),
25
+ Module({})
26
+ ], PostgresBridgeModule);
27
+ export { PostgresBridgeModule };
28
+ //# sourceMappingURL=postgres-bridge.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-bridge.module.js","sourceRoot":"","sources":["../../../src/modules/postgres/postgres-bridge.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAIrE,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,OAAwB;QACtC,MAAM,QAAQ,GAAa;YACzB,OAAO,EAAE,oBAAoB;YAC7B,QAAQ,EAAE,IAAI,oBAAoB,CAAC,OAAO,CAAC;SAC5C,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,sBAAoB;YAC5B,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,CAAC,QAAQ,CAAC;SACpB,CAAC;IACJ,CAAC;CACF,CAAA;AAbY,oBAAoB;IAFhC,MAAM,EAAE;IACR,MAAM,CAAC,EAAE,CAAC;GACE,oBAAoB,CAahC"}
@@ -0,0 +1,6 @@
1
+ import type { DynamicModule } from '@nestjs/common';
2
+ import type { IRedisConfig } from '@volontariapp/bridge';
3
+ export declare class RedisBridgeModule {
4
+ static register(options: IRedisConfig): DynamicModule;
5
+ }
6
+ //# sourceMappingURL=redis-bridge.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-bridge.module.d.ts","sourceRoot":"","sources":["../../../src/modules/redis/redis-bridge.module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,qBAEa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa;CAYtD"}
@@ -0,0 +1,28 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var RedisBridgeModule_1;
8
+ import { Module, Global } from '@nestjs/common';
9
+ import { NestRedisProvider } from '../../providers/redis.provider.js';
10
+ let RedisBridgeModule = RedisBridgeModule_1 = class RedisBridgeModule {
11
+ static register(options) {
12
+ const provider = {
13
+ provide: NestRedisProvider,
14
+ useValue: new NestRedisProvider(options),
15
+ };
16
+ return {
17
+ module: RedisBridgeModule_1,
18
+ providers: [provider],
19
+ exports: [provider],
20
+ };
21
+ }
22
+ };
23
+ RedisBridgeModule = RedisBridgeModule_1 = __decorate([
24
+ Global(),
25
+ Module({})
26
+ ], RedisBridgeModule);
27
+ export { RedisBridgeModule };
28
+ //# sourceMappingURL=redis-bridge.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-bridge.module.js","sourceRoot":"","sources":["../../../src/modules/redis/redis-bridge.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAI/D,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,OAAqB;QACnC,MAAM,QAAQ,GAAa;YACzB,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,IAAI,iBAAiB,CAAC,OAAO,CAAC;SACzC,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,mBAAiB;YACzB,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,CAAC,QAAQ,CAAC;SACpB,CAAC;IACJ,CAAC;CACF,CAAA;AAbY,iBAAiB;IAF7B,MAAM,EAAE;IACR,MAAM,CAAC,EAAE,CAAC;GACE,iBAAiB,CAa7B"}
@@ -0,0 +1,7 @@
1
+ import type { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { Neo4jProvider } from '@volontariapp/bridge';
3
+ export declare class NestNeo4jProvider extends Neo4jProvider implements OnModuleInit, OnModuleDestroy {
4
+ onModuleInit(): Promise<void>;
5
+ onModuleDestroy(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=neo4j.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j.provider.d.ts","sourceRoot":"","sources":["../../src/providers/neo4j.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,qBACa,iBAAkB,SAAQ,aAAc,YAAW,YAAY,EAAE,eAAe;IACrF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAQvC"}
@@ -0,0 +1,34 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable } from '@nestjs/common';
8
+ import { Neo4jProvider } from '@volontariapp/bridge';
9
+ import { BRIDGE_CONNECTION_FAILED, BRIDGE_DISCONNECTION_FAILED } from '@volontariapp/errors-nest';
10
+ let NestNeo4jProvider = class NestNeo4jProvider extends Neo4jProvider {
11
+ async onModuleInit() {
12
+ try {
13
+ await this.connect();
14
+ }
15
+ catch (e) {
16
+ const message = e instanceof Error ? e.message : 'Unknown connection error';
17
+ throw BRIDGE_CONNECTION_FAILED('Neo4j', message);
18
+ }
19
+ }
20
+ async onModuleDestroy() {
21
+ try {
22
+ await this.disconnect();
23
+ }
24
+ catch (e) {
25
+ const message = e instanceof Error ? e.message : 'Unknown disconnection error';
26
+ throw BRIDGE_DISCONNECTION_FAILED('Neo4j', message);
27
+ }
28
+ }
29
+ };
30
+ NestNeo4jProvider = __decorate([
31
+ Injectable()
32
+ ], NestNeo4jProvider);
33
+ export { NestNeo4jProvider };
34
+ //# sourceMappingURL=neo4j.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j.provider.js","sourceRoot":"","sources":["../../src/providers/neo4j.provider.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG3F,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;IAClD,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAC5E,MAAM,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;YAC/E,MAAM,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF,CAAA;AAlBY,iBAAiB;IAD7B,UAAU,EAAE;GACA,iBAAiB,CAkB7B"}
@@ -0,0 +1,7 @@
1
+ import type { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { PostgresProvider } from '@volontariapp/bridge';
3
+ export declare class NestPostgresProvider extends PostgresProvider implements OnModuleInit, OnModuleDestroy {
4
+ onModuleInit(): Promise<void>;
5
+ onModuleDestroy(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=postgres.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.provider.d.ts","sourceRoot":"","sources":["../../src/providers/postgres.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,qBACa,oBACX,SAAQ,gBACR,YAAW,YAAY,EAAE,eAAe;IAElC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAQvC"}
@@ -0,0 +1,34 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable } from '@nestjs/common';
8
+ import { PostgresProvider } from '@volontariapp/bridge';
9
+ import { BRIDGE_CONNECTION_FAILED, BRIDGE_DISCONNECTION_FAILED } from '@volontariapp/errors-nest';
10
+ let NestPostgresProvider = class NestPostgresProvider extends PostgresProvider {
11
+ async onModuleInit() {
12
+ try {
13
+ await this.connect();
14
+ }
15
+ catch (e) {
16
+ const message = e instanceof Error ? e.message : 'Unknown connection error';
17
+ throw BRIDGE_CONNECTION_FAILED('Postgres', message);
18
+ }
19
+ }
20
+ async onModuleDestroy() {
21
+ try {
22
+ await this.disconnect();
23
+ }
24
+ catch (e) {
25
+ const message = e instanceof Error ? e.message : 'Unknown disconnection error';
26
+ throw BRIDGE_DISCONNECTION_FAILED('Postgres', message);
27
+ }
28
+ }
29
+ };
30
+ NestPostgresProvider = __decorate([
31
+ Injectable()
32
+ ], NestPostgresProvider);
33
+ export { NestPostgresProvider };
34
+ //# sourceMappingURL=postgres.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.provider.js","sourceRoot":"","sources":["../../src/providers/postgres.provider.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG3F,IAAM,oBAAoB,GAA1B,MAAM,oBACX,SAAQ,gBAAgB;IAGxB,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAC5E,MAAM,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;YAC/E,MAAM,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF,CAAA;AArBY,oBAAoB;IADhC,UAAU,EAAE;GACA,oBAAoB,CAqBhC"}
@@ -0,0 +1,7 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { RedisProvider } from '@volontariapp/bridge';
3
+ export declare class NestRedisProvider extends RedisProvider implements OnModuleInit, OnModuleDestroy {
4
+ onModuleInit(): Promise<void>;
5
+ onModuleDestroy(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=redis.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.provider.d.ts","sourceRoot":"","sources":["../../src/providers/redis.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,qBACa,iBAAkB,SAAQ,aAAc,YAAW,YAAY,EAAE,eAAe;IACrF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAQvC"}
@@ -0,0 +1,34 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable } from '@nestjs/common';
8
+ import { RedisProvider } from '@volontariapp/bridge';
9
+ import { BRIDGE_CONNECTION_FAILED, BRIDGE_DISCONNECTION_FAILED } from '@volontariapp/errors-nest';
10
+ let NestRedisProvider = class NestRedisProvider extends RedisProvider {
11
+ async onModuleInit() {
12
+ try {
13
+ await this.connect();
14
+ }
15
+ catch (e) {
16
+ const message = e instanceof Error ? e.message : 'Unknown connection error';
17
+ throw BRIDGE_CONNECTION_FAILED('Redis', message);
18
+ }
19
+ }
20
+ async onModuleDestroy() {
21
+ try {
22
+ await this.disconnect();
23
+ }
24
+ catch (e) {
25
+ const message = e instanceof Error ? e.message : 'Unknown disconnection error';
26
+ throw BRIDGE_DISCONNECTION_FAILED('Redis', message);
27
+ }
28
+ }
29
+ };
30
+ NestRedisProvider = __decorate([
31
+ Injectable()
32
+ ], NestRedisProvider);
33
+ export { NestRedisProvider };
34
+ //# sourceMappingURL=redis.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.provider.js","sourceRoot":"","sources":["../../src/providers/redis.provider.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAiC,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG3F,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;IAClD,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAC5E,MAAM,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;YAC/E,MAAM,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF,CAAA;AAlBY,iBAAiB;IAD7B,UAAU,EAAE;GACA,iBAAiB,CAkB7B"}
@@ -0,0 +1,3 @@
1
+ import type { IBridgeConfig } from '../../interfaces/bridge-config.interface.js';
2
+ export declare const bridgeConfigExample: IBridgeConfig;
3
+ //# sourceMappingURL=config.example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.example.d.ts","sourceRoot":"","sources":["../../../src/test/example/config.example.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAEjF,eAAO,MAAM,mBAAmB,EAAE,aAoBjC,CAAC"}
@@ -0,0 +1,22 @@
1
+ export const bridgeConfigExample = {
2
+ postgres: {
3
+ host: 'localhost',
4
+ port: 5432,
5
+ username: 'user',
6
+ password: 'password',
7
+ database: 'bridge_test',
8
+ synchronize: true,
9
+ },
10
+ neo4j: {
11
+ url: 'bolt://localhost:7687',
12
+ authToken: {
13
+ principal: 'neo4j',
14
+ credentials: 'password',
15
+ },
16
+ },
17
+ redis: {
18
+ host: 'localhost',
19
+ port: 6379,
20
+ },
21
+ };
22
+ //# sourceMappingURL=config.example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.example.js","sourceRoot":"","sources":["../../../src/test/example/config.example.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAkB;IAChD,QAAQ,EAAE;QACR,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,IAAI;KAClB;IACD,KAAK,EAAE;QACL,GAAG,EAAE,uBAAuB;QAC5B,SAAS,EAAE;YACT,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,UAAU;SACxB;KACF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;KACX;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bridge-nest.int.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-nest.int.spec.d.ts","sourceRoot":"","sources":["../../../src/test/integration/bridge-nest.int.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { Test } from '@nestjs/testing';
2
+ import { describe, it, expect, beforeAll, afterAll } from '@jest/globals';
3
+ import { PostgresBridgeModule, Neo4jBridgeModule, RedisBridgeModule, NestPostgresProvider, NestNeo4jProvider, NestRedisProvider, } from '../../index.js';
4
+ import { bridgeConfigExample } from '../example/config.example.js';
5
+ describe('Database Bridge Modules (Integration)', () => {
6
+ let module;
7
+ beforeAll(async () => {
8
+ module = await Test.createTestingModule({
9
+ imports: [
10
+ PostgresBridgeModule.register(bridgeConfigExample.postgres),
11
+ Neo4jBridgeModule.register(bridgeConfigExample.neo4j),
12
+ RedisBridgeModule.register(bridgeConfigExample.redis),
13
+ ],
14
+ }).compile();
15
+ await module.init();
16
+ });
17
+ afterAll(async () => {
18
+ await module.close();
19
+ });
20
+ it('should inject NestPostgresProvider and have it connected', () => {
21
+ const provider = module.get(NestPostgresProvider);
22
+ expect(provider).toBeDefined();
23
+ expect(provider.isConnected()).toBe(true);
24
+ });
25
+ it('should inject NestNeo4jProvider and have it connected', () => {
26
+ const provider = module.get(NestNeo4jProvider);
27
+ expect(provider).toBeDefined();
28
+ expect(provider.isConnected()).toBe(true);
29
+ });
30
+ it('should inject NestRedisProvider and have it connected', () => {
31
+ const provider = module.get(NestRedisProvider);
32
+ expect(provider).toBeDefined();
33
+ expect(provider.isConnected()).toBe(true);
34
+ });
35
+ });
36
+ //# sourceMappingURL=bridge-nest.int.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-nest.int.spec.js","sourceRoot":"","sources":["../../../src/test/integration/bridge-nest.int.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,IAAI,MAAqB,CAAC;IAE1B,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC;YACtC,OAAO,EAAE;gBACP,oBAAoB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAC3D,iBAAiB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACrD,iBAAiB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC;aACtD;SACF,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@volontariapp/bridge-nest",
3
+ "version": "0.1.0-next.20260408104813",
4
+ "publishConfig": {
5
+ "access": "public",
6
+ "provenance": true
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/Volontariapp/npm-packages.git"
11
+ },
12
+ "description": "",
13
+ "license": "UNLICENSED",
14
+ "type": "module",
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "engines": {
27
+ "node": ">=24.14.0"
28
+ },
29
+ "scripts": {
30
+ "prepublishOnly": "yarn build",
31
+ "build": "tsc -p tsconfig.json",
32
+ "lint": "eslint src/",
33
+ "test": "node --experimental-vm-modules $(yarn bin jest)",
34
+ "test:watch": "node --experimental-vm-modules $(yarn bin jest) --watch"
35
+ },
36
+ "devDependencies": {
37
+ "@jest/globals": "^30.3.0",
38
+ "@nestjs/testing": "^11.1.18",
39
+ "@types/jest": "^30.0.0",
40
+ "jest": "^30.3.0",
41
+ "ts-jest": "^29.4.9",
42
+ "ts-node": "^10.9.2",
43
+ "typescript": "5.7.3"
44
+ },
45
+ "dependencies": {
46
+ "@nestjs/common": "^11.1.18",
47
+ "@nestjs/core": "^11.1.18",
48
+ "@volontariapp/bridge": "0.1.0-next.20260408104813",
49
+ "@volontariapp/errors": "0.2.0",
50
+ "@volontariapp/errors-nest": "0.3.0-next.20260408104813",
51
+ "ioredis": "^5.10.1",
52
+ "neo4j-driver": "^6.0.1",
53
+ "reflect-metadata": "^0.2.2",
54
+ "rxjs": "^7.8.2",
55
+ "typeorm": "^0.3.28"
56
+ }
57
+ }