@furystack/filesystem-store 7.0.40 → 7.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,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [7.1.0] - 2026-03-03
4
+
5
+ ### ✨ Features
6
+
7
+ ### `onWatcherError` event for file system watcher failures
8
+
9
+ `FileSystemStore` now emits an `onWatcherError` event when registering the file system watcher fails, replacing silent error swallowing.
10
+
11
+ ```typescript
12
+ const store = new FileSystemStore({
13
+ fileName: '/data/entities.json',
14
+ primaryKey: 'id',
15
+ model: MyEntity,
16
+ })
17
+
18
+ store.addListener('onWatcherError', ({ error }) => {
19
+ console.error('File watcher registration failed:', error)
20
+ })
21
+ ```
22
+
23
+ - Added `onListenerError` to the event map for consistent EventHub error handling
24
+
3
25
  ## [7.0.40] - 2026-02-26
4
26
 
5
27
  ### ⬆️ Dependencies
@@ -1,6 +1,6 @@
1
1
  import type { FilterType, FindOptions, PhysicalStore } from '@furystack/core';
2
2
  import type { Constructable } from '@furystack/inject';
3
- import { EventHub } from '@furystack/utils';
3
+ import { EventHub, type ListenerErrorPayload } from '@furystack/utils';
4
4
  import { promises } from 'fs';
