@furystack/mongodb-store 10.0.40 → 10.1.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [10.1.0] - 2026-03-03
4
+
5
+ ### ✨ Features
6
+
7
+ ### Lifecycle events in `MongoClientFactory`
8
+
9
+ `MongoClientFactory` now extends `EventHub` and emits events for client lifecycle:
10
+
11
+ - `onClientCreated` — emitted when a new MongoDB client is created, with `{ url }`
12
+ - `onDisposed` — emitted when the factory is disposed
13
+
14
+ ```typescript
15
+ const factory = injector.getInstance(MongoClientFactory)
16
+
17
+ factory.addListener('onClientCreated', ({ url }) => {
18
+ console.log(`MongoDB client created for ${url}`)
19
+ })
20
+ ```
21
+
22
+ ### 🧪 Tests
23
+
24
+ - Added tests for `onClientCreated` event emission on new client creation
25
+ - Added test verifying `onClientCreated` is not emitted when returning a cached client
26
+
27
+ ## [10.0.41] - 2026-02-26
28
+
29
+ ### ⬆️ Dependencies
30
+
31
+ - Updated internal `@furystack/*` dependencies
32
+ - Bumped `@types/node` from ^25.3.0 to ^25.3.1
33
+
3
34
  ## [10.0.40] - 2026-02-26
4
35
 
5
36
  ### 📝 Documentation
@@ -1,9 +1,20 @@
1
+ import { EventHub, type ListenerErrorPayload } from '@furystack/utils';
1
2
  import type { MongoClientOptions } from 'mongodb';
2
3
  import { MongoClient } from 'mongodb';
4
+ /**
5
+ * Events emitted by the {@link MongoClientFactory}
6
+ */
7
+ export type MongoClientFactoryEvents = {
8
+ onClientCreated: {
9
+ url: string;
10
+ };
11
+ onDisposed: undefined;
12
+ onListenerError: ListenerErrorPayload;
13
+ };
3
14
  /**
4
15
  * Factory for instantiating MongoDb clients
5
16
  */
