@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.
- package/README.md +143 -0
- package/dist/api/api/index.d.ts +7 -0
- package/dist/api/api/index.d.ts.map +1 -0
- package/dist/api/api/index.js +6 -0
- package/dist/api/api/middleware-registry.d.ts +33 -0
- package/dist/api/api/middleware-registry.d.ts.map +1 -0
- package/dist/api/api/middleware-registry.js +5 -0
- package/dist/api/api/reducer-registry.d.ts +41 -0
- package/dist/api/api/reducer-registry.d.ts.map +1 -0
- package/dist/api/api/reducer-registry.js +5 -0
- package/dist/api/api/store-manager.d.ts +55 -0
- package/dist/api/api/store-manager.d.ts.map +1 -0
- package/dist/api/api/store-manager.js +5 -0
- package/dist/api/autosave/autosave-action-factory.d.ts +69 -0
- package/dist/api/autosave/autosave-action-factory.d.ts.map +1 -0
- package/dist/api/autosave/autosave-action-factory.js +135 -0
- package/dist/api/autosave/autosave-action-types.d.ts +134 -0
- package/dist/api/autosave/autosave-action-types.d.ts.map +1 -0
- package/dist/api/autosave/autosave-action-types.js +44 -0
- package/dist/api/autosave/autosave-types.d.ts +86 -0
- package/dist/api/autosave/autosave-types.d.ts.map +1 -0
- package/dist/api/autosave/autosave-types.js +35 -0
- package/dist/api/autosave/index.d.ts +9 -0
- package/dist/api/autosave/index.d.ts.map +1 -0
- package/dist/api/autosave/index.js +8 -0
- package/dist/api/fs/contracts/filesystem-facade.contract.d.ts +57 -0
- package/dist/api/fs/contracts/filesystem-facade.contract.d.ts.map +1 -0
- package/dist/api/fs/contracts/filesystem-facade.contract.js +1 -0
- package/dist/api/fs/contracts/filesystem-manager.contract.d.ts +42 -0
- package/dist/api/fs/contracts/filesystem-manager.contract.d.ts.map +1 -0
- package/dist/api/fs/contracts/filesystem-manager.contract.js +1 -0
- package/dist/api/fs/index.d.ts +5 -0
- package/dist/api/fs/index.d.ts.map +1 -0
- package/dist/api/fs/index.js +4 -0
- package/dist/api/index.d.ts +10 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +9 -0
- package/dist/api/tokens/index.d.ts +5 -0
- package/dist/api/tokens/index.d.ts.map +1 -0
- package/dist/api/tokens/index.js +4 -0
- package/dist/api/tokens/service-tokens.d.ts +10 -0
- package/dist/api/tokens/service-tokens.d.ts.map +1 -0
- package/dist/api/tokens/service-tokens.js +10 -0
- package/dist/api/types/extension-types.d.ts +32 -0
- package/dist/api/types/extension-types.d.ts.map +1 -0
- package/dist/api/types/extension-types.js +4 -0
- package/dist/api/types/index.d.ts +8 -0
- package/dist/api/types/index.d.ts.map +1 -0
- package/dist/api/types/index.js +7 -0
- package/dist/api/types/middleware-types.d.ts +31 -0
- package/dist/api/types/middleware-types.d.ts.map +1 -0
- package/dist/api/types/middleware-types.js +4 -0
- package/dist/api/types/reducer-types.d.ts +22 -0
- package/dist/api/types/reducer-types.d.ts.map +1 -0
- package/dist/api/types/reducer-types.js +4 -0
- package/dist/api/types/store-types.d.ts +49 -0
- package/dist/api/types/store-types.d.ts.map +1 -0
- package/dist/api/types/store-types.js +4 -0
- package/dist/impl/autosave/autosave-config-resolver.d.ts +45 -0
- package/dist/impl/autosave/autosave-config-resolver.d.ts.map +1 -0
- package/dist/impl/autosave/autosave-config-resolver.js +107 -0
- package/dist/impl/autosave/autosave-middleware.d.ts +37 -0
- package/dist/impl/autosave/autosave-middleware.d.ts.map +1 -0
- package/dist/impl/autosave/autosave-middleware.js +297 -0
- package/dist/impl/autosave/autosave-registry.d.ts +15 -0
- package/dist/impl/autosave/autosave-registry.d.ts.map +1 -0
- package/dist/impl/autosave/autosave-registry.js +38 -0
- package/dist/impl/autosave/autosave-sync-middleware.d.ts +24 -0
- package/dist/impl/autosave/autosave-sync-middleware.d.ts.map +1 -0
- package/dist/impl/autosave/autosave-sync-middleware.js +98 -0
- package/dist/impl/autosave/index.d.ts +8 -0
- package/dist/impl/autosave/index.d.ts.map +1 -0
- package/dist/impl/autosave/index.js +7 -0
- package/dist/impl/core/index.d.ts +4 -0
- package/dist/impl/core/index.d.ts.map +1 -0
- package/dist/impl/core/index.js +3 -0
- package/dist/impl/core/middleware-registry.d.ts +21 -0
- package/dist/impl/core/middleware-registry.d.ts.map +1 -0
- package/dist/impl/core/middleware-registry.js +60 -0
- package/dist/impl/core/reducer-registry.d.ts +18 -0
- package/dist/impl/core/reducer-registry.d.ts.map +1 -0
- package/dist/impl/core/reducer-registry.js +65 -0
- package/dist/impl/core/store-manager.d.ts +28 -0
- package/dist/impl/core/store-manager.d.ts.map +1 -0
- package/dist/impl/core/store-manager.js +129 -0
- package/dist/impl/extensions/store-extensions.d.ts +23 -0
- package/dist/impl/extensions/store-extensions.d.ts.map +1 -0
- package/dist/impl/extensions/store-extensions.js +66 -0
- package/dist/impl/fs/commands/fs-commands.d.ts +100 -0
- package/dist/impl/fs/commands/fs-commands.d.ts.map +1 -0
- package/dist/impl/fs/commands/fs-commands.js +338 -0
- package/dist/impl/fs/commands/structure-commands.d.ts +76 -0
- package/dist/impl/fs/commands/structure-commands.d.ts.map +1 -0
- package/dist/impl/fs/commands/structure-commands.js +21 -0
- package/dist/impl/fs/core/fs-adapter.d.ts +54 -0
- package/dist/impl/fs/core/fs-adapter.d.ts.map +1 -0
- package/dist/impl/fs/core/fs-adapter.js +204 -0
- package/dist/impl/fs/core/fs-facade.d.ts +37 -0
- package/dist/impl/fs/core/fs-facade.d.ts.map +1 -0
- package/dist/impl/fs/core/fs-facade.js +98 -0
- package/dist/impl/fs/index.d.ts +8 -0
- package/dist/impl/fs/index.d.ts.map +1 -0
- package/dist/impl/fs/index.js +11 -0
- package/dist/impl/fs/utils/data-updater.d.ts +36 -0
- package/dist/impl/fs/utils/data-updater.d.ts.map +1 -0
- package/dist/impl/fs/utils/data-updater.js +248 -0
- package/dist/impl/fs/utils/deep-equal.d.ts +5 -0
- package/dist/impl/fs/utils/deep-equal.d.ts.map +1 -0
- package/dist/impl/fs/utils/deep-equal.js +28 -0
- package/dist/impl/index.d.ts +12 -0
- package/dist/impl/index.d.ts.map +1 -0
- package/dist/impl/index.js +12 -0
- package/dist/impl/middleware/event-bridge-middleware.d.ts +7 -0
- package/dist/impl/middleware/event-bridge-middleware.d.ts.map +1 -0
- package/dist/impl/middleware/event-bridge-middleware.js +19 -0
- package/dist/impl/middleware/index.d.ts +6 -0
- package/dist/impl/middleware/index.d.ts.map +1 -0
- package/dist/impl/middleware/index.js +5 -0
- package/dist/impl/middleware/logger-middleware.d.ts +7 -0
- package/dist/impl/middleware/logger-middleware.d.ts.map +1 -0
- package/dist/impl/middleware/logger-middleware.js +18 -0
- package/dist/impl/plugin/index.d.ts +5 -0
- package/dist/impl/plugin/index.d.ts.map +1 -0
- package/dist/impl/plugin/index.js +4 -0
- package/dist/impl/plugin/store-plugin-factory.d.ts +15 -0
- package/dist/impl/plugin/store-plugin-factory.d.ts.map +1 -0
- package/dist/impl/plugin/store-plugin-factory.js +121 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/spi/autosave/i-autosave-provider.d.ts +98 -0
- package/dist/spi/autosave/i-autosave-provider.d.ts.map +1 -0
- package/dist/spi/autosave/i-autosave-provider.js +8 -0
- package/dist/spi/autosave/i-autosave-registry.d.ts +59 -0
- package/dist/spi/autosave/i-autosave-registry.d.ts.map +1 -0
- package/dist/spi/autosave/i-autosave-registry.js +8 -0
- package/dist/spi/autosave/index.d.ts +8 -0
- package/dist/spi/autosave/index.d.ts.map +1 -0
- package/dist/spi/autosave/index.js +7 -0
- package/dist/spi/index.d.ts +9 -0
- package/dist/spi/index.d.ts.map +1 -0
- package/dist/spi/index.js +9 -0
- package/dist/spi/middleware/index.d.ts +2 -0
- package/dist/spi/middleware/index.d.ts.map +1 -0
- package/dist/spi/middleware/index.js +1 -0
- package/dist/spi/middleware/middleware-provider.d.ts +9 -0
- package/dist/spi/middleware/middleware-provider.d.ts.map +1 -0
- package/dist/spi/middleware/middleware-provider.js +1 -0
- package/dist/spi/persistence/index.d.ts +2 -0
- package/dist/spi/persistence/index.d.ts.map +1 -0
- package/dist/spi/persistence/index.js +1 -0
- package/dist/spi/persistence/persistence-provider.d.ts +8 -0
- package/dist/spi/persistence/persistence-provider.d.ts.map +1 -0
- package/dist/spi/persistence/persistence-provider.js +1 -0
- 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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"}
|