5
5
  /**
6
6
  * Store implementation that stores info in a simple JSON file
@@ -16,6 +16,10 @@ export declare class FileSystemStore<T, TPrimaryKey extends keyof T> extends Eve
16
16
  onEntityRemoved: {
17
17
  key: T[TPrimaryKey];
18
18
  };
19
+ onWatcherError: {
20
+ error: unknown;
21
+ };
22
+ onListenerError: ListenerErrorPayload;
19
23
  }> implements PhysicalStore<T, TPrimaryKey, T> {
20
24
  private readonly options;
21
25
  private readonly watcher?;
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-store.d.ts","sourceRoot":"","sources":["../src/filesystem-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,QAAQ,EAAS,MAAM,IAAI,CAAA;AAIpC;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,CACzD,SAAQ,QAAQ,CAAC;IACf,aAAa,EAAE;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAA;IAC5B,eAAe,EAAE;QAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAA;IAC3D,eAAe,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;KAAE,CAAA;CACzC,CACD,YAAW,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAmFzC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAjF1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAW;IAEpC,SAAgB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAEvC,SAAgB,UAAU,EAAE,WAAW,CAAA;IAEvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAE7D,OAAO,KAAK,KAAK,GAEhB;IAEY,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,IAAI,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;IACpC,UAAU,UAAQ;IACZ,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAIhD,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;IAMnB,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC;IAIpE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAI5B,WAAW;IAYX,CAAC,MAAM,CAAC,YAAY,CAAC;IAOrB,UAAU;IAgBV,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IAKxC,QAAQ,2BAAoB;IAC5B,SAAS,4BAAqB;gBAGlB,OAAO,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,WAAW,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;KACxB;CA2BJ"}
1
+ {"version":3,"file":"filesystem-store.d.ts","sourceRoot":"","sources":["../src/filesystem-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEtE,OAAO,EAAE,QAAQ,EAAS,MAAM,IAAI,CAAA;AAIpC;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,CACzD,SAAQ,QAAQ,CAAC;IACf,aAAa,EAAE;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAA;IAC5B,eAAe,EAAE;QAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAA;IAC3D,eAAe,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;KAAE,CAAA;IACxC,cAAc,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;IAClC,eAAe,EAAE,oBAAoB,CAAA;CACtC,CACD,YAAW,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAmFzC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAjF1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAW;IAEpC,SAAgB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAEvC,SAAgB,UAAU,EAAE,WAAW,CAAA;IAEvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAE7D,OAAO,KAAK,KAAK,GAEhB;IAEY,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,IAAI,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;IACpC,UAAU,UAAQ;IACZ,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAIhD,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;IAMnB,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC;IAIpE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAI5B,WAAW;IAYX,CAAC,MAAM,CAAC,YAAY,CAAC;IAOrB,UAAU;IAgBV,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IAKxC,QAAQ,2BAAoB;IAC5B,SAAS,4BAAqB;gBAGlB,OAAO,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,WAAW,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;KACxB;CA2BJ"}
@@ -96,7 +96,7 @@ export class FileSystemStore extends EventHub {
96
96
  });
97
97
  }
98
98
  catch (error) {
99
- // Error registering file watcher for store. External updates won't be updated.
99
+ this.emit('onWatcherError', { error });
100
100
  }
101
101
  }
102
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-store.js","sourceRoot":"","sources":["../src/filesystem-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem-store.js","sourceRoot":"","sources":["../src/filesystem-store.ts"],"names":[],"mappings":"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"}
@@ -61,6 +61,19 @@ describe('FileSystemStore', () => {
61
61
  expect(count).toBe(1);
62
62
  });
63
63
  });
64
+ describe('onWatcherError event', () => {
65
+ it('should emit onWatcherError when file watcher registration fails', () => {
66
+ const emitSpy = vi.spyOn(FileSystemStore.prototype, 'emit');
67
+ const store = new FileSystemStore({
68
+ fileName: '/nonexistent-dir/impossible-path/test.json',
69
+ primaryKey: 'id',
70
+ model: TestClass,
71
+ });
72
+ expect(emitSpy).toHaveBeenCalledWith('onWatcherError', { error: expect.any(Error) });
73
+ emitSpy.mockRestore();
74
+ store[Symbol.dispose]();
75
+ });
76
+ });
64
77
  afterAll(async () => {
65
78
  for (const fileName of storeNames) {
66
79
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-store.spec.js","sourceRoot":"","sources":["../src/filesystem-store.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem-store.spec.js","sourceRoot":"","sources":["../src/filesystem-store.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/filesystem-store",
3
- "version": "7.0.40",
3
+ "version": "7.1.0",
4
4
  "description": "Simple File System store implementation for FuryStack",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -38,9 +38,9 @@
38
38
  },
39
39
  "homepage": "https://github.com/furystack/furystack",
40
40
  "dependencies": {
41
- "@furystack/core": "^15.2.2",
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
  },
45
45
  "devDependencies": {
46
46
  "@types/node": "^25.3.1",
@@ -77,6 +77,20 @@ describe('FileSystemStore', () => {
77
77
  )
78
78
  })
79
79
 
80
+ describe('onWatcherError event', () => {
81
+ it('should emit onWatcherError when file watcher registration fails', () => {
82
+ const emitSpy = vi.spyOn(FileSystemStore.prototype, 'emit')
83
+ const store = new FileSystemStore({
84
+ fileName: '/nonexistent-dir/impossible-path/test.json',
85
+ primaryKey: 'id' as const,
86
+ model: TestClass,
87
+ })
88
+ expect(emitSpy).toHaveBeenCalledWith('onWatcherError', { error: expect.any(Error) as Error })
89
+ emitSpy.mockRestore()
90
+ store[Symbol.dispose]()
91
+ })
92
+ })
93
+
80
94
  afterAll(async () => {
81
95
  for (const fileName of storeNames) {
82
96
  try {
@@ -1,7 +1,7 @@
1
1
  import type { FilterType, FindOptions, PhysicalStore } from '@furystack/core'
2
2
  import { InMemoryStore } from '@furystack/core'
3
3
  import type { Constructable } from '@furystack/inject'
4
- import { EventHub } from '@furystack/utils'
4
+ import { EventHub, type ListenerErrorPayload } from '@furystack/utils'
5
5
  import type { FSWatcher } from 'fs'
6
6
  import { promises, watch } from 'fs'
7
7
 
@@ -15,6 +15,8 @@ export class FileSystemStore<T, TPrimaryKey extends keyof T>
15
15
  onEntityAdded: { entity: T }
16
16
  onEntityUpdated: { id: T[TPrimaryKey]; change: Partial<T> }
17
17
  onEntityRemoved: { key: T[TPrimaryKey] }
18
+ onWatcherError: { error: unknown }
19
+ onListenerError: ListenerErrorPayload
18
20
  }>
19
21
  implements PhysicalStore<T, TPrimaryKey, T>
20
22
  {
@@ -128,7 +130,7 @@ export class FileSystemStore<T, TPrimaryKey extends keyof T>
128
130
  void this.reloadData()
129
131
  })
130
132
  } catch (error) {
131
- // Error registering file watcher for store. External updates won't be updated.
133
+ this.emit('onWatcherError', { error })
132
134
  }
133
135
  }
134
136
  }