6
- export declare class MongoClientFactory implements AsyncDisposable {
17
+ export declare class MongoClientFactory extends EventHub<MongoClientFactoryEvents> implements AsyncDisposable {
7
18
  private connections;
8
19
  [Symbol.asyncDispose](): Promise<void>;
9
20
  getClientFor(url: string, options?: MongoClientOptions): MongoClient;
@@ -1 +1 @@
1
- {"version":3,"file":"mongo-client-factory.d.ts","sourceRoot":"","sources":["../src/mongo-client-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC;;GAEG;AACH,qBACa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,WAAW,CAAsC;IAE5C,CAAC,MAAM,CAAC,YAAY,CAAC;IAK3B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;CAU9D"}
1
+ {"version":3,"file":"mongo-client-factory.d.ts","sourceRoot":"","sources":["../src/mongo-client-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,UAAU,EAAE,SAAS,CAAA;IACrB,eAAe,EAAE,oBAAoB,CAAA;CACtC,CAAA;AAED;;GAEG;AACH,qBACa,kBAAmB,SAAQ,QAAQ,CAAC,wBAAwB,CAAE,YAAW,eAAe;IACnG,OAAO,CAAC,WAAW,CAAsC;IAE5C,CAAC,MAAM,CAAC,YAAY,CAAC;IAO3B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;CAW9D"}
@@ -5,15 +5,18 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { Injectable } from '@furystack/inject';
8
+ import { EventHub } from '@furystack/utils';
8
9
  import { MongoClient } from 'mongodb';
9
10
  /**
10
11
  * Factory for instantiating MongoDb clients
11
12
  */
12
- let MongoClientFactory = class MongoClientFactory {
13
+ let MongoClientFactory = class MongoClientFactory extends EventHub {
13
14
  connections = new Map();
14
15
  async [Symbol.asyncDispose]() {
15
16
  await Promise.all([...this.connections.values()].map((c) => c.close(true)));
16
17
  this.connections.clear();
18
+ this.emit('onDisposed', undefined);
19
+ super[Symbol.dispose]();
17
20
  }
18
21
  getClientFor(url, options) {
19
22
  const existing = this.connections.get(url);
@@ -22,6 +25,7 @@ let MongoClientFactory = class MongoClientFactory {
22
25
  }
23
26
  const client = new MongoClient(url, options);
24
27
  this.connections.set(url, client);
28
+ this.emit('onClientCreated', { url });
25
29
  return client;
26
30
  }
27
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mongo-client-factory.js","sourceRoot":"","sources":["../src/mongo-client-factory.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC;;GAEG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACrB,WAAW,GAA6B,IAAI,GAAG,EAAE,CAAA;IAElD,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAChC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3E,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;IAEM,YAAY,CAAC,GAAW,EAAE,OAA4B;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACjC,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AAlBY,kBAAkB;IAD9B,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,kBAAkB,CAkB9B"}
1
+ {"version":3,"file":"mongo-client-factory.js","sourceRoot":"","sources":["../src/mongo-client-factory.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAA6B,MAAM,kBAAkB,CAAA;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAWrC;;GAEG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,QAAkC;IAChE,WAAW,GAA6B,IAAI,GAAG,EAAE,CAAA;IAElD,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAChC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3E,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QACxB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QAClC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;IACzB,CAAC;IAEM,YAAY,CAAC,GAAW,EAAE,OAA4B;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;QACrC,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AArBY,kBAAkB;IAD9B,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,kBAAkB,CAqB9B"}
@@ -2,7 +2,7 @@ import { StoreManager } from '@furystack/core';
2
2
  import { TestClass, createStoreTest } from '@furystack/core/create-physical-store-tests';
3
3
  import { Injector } from '@furystack/inject';
4
4
  import { usingAsync } from '@furystack/utils';
5
- import { describe, expect, it } from 'vitest';
5
+ import { describe, expect, it, vi } from 'vitest';
6
6
  import { MongoClientFactory } from './mongo-client-factory.js';
7
7
  import { useMongoDb } from './store-manager-helpers.js';
8
8
  class TestClassWithId {
@@ -115,4 +115,32 @@ describe('MongoDB Store', () => {
115
115
  });
116
116
  });
117
117
  });
118
+ describe('MongoClientFactory EventHub', () => {
119
+ it('should emit onClientCreated when a new client is created', async () => {
120
+ const factory = new MongoClientFactory();
121
+ try {
122
+ const handler = vi.fn();
123
+ factory.addListener('onClientCreated', handler);
124
+ factory.getClientFor('mongodb://localhost:27017/test-db');
125
+ expect(handler).toHaveBeenCalledTimes(1);
126
+ expect(handler).toHaveBeenCalledWith({ url: 'mongodb://localhost:27017/test-db' });
127
+ }
128
+ finally {
129
+ await factory[Symbol.asyncDispose]();
130
+ }
131
+ });
132
+ it('should not emit onClientCreated when returning an existing client', async () => {
133
+ const factory = new MongoClientFactory();
134
+ try {
135
+ const handler = vi.fn();
136
+ factory.getClientFor('mongodb://localhost:27017/test-db');
137
+ factory.addListener('onClientCreated', handler);
138
+ factory.getClientFor('mongodb://localhost:27017/test-db');
139
+ expect(handler).not.toHaveBeenCalled();
140
+ }
141
+ finally {
142
+ await factory[Symbol.asyncDispose]();
143
+ }
144
+ });
145
+ });
118
146
  //# sourceMappingURL=mongodb-store.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mongodb-store.spec.js","sourceRoot":"","sources":["../src/mongodb-store.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mongodb-store.spec.js","sourceRoot":"","sources":["../src/mongodb-store.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/mongodb-store",
3
- "version": "10.0.40",
3
+ "version": "10.1.0",
4
4
  "description": "MongoDB Store implementation for FuryStack",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -38,13 +38,13 @@
38
38
  },
39
39
  "homepage": "https://github.com/furystack/furystack",
40
40
  "dependencies": {
41
- "@furystack/core": "^15.2.1",
42
- "@furystack/inject": "^12.0.30",
43
- "@furystack/utils": "^8.1.10",
41
+ "@furystack/core": "^15.2.3",
42
+ "@furystack/inject": "^12.0.31",
43
+ "@furystack/utils": "^8.2.0",
44
44
  "mongodb": "7.1.0"
45
45
  },
46
46
  "devDependencies": {
47
- "@types/node": "^25.3.0",
47
+ "@types/node": "^25.3.1",
48
48
  "typescript": "^5.9.3",
49
49
  "vitest": "^4.0.18"
50
50
  },
@@ -1,17 +1,29 @@
1
1
  import { Injectable } from '@furystack/inject'
2
+ import { EventHub, type ListenerErrorPayload } from '@furystack/utils'
2
3
  import type { MongoClientOptions } from 'mongodb'
3
4
  import { MongoClient } from 'mongodb'
4
5
 
6
+ /**
7
+ * Events emitted by the {@link MongoClientFactory}
8
+ */
9
+ export type MongoClientFactoryEvents = {
10
+ onClientCreated: { url: string }
11
+ onDisposed: undefined
12
+ onListenerError: ListenerErrorPayload
13
+ }
14
+
5
15
  /**
6
16
  * Factory for instantiating MongoDb clients
7
17
  */
8
18
  @Injectable({ lifetime: 'singleton' })
9
- export class MongoClientFactory implements AsyncDisposable {
19
+ export class MongoClientFactory extends EventHub<MongoClientFactoryEvents> implements AsyncDisposable {
10
20
  private connections: Map<string, MongoClient> = new Map()
11
21
 
12
22
  public async [Symbol.asyncDispose]() {
13
23
  await Promise.all([...this.connections.values()].map((c) => c.close(true)))
14
24
  this.connections.clear()
25
+ this.emit('onDisposed', undefined)
26
+ super[Symbol.dispose]()
15
27
  }
16
28
 
17
29
  public getClientFor(url: string, options?: MongoClientOptions) {
@@ -22,6 +34,7 @@ export class MongoClientFactory implements AsyncDisposable {
22
34
 
23
35
  const client = new MongoClient(url, options)
24
36
  this.connections.set(url, client)
37
+ this.emit('onClientCreated', { url })
25
38
  return client
26
39
  }
27
40
  }
@@ -2,7 +2,7 @@ import { StoreManager } from '@furystack/core'
2
2
  import { TestClass, createStoreTest } from '@furystack/core/create-physical-store-tests'
3
3
  import { Injector } from '@furystack/inject'
4
4
  import { usingAsync } from '@furystack/utils'
5
- import { describe, expect, it } from 'vitest'
5
+ import { describe, expect, it, vi } from 'vitest'
6
6
  import { MongoClientFactory } from './mongo-client-factory.js'
7
7
  import { useMongoDb } from './store-manager-helpers.js'
8
8
 
@@ -132,3 +132,35 @@ describe('MongoDB Store', () => {
132
132
  })
133
133
  })
134
134
  })
135
+
136
+ describe('MongoClientFactory EventHub', () => {
137
+ it('should emit onClientCreated when a new client is created', async () => {
138
+ const factory = new MongoClientFactory()
139
+ try {
140
+ const handler = vi.fn()
141
+ factory.addListener('onClientCreated', handler)
142
+
143
+ factory.getClientFor('mongodb://localhost:27017/test-db')
144
+
145
+ expect(handler).toHaveBeenCalledTimes(1)
146
+ expect(handler).toHaveBeenCalledWith({ url: 'mongodb://localhost:27017/test-db' })
147
+ } finally {
148
+ await factory[Symbol.asyncDispose]()
149
+ }
150
+ })
151
+
152
+ it('should not emit onClientCreated when returning an existing client', async () => {
153
+ const factory = new MongoClientFactory()
154
+ try {
155
+ const handler = vi.fn()
156
+
157
+ factory.getClientFor('mongodb://localhost:27017/test-db')
158
+ factory.addListener('onClientCreated', handler)
159
+ factory.getClientFor('mongodb://localhost:27017/test-db')
160
+
161
+ expect(handler).not.toHaveBeenCalled()
162
+ } finally {
163
+ await factory[Symbol.asyncDispose]()
164
+ }
165
+ })
166
+ })