@hamak/ui-store 0.5.1

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 (155) hide show
  1. package/README.md +143 -0
  2. package/dist/api/api/index.d.ts +7 -0
  3. package/dist/api/api/index.d.ts.map +1 -0
  4. package/dist/api/api/index.js +6 -0
  5. package/dist/api/api/middleware-registry.d.ts +33 -0
  6. package/dist/api/api/middleware-registry.d.ts.map +1 -0
  7. package/dist/api/api/middleware-registry.js +5 -0
  8. package/dist/api/api/reducer-registry.d.ts +41 -0
  9. package/dist/api/api/reducer-registry.d.ts.map +1 -0
  10. package/dist/api/api/reducer-registry.js +5 -0
  11. package/dist/api/api/store-manager.d.ts +55 -0
  12. package/dist/api/api/store-manager.d.ts.map +1 -0
  13. package/dist/api/api/store-manager.js +5 -0
  14. package/dist/api/autosave/autosave-action-factory.d.ts +69 -0
  15. package/dist/api/autosave/autosave-action-factory.d.ts.map +1 -0
  16. package/dist/api/autosave/autosave-action-factory.js +135 -0
  17. package/dist/api/autosave/autosave-action-types.d.ts +134 -0
  18. package/dist/api/autosave/autosave-action-types.d.ts.map +1 -0
  19. package/dist/api/autosave/autosave-action-types.js +44 -0
  20. package/dist/api/autosave/autosave-types.d.ts +86 -0
  21. package/dist/api/autosave/autosave-types.d.ts.map +1 -0
  22. package/dist/api/autosave/autosave-types.js +35 -0
  23. package/dist/api/autosave/index.d.ts +9 -0
  24. package/dist/api/autosave/index.d.ts.map +1 -0
  25. package/dist/api/autosave/index.js +8 -0
  26. package/dist/api/fs/contracts/filesystem-facade.contract.d.ts +57 -0
  27. package/dist/api/fs/contracts/filesystem-facade.contract.d.ts.map +1 -0
  28. package/dist/api/fs/contracts/filesystem-facade.contract.js +1 -0
  29. package/dist/api/fs/contracts/filesystem-manager.contract.d.ts +42 -0
  30. package/dist/api/fs/contracts/filesystem-manager.contract.d.ts.map +1 -0
  31. package/dist/api/fs/contracts/filesystem-manager.contract.js +1 -0
  32. package/dist/api/fs/index.d.ts +5 -0
  33. package/dist/api/fs/index.d.ts.map +1 -0
  34. package/dist/api/fs/index.js +4 -0
  35. package/dist/api/index.d.ts +10 -0
  36. package/dist/api/index.d.ts.map +1 -0
  37. package/dist/api/index.js +9 -0
  38. package/dist/api/tokens/index.d.ts +5 -0
  39. package/dist/api/tokens/index.d.ts.map +1 -0
  40. package/dist/api/tokens/index.js +4 -0
  41. package/dist/api/tokens/service-tokens.d.ts +10 -0
  42. package/dist/api/tokens/service-tokens.d.ts.map +1 -0
  43. package/dist/api/tokens/service-tokens.js +10 -0
  44. package/dist/api/types/extension-types.d.ts +32 -0
  45. package/dist/api/types/extension-types.d.ts.map +1 -0
  46. package/dist/api/types/extension-types.js +4 -0
  47. package/dist/api/types/index.d.ts +8 -0
  48. package/dist/api/types/index.d.ts.map +1 -0
  49. package/dist/api/types/index.js +7 -0
  50. package/dist/api/types/middleware-types.d.ts +31 -0
  51. package/dist/api/types/middleware-types.d.ts.map +1 -0
  52. package/dist/api/types/middleware-types.js +4 -0
  53. package/dist/api/types/reducer-types.d.ts +22 -0
  54. package/dist/api/types/reducer-types.d.ts.map +1 -0
  55. package/dist/api/types/reducer-types.js +4 -0
  56. package/dist/api/types/store-types.d.ts +49 -0
  57. package/dist/api/types/store-types.d.ts.map +1 -0
  58. package/dist/api/types/store-types.js +4 -0
  59. package/dist/impl/autosave/autosave-config-resolver.d.ts +45 -0
  60. package/dist/impl/autosave/autosave-config-resolver.d.ts.map +1 -0
  61. package/dist/impl/autosave/autosave-config-resolver.js +107 -0
  62. package/dist/impl/autosave/autosave-middleware.d.ts +37 -0
  63. package/dist/impl/autosave/autosave-middleware.d.ts.map +1 -0
  64. package/dist/impl/autosave/autosave-middleware.js +297 -0
  65. package/dist/impl/autosave/autosave-registry.d.ts +15 -0
  66. package/dist/impl/autosave/autosave-registry.d.ts.map +1 -0
  67. package/dist/impl/autosave/autosave-registry.js +38 -0
  68. package/dist/impl/autosave/autosave-sync-middleware.d.ts +24 -0
  69. package/dist/impl/autosave/autosave-sync-middleware.d.ts.map +1 -0
  70. package/dist/impl/autosave/autosave-sync-middleware.js +98 -0
  71. package/dist/impl/autosave/index.d.ts +8 -0
  72. package/dist/impl/autosave/index.d.ts.map +1 -0
  73. package/dist/impl/autosave/index.js +7 -0
  74. package/dist/impl/core/index.d.ts +4 -0
  75. package/dist/impl/core/index.d.ts.map +1 -0
  76. package/dist/impl/core/index.js +3 -0
  77. package/dist/impl/core/middleware-registry.d.ts +21 -0
  78. package/dist/impl/core/middleware-registry.d.ts.map +1 -0
  79. package/dist/impl/core/middleware-registry.js +60 -0
  80. package/dist/impl/core/reducer-registry.d.ts +18 -0
  81. package/dist/impl/core/reducer-registry.d.ts.map +1 -0
  82. package/dist/impl/core/reducer-registry.js +65 -0
  83. package/dist/impl/core/store-manager.d.ts +28 -0
  84. package/dist/impl/core/store-manager.d.ts.map +1 -0
  85. package/dist/impl/core/store-manager.js +129 -0
  86. package/dist/impl/extensions/store-extensions.d.ts +23 -0
  87. package/dist/impl/extensions/store-extensions.d.ts.map +1 -0
  88. package/dist/impl/extensions/store-extensions.js +66 -0
  89. package/dist/impl/fs/commands/fs-commands.d.ts +100 -0
  90. package/dist/impl/fs/commands/fs-commands.d.ts.map +1 -0
  91. package/dist/impl/fs/commands/fs-commands.js +338 -0
  92. package/dist/impl/fs/commands/structure-commands.d.ts +76 -0
  93. package/dist/impl/fs/commands/structure-commands.d.ts.map +1 -0
  94. package/dist/impl/fs/commands/structure-commands.js +21 -0
  95. package/dist/impl/fs/core/fs-adapter.d.ts +54 -0
  96. package/dist/impl/fs/core/fs-adapter.d.ts.map +1 -0
  97. package/dist/impl/fs/core/fs-adapter.js +204 -0
  98. package/dist/impl/fs/core/fs-facade.d.ts +37 -0
  99. package/dist/impl/fs/core/fs-facade.d.ts.map +1 -0
  100. package/dist/impl/fs/core/fs-facade.js +98 -0
  101. package/dist/impl/fs/index.d.ts +8 -0
  102. package/dist/impl/fs/index.d.ts.map +1 -0
  103. package/dist/impl/fs/index.js +11 -0
  104. package/dist/impl/fs/utils/data-updater.d.ts +36 -0
  105. package/dist/impl/fs/utils/data-updater.d.ts.map +1 -0
  106. package/dist/impl/fs/utils/data-updater.js +248 -0
  107. package/dist/impl/fs/utils/deep-equal.d.ts +5 -0
  108. package/dist/impl/fs/utils/deep-equal.d.ts.map +1 -0
  109. package/dist/impl/fs/utils/deep-equal.js +28 -0
  110. package/dist/impl/index.d.ts +12 -0
  111. package/dist/impl/index.d.ts.map +1 -0
  112. package/dist/impl/index.js +12 -0
  113. package/dist/impl/middleware/event-bridge-middleware.d.ts +7 -0
  114. package/dist/impl/middleware/event-bridge-middleware.d.ts.map +1 -0
  115. package/dist/impl/middleware/event-bridge-middleware.js +19 -0
  116. package/dist/impl/middleware/index.d.ts +6 -0
  117. package/dist/impl/middleware/index.d.ts.map +1 -0
  118. package/dist/impl/middleware/index.js +5 -0
  119. package/dist/impl/middleware/logger-middleware.d.ts +7 -0
  120. package/dist/impl/middleware/logger-middleware.d.ts.map +1 -0
  121. package/dist/impl/middleware/logger-middleware.js +18 -0
  122. package/dist/impl/plugin/index.d.ts +5 -0
  123. package/dist/impl/plugin/index.d.ts.map +1 -0
  124. package/dist/impl/plugin/index.js +4 -0
  125. package/dist/impl/plugin/store-plugin-factory.d.ts +15 -0
  126. package/dist/impl/plugin/store-plugin-factory.d.ts.map +1 -0
  127. package/dist/impl/plugin/store-plugin-factory.js +121 -0
  128. package/dist/index.d.ts +16 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +15 -0
  131. package/dist/spi/autosave/i-autosave-provider.d.ts +98 -0
  132. package/dist/spi/autosave/i-autosave-provider.d.ts.map +1 -0
  133. package/dist/spi/autosave/i-autosave-provider.js +8 -0
  134. package/dist/spi/autosave/i-autosave-registry.d.ts +59 -0
  135. package/dist/spi/autosave/i-autosave-registry.d.ts.map +1 -0
  136. package/dist/spi/autosave/i-autosave-registry.js +8 -0
  137. package/dist/spi/autosave/index.d.ts +8 -0
  138. package/dist/spi/autosave/index.d.ts.map +1 -0
  139. package/dist/spi/autosave/index.js +7 -0
  140. package/dist/spi/index.d.ts +9 -0
  141. package/dist/spi/index.d.ts.map +1 -0
  142. package/dist/spi/index.js +9 -0
  143. package/dist/spi/middleware/index.d.ts +2 -0
  144. package/dist/spi/middleware/index.d.ts.map +1 -0
  145. package/dist/spi/middleware/index.js +1 -0
  146. package/dist/spi/middleware/middleware-provider.d.ts +9 -0
  147. package/dist/spi/middleware/middleware-provider.d.ts.map +1 -0
  148. package/dist/spi/middleware/middleware-provider.js +1 -0
  149. package/dist/spi/persistence/index.d.ts +2 -0
  150. package/dist/spi/persistence/index.d.ts.map +1 -0
  151. package/dist/spi/persistence/index.js +1 -0
  152. package/dist/spi/persistence/persistence-provider.d.ts +8 -0
  153. package/dist/spi/persistence/persistence-provider.d.ts.map +1 -0
  154. package/dist/spi/persistence/persistence-provider.js +1 -0
  155. package/package.json +68 -0
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Middleware Registry Implementation
3
+ */
4
+ import type { Middleware } from 'redux';
5
+ import type { IMiddlewareRegistry, MiddlewareRegistration } from '../../api';
6
+ export declare class MiddlewareRegistry implements IMiddlewareRegistry {
7
+ private registrations;
8
+ private locked;
9
+ register(registration: MiddlewareRegistration): void;
10
+ unregister(id: string): void;
11
+ getAll(): Middleware[];
12
+ has(id: string): boolean;
13
+ getInfo(id: string): MiddlewareRegistration | undefined;
14
+ getAllRegistrations(): MiddlewareRegistration[];
15
+ /**
16
+ * Lock the registry (called when store is created)
17
+ * @internal
18
+ */
19
+ lock(): void;
20
+ }
21
+ //# sourceMappingURL=middleware-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-registry.d.ts","sourceRoot":"","sources":["../../../src/impl/core/middleware-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAE7E,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,aAAa,CAA6C;IAClE,OAAO,CAAC,MAAM,CAAS;IAEvB,QAAQ,CAAC,YAAY,EAAE,sBAAsB,GAAG,IAAI;IAkBpD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAO5B,MAAM,IAAI,UAAU,EAAE;IAOtB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAIvD,mBAAmB,IAAI,sBAAsB,EAAE;IAK/C;;;OAGG;IACH,IAAI,IAAI,IAAI;CAGb"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Middleware Registry Implementation
3
+ */
4
+ export class MiddlewareRegistry {
5
+ constructor() {
6
+ Object.defineProperty(this, "registrations", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: new Map()
11
+ });
12
+ Object.defineProperty(this, "locked", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: false
17
+ });
18
+ }
19
+ register(registration) {
20
+ if (this.locked) {
21
+ throw new Error(`Cannot register middleware "${registration.id}" - store already created. ` +
22
+ `Register middleware during plugin initialization phase.`);
23
+ }
24
+ if (this.registrations.has(registration.id)) {
25
+ console.warn(`[MiddlewareRegistry] Middleware "${registration.id}" already registered, overwriting.`);
26
+ }
27
+ this.registrations.set(registration.id, {
28
+ priority: 0,
29
+ ...registration,
30
+ });
31
+ }
32
+ unregister(id) {
33
+ if (this.locked) {
34
+ throw new Error(`Cannot unregister middleware after store creation`);
35
+ }
36
+ this.registrations.delete(id);
37
+ }
38
+ getAll() {
39
+ const sorted = Array.from(this.registrations.values())
40
+ .sort((a, b) => (b.priority || 0) - (a.priority || 0));
41
+ return sorted.map(reg => reg.middleware);
42
+ }
43
+ has(id) {
44
+ return this.registrations.has(id);
45
+ }
46
+ getInfo(id) {
47
+ return this.registrations.get(id);
48
+ }
49
+ getAllRegistrations() {
50
+ return Array.from(this.registrations.values())
51
+ .sort((a, b) => (b.priority || 0) - (a.priority || 0));
52
+ }
53
+ /**
54
+ * Lock the registry (called when store is created)
55
+ * @internal
56
+ */
57
+ lock() {
58
+ this.locked = true;
59
+ }
60
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Reducer Registry Implementation
3
+ */
4
+ import { type Reducer } from 'redux';
5
+ import type { IReducerRegistry, ReducerMap, ReducerRegistration } from '../../api';
6
+ export declare class ReducerRegistry implements IReducerRegistry {
7
+ private reducers;
8
+ private onReducerChange?;
9
+ constructor(onReducerChange?: (rootReducer: Reducer) => void);
10
+ register(key: string, reducer: Reducer, replace?: boolean): void;
11
+ unregister(key: string): void;
12
+ getAll(): ReducerMap;
13
+ getCombinedReducer(): Reducer;
14
+ has(key: string): boolean;
15
+ getInfo(key: string): ReducerRegistration | undefined;
16
+ getAllRegistrations(): ReducerRegistration[];
17
+ }
18
+ //# sourceMappingURL=reducer-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducer-registry.d.ts","sourceRoot":"","sources":["../../../src/impl/core/reducer-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEnF,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,eAAe,CAAC,CAAiC;gBAE7C,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI;IAI5D,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,UAAQ,GAAG,IAAI;IAkB9D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ7B,MAAM,IAAI,UAAU;IAQpB,kBAAkB,IAAI,OAAO;IAU7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIrD,mBAAmB,IAAI,mBAAmB,EAAE;CAG7C"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Reducer Registry Implementation
3
+ */
4
+ import { combineReducers } from 'redux';
5
+ export class ReducerRegistry {
6
+ constructor(onReducerChange) {
7
+ Object.defineProperty(this, "reducers", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: new Map()
12
+ });
13
+ Object.defineProperty(this, "onReducerChange", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ this.onReducerChange = onReducerChange;
20
+ }
21
+ register(key, reducer, replace = false) {
22
+ if (!replace && this.reducers.has(key)) {
23
+ console.warn(`[ReducerRegistry] Reducer "${key}" already registered. Use replace=true to override.`);
24
+ return;
25
+ }
26
+ this.reducers.set(key, {
27
+ key,
28
+ reducer,
29
+ registeredAt: new Date(),
30
+ });
31
+ // Notify about reducer change for hot replacement
32
+ if (this.onReducerChange) {
33
+ this.onReducerChange(this.getCombinedReducer());
34
+ }
35
+ }
36
+ unregister(key) {
37
+ this.reducers.delete(key);
38
+ if (this.onReducerChange) {
39
+ this.onReducerChange(this.getCombinedReducer());
40
+ }
41
+ }
42
+ getAll() {
43
+ const map = {};
44
+ this.reducers.forEach((registration, key) => {
45
+ map[key] = registration.reducer;
46
+ });
47
+ return map;
48
+ }
49
+ getCombinedReducer() {
50
+ const reducerMap = this.getAll();
51
+ if (Object.keys(reducerMap).length === 0) {
52
+ return (state = {}) => state;
53
+ }
54
+ return combineReducers(reducerMap);
55
+ }
56
+ has(key) {
57
+ return this.reducers.has(key);
58
+ }
59
+ getInfo(key) {
60
+ return this.reducers.get(key);
61
+ }
62
+ getAllRegistrations() {
63
+ return Array.from(this.reducers.values());
64
+ }
65
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Store Manager Implementation
3
+ */
4
+ import { type Store, type Reducer } from '@reduxjs/toolkit';
5
+ import type { IStoreManager, StoreConfig, RootState, AppAction } from '../../api';
6
+ import { MiddlewareRegistry } from './middleware-registry';
7
+ import { ReducerRegistry } from './reducer-registry';
8
+ export declare class StoreManager implements IStoreManager {
9
+ private store;
10
+ private middlewareRegistry;
11
+ private reducerRegistry;
12
+ private initialized;
13
+ private fileSystemAdapter;
14
+ constructor();
15
+ getMiddlewareRegistry(): MiddlewareRegistry;
16
+ getReducerRegistry(): ReducerRegistry;
17
+ setFileSystemAdapter(adapter: any): void;
18
+ getFileSystemAdapter(): any;
19
+ isInitialized(): boolean;
20
+ initialize(config?: StoreConfig): Store<RootState, AppAction>;
21
+ getStore(): Store<RootState, AppAction>;
22
+ dispatch<A extends AppAction>(action: A): A;
23
+ getState<S = RootState>(): S;
24
+ subscribe(listener: () => void): () => void;
25
+ replaceReducer(nextReducer: Reducer<RootState, AppAction>): void;
26
+ destroy(): void;
27
+ }
28
+ //# sourceMappingURL=store-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-manager.d.ts","sourceRoot":"","sources":["../../../src/impl/core/store-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAkB,KAAK,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAoB;;IAY7C,qBAAqB;IAIrB,kBAAkB;IAIlB,oBAAoB,CAAC,OAAO,EAAE,GAAG;IAIjC,oBAAoB;IAIpB,aAAa,IAAI,OAAO;IAIxB,UAAU,CAAC,MAAM,GAAE,WAAgB,GAAG,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;IAsDjE,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;IAOvC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC;IAI3C,QAAQ,CAAC,CAAC,GAAG,SAAS,KAAK,CAAC;IAI5B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAI3C,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI;IAIhE,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Store Manager Implementation
3
+ */
4
+ import { configureStore } from '@reduxjs/toolkit';
5
+ import { MiddlewareRegistry } from './middleware-registry';
6
+ import { ReducerRegistry } from './reducer-registry';
7
+ export class StoreManager {
8
+ constructor() {
9
+ Object.defineProperty(this, "store", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: null
14
+ });
15
+ Object.defineProperty(this, "middlewareRegistry", {
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true,
19
+ value: void 0
20
+ });
21
+ Object.defineProperty(this, "reducerRegistry", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: void 0
26
+ });
27
+ Object.defineProperty(this, "initialized", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: false
32
+ });
33
+ Object.defineProperty(this, "fileSystemAdapter", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: null
38
+ });
39
+ this.middlewareRegistry = new MiddlewareRegistry();
40
+ this.reducerRegistry = new ReducerRegistry((rootReducer) => {
41
+ // Hot replacement callback
42
+ if (this.store) {
43
+ this.store.replaceReducer(rootReducer);
44
+ }
45
+ });
46
+ }
47
+ getMiddlewareRegistry() {
48
+ return this.middlewareRegistry;
49
+ }
50
+ getReducerRegistry() {
51
+ return this.reducerRegistry;
52
+ }
53
+ setFileSystemAdapter(adapter) {
54
+ this.fileSystemAdapter = adapter;
55
+ }
56
+ getFileSystemAdapter() {
57
+ return this.fileSystemAdapter;
58
+ }
59
+ isInitialized() {
60
+ return this.initialized;
61
+ }
62
+ initialize(config = {}) {
63
+ if (this.initialized) {
64
+ throw new Error('[StoreManager] Store already initialized');
65
+ }
66
+ // Get all middleware in priority order
67
+ const middleware = this.middlewareRegistry.getAll();
68
+ // Lock the middleware registry
69
+ this.middlewareRegistry.lock();
70
+ // Get combined reducer
71
+ const rootReducer = this.reducerRegistry.getCombinedReducer();
72
+ // Create enhancers
73
+ const enhancers = config.enhancers || [];
74
+ // Create store using configureStore (modern Redux Toolkit API)
75
+ this.store = configureStore({
76
+ reducer: rootReducer,
77
+ preloadedState: config.preloadedState,
78
+ // Use only our custom middleware (disabling Redux Toolkit defaults to maintain exact behavior)
79
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware({
80
+ // Disable all default middleware to maintain exact parity with old createStore behavior
81
+ thunk: false,
82
+ serializableCheck: false,
83
+ immutableCheck: false,
84
+ actionCreatorCheck: false,
85
+ }).concat(...middleware),
86
+ // Add custom enhancers if provided
87
+ enhancers: (getDefaultEnhancers) => getDefaultEnhancers().concat(enhancers),
88
+ // Configure DevTools with trace support
89
+ devTools: config.devTools !== false ? {
90
+ trace: true,
91
+ traceLimit: 25,
92
+ } : false,
93
+ });
94
+ this.initialized = true;
95
+ console.log('[StoreManager] Store initialized with:', {
96
+ reducers: this.reducerRegistry.getAllRegistrations().map(r => r.key),
97
+ middleware: this.middlewareRegistry.getAllRegistrations().map(m => ({
98
+ id: m.id,
99
+ priority: m.priority,
100
+ plugin: m.plugin,
101
+ })),
102
+ devTools: config.devTools !== false,
103
+ });
104
+ return this.store;
105
+ }
106
+ getStore() {
107
+ if (!this.store) {
108
+ throw new Error('[StoreManager] Store not initialized. Call initialize() first.');
109
+ }
110
+ return this.store;
111
+ }
112
+ dispatch(action) {
113
+ return this.getStore().dispatch(action);
114
+ }
115
+ getState() {
116
+ return this.getStore().getState();
117
+ }
118
+ subscribe(listener) {
119
+ return this.getStore().subscribe(listener);
120
+ }
121
+ replaceReducer(nextReducer) {
122
+ this.getStore().replaceReducer(nextReducer);
123
+ }
124
+ destroy() {
125
+ this.store = null;
126
+ this.initialized = false;
127
+ console.log('[StoreManager] Store destroyed');
128
+ }
129
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Store extensions collector
3
+ */
4
+ import type { IMiddlewareRegistry, IReducerRegistry, StoreExtensionsRegistry, StorePluginExtensions } from '../../api';
5
+ interface StoreExtensionsEntry {
6
+ source: string;
7
+ extensions: StorePluginExtensions;
8
+ }
9
+ /**
10
+ * Collects middleware and reducer contributions until the store boots
11
+ */
12
+ export declare class StoreExtensionsCollector implements StoreExtensionsRegistry {
13
+ private entries;
14
+ register(source: string, extensions: StorePluginExtensions): void;
15
+ /**
16
+ * Drain collected extensions (used internally by the plugin)
17
+ */
18
+ drain(): StoreExtensionsEntry[];
19
+ }
20
+ export declare function applyStoreExtensions(collector: StoreExtensionsCollector, middlewareRegistry: IMiddlewareRegistry, reducerRegistry: IReducerRegistry): void;
21
+ export declare function createStoreExtensionsCollector(): StoreExtensionsCollector;
22
+ export {};
23
+ //# sourceMappingURL=store-extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-extensions.d.ts","sourceRoot":"","sources":["../../../src/impl/extensions/store-extensions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EAEtB,MAAM,WAAW,CAAC;AAEnB,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,uBAAuB;IACtE,OAAO,CAAC,OAAO,CAA8B;IAE7C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,qBAAqB,GAAG,IAAI;IAiBjE;;OAEG;IACH,KAAK,IAAI,oBAAoB,EAAE;CAKhC;AAgBD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,wBAAwB,EACnC,kBAAkB,EAAE,mBAAmB,EACvC,eAAe,EAAE,gBAAgB,GAChC,IAAI,CAiBN;AAED,wBAAgB,8BAA8B,IAAI,wBAAwB,CAEzE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Store extensions collector
3
+ */
4
+ /**
5
+ * Collects middleware and reducer contributions until the store boots
6
+ */
7
+ export class StoreExtensionsCollector {
8
+ constructor() {
9
+ Object.defineProperty(this, "entries", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: []
14
+ });
15
+ }
16
+ register(source, extensions) {
17
+ const hasMiddleware = Boolean(extensions.middleware?.length);
18
+ const hasReducers = Boolean(extensions.reducers && Object.keys(extensions.reducers).length);
19
+ if (!hasMiddleware && !hasReducers) {
20
+ return;
21
+ }
22
+ this.entries.push({
23
+ source,
24
+ extensions: {
25
+ middleware: extensions.middleware,
26
+ reducers: extensions.reducers,
27
+ },
28
+ });
29
+ }
30
+ /**
31
+ * Drain collected extensions (used internally by the plugin)
32
+ */
33
+ drain() {
34
+ const snapshot = this.entries;
35
+ this.entries = [];
36
+ return snapshot;
37
+ }
38
+ }
39
+ function withSourceMetadata(middleware, source) {
40
+ if (!middleware) {
41
+ return undefined;
42
+ }
43
+ return {
44
+ plugin: middleware.plugin ?? source,
45
+ ...middleware,
46
+ };
47
+ }
48
+ export function applyStoreExtensions(collector, middlewareRegistry, reducerRegistry) {
49
+ const entries = collector.drain();
50
+ entries.forEach(({ source, extensions }) => {
51
+ extensions.middleware?.forEach((mw) => {
52
+ const middleware = withSourceMetadata(mw, source);
53
+ if (middleware) {
54
+ middlewareRegistry.register(middleware);
55
+ }
56
+ });
57
+ if (extensions.reducers) {
58
+ Object.entries(extensions.reducers).forEach(([key, reducer]) => {
59
+ reducerRegistry.register(key, reducer);
60
+ });
61
+ }
62
+ });
63
+ }
64
+ export function createStoreExtensionsCollector() {
65
+ return new StoreExtensionsCollector();
66
+ }
@@ -0,0 +1,100 @@
1
+ import { FileNode, FileSystemNode, FileSystemState, FileContentSchema } from '../../../api';
2
+ import { StructureNodeCommand } from './structure-commands';
3
+ import { DataUpdater } from '../utils/data-updater';
4
+ /**
5
+ * Base interface for filesystem commands
6
+ */
7
+ export interface FsCommandBase {
8
+ name: 'mkdir' | 'set-file' | 'remove' | 'update-file-content' | 'set-file-content' | 'set-extension-state';
9
+ path: string | string[];
10
+ }
11
+ /**
12
+ * Create directory command
13
+ */
14
+ export interface MkdirCommand extends FsCommandBase {
15
+ name: 'mkdir';
16
+ parents?: boolean;
17
+ extensionStates?: Record<string, unknown>;
18
+ }
19
+ /**
20
+ * Remove file or directory command
21
+ */
22
+ export interface RemoveCommand extends FsCommandBase {
23
+ name: 'remove';
24
+ recursive?: boolean;
25
+ }
26
+ /**
27
+ * Set file command (create or update)
28
+ */
29
+ export interface SetFileCommand extends FsCommandBase {
30
+ name: 'set-file';
31
+ content: any;
32
+ schema: FileContentSchema;
33
+ override?: boolean;
34
+ contentIsPresent?: boolean;
35
+ extensionStates?: Record<string, unknown>;
36
+ }
37
+ /**
38
+ * Update file content with structure command
39
+ */
40
+ export interface UpdateFileContentCommand extends FsCommandBase {
41
+ name: 'update-file-content';
42
+ contentCommand: StructureNodeCommand;
43
+ }
44
+ /**
45
+ * Set file content directly
46
+ */
47
+ export interface SetFileContentCommand extends FsCommandBase {
48
+ name: 'set-file-content';
49
+ content: any;
50
+ fromRemote?: boolean;
51
+ }
52
+ /**
53
+ * Set extension state on a node
54
+ */
55
+ export interface SetExtensionStateCommand extends FsCommandBase {
56
+ name: 'set-extension-state';
57
+ key: string;
58
+ state: Record<string, unknown>;
59
+ }
60
+ /**
61
+ * Union type for all filesystem commands
62
+ */
63
+ export type FileSystemCommand = MkdirCommand | RemoveCommand | SetFileCommand | UpdateFileContentCommand | SetFileContentCommand | SetExtensionStateCommand;
64
+ export { pathSteps, parentPathSteps } from '@hamak/shared-utils';
65
+ /**
66
+ * Get filesystem node at path
67
+ */
68
+ export declare function getFileSystemNode(fsNode: FileSystemNode, path: string | string[]): FileSystemNode | undefined;
69
+ /**
70
+ * FileSystem command handler - executes filesystem operations
71
+ */
72
+ export declare class FileSystemCommandHandler {
73
+ readonly contentCommandHandler: FileContentCommandHandler;
74
+ execute(state: FileSystemState, command: FileSystemCommand): FileSystemState;
75
+ private executeMkdir;
76
+ private executeRemove;
77
+ private executeSetFile;
78
+ private executeContentCommand;
79
+ private contentMayChange;
80
+ private executeSetContentCommand;
81
+ private executeSetExtensionState;
82
+ protected current<T = any>(o: T): T;
83
+ protected original<T = any>(o: T): T | undefined;
84
+ }
85
+ /**
86
+ * File content command handler - handles structure commands on file content
87
+ */
88
+ export declare class FileContentCommandHandler {
89
+ readonly updater: DataUpdater;
90
+ execute(file: FileNode, command: StructureNodeCommand): void;
91
+ private executeDelete;
92
+ private executeSet;
93
+ private executeAdd;
94
+ private executeInsert;
95
+ /**
96
+ * Executes a batch of commands, rebasing each on previous mutations.
97
+ */
98
+ executeBatch(file: FileNode, command: any): void;
99
+ }
100
+ //# sourceMappingURL=fs-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-commands.d.ts","sourceRoot":"","sources":["../../../../src/impl/fs/commands/fs-commands.ts"],"names":[],"mappings":"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"}