@angular-architects/ngrx-toolkit 18.1.0 → 19.0.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/README.md +4 -12
- package/fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs +15 -15
- package/fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs.map +1 -1
- package/fesm2022/angular-architects-ngrx-toolkit.mjs +487 -78
- package/fesm2022/angular-architects-ngrx-toolkit.mjs.map +1 -1
- package/index.d.ts +9 -2
- package/lib/devtools/features/with-disabled-name-indicies.d.ts +27 -0
- package/lib/devtools/features/with-glitch-tracking.d.ts +30 -0
- package/lib/devtools/features/with-mapper.d.ts +28 -0
- package/lib/devtools/internal/current-action-names.d.ts +1 -0
- package/lib/devtools/internal/default-tracker.d.ts +13 -0
- package/lib/devtools/internal/devtools-feature.d.ts +24 -0
- package/lib/devtools/internal/devtools-syncer.service.d.ts +35 -0
- package/lib/devtools/internal/glitch-tracker.service.d.ts +18 -0
- package/lib/devtools/internal/models.d.ts +25 -0
- package/lib/devtools/rename-devtools-name.d.ts +7 -0
- package/lib/devtools/update-state.d.ts +17 -0
- package/lib/devtools/with-dev-tools-stub.d.ts +5 -0
- package/lib/devtools/with-devtools.d.ts +30 -0
- package/lib/shared/prettify.d.ts +1 -1
- package/lib/shared/throw-if-null.d.ts +1 -0
- package/lib/with-call-state.d.ts +2 -2
- package/lib/with-data-service.d.ts +3 -3
- package/lib/with-pagination.d.ts +4 -4
- package/lib/with-reset.d.ts +29 -0
- package/lib/with-storage-sync.d.ts +2 -2
- package/lib/with-undo-redo.d.ts +4 -3
- package/package.json +6 -7
- package/redux-connector/src/lib/create-redux.d.ts +4 -4
- package/redux-connector/src/lib/model.d.ts +5 -0
- package/redux-connector/src/lib/rxjs-interop/redux-method.d.ts +5 -2
- package/redux-connector/src/lib/signal-redux-store.d.ts +10 -2
- package/redux-connector/src/lib/util.d.ts +2 -2
- package/esm2022/angular-architects-ngrx-toolkit.mjs +0 -5
- package/esm2022/index.mjs +0 -8
- package/esm2022/lib/assertions/assertions.mjs +0 -6
- package/esm2022/lib/shared/prettify.mjs +0 -2
- package/esm2022/lib/shared/signal-store-models.mjs +0 -2
- package/esm2022/lib/with-call-state.mjs +0 -60
- package/esm2022/lib/with-data-service.mjs +0 -202
- package/esm2022/lib/with-devtools.mjs +0 -92
- package/esm2022/lib/with-pagination.mjs +0 -209
- package/esm2022/lib/with-redux.mjs +0 -100
- package/esm2022/lib/with-storage-sync.mjs +0 -56
- package/esm2022/lib/with-undo-redo.mjs +0 -113
- package/esm2022/redux-connector/angular-architects-ngrx-toolkit-redux-connector.mjs +0 -5
- package/esm2022/redux-connector/index.mjs +0 -3
- package/esm2022/redux-connector/src/lib/create-redux.mjs +0 -41
- package/esm2022/redux-connector/src/lib/model.mjs +0 -2
- package/esm2022/redux-connector/src/lib/rxjs-interop/redux-method.mjs +0 -22
- package/esm2022/redux-connector/src/lib/signal-redux-store.mjs +0 -43
- package/esm2022/redux-connector/src/lib/util.mjs +0 -13
- package/lib/with-devtools.d.ts +0 -38
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
2
|
+
import { StateSource } from '@ngrx/signals';
|
|
3
|
+
import { DevtoolsInnerOptions } from './devtools-feature';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* A service provided by the root injector is
|
|
7
|
+
* required because the synchronization runs
|
|
8
|
+
* globally.
|
|
9
|
+
*
|
|
10
|
+
* The SignalStore could be provided in a component.
|
|
11
|
+
* If the effect starts in the injection
|
|
12
|
+
* context of the SignalStore, the complete sync
|
|
13
|
+
* process would shut down once the component gets
|
|
14
|
+
* destroyed.
|
|
15
|
+
*/
|
|
16
|
+
export declare class DevtoolsSyncer implements OnDestroy {
|
|
17
|
+
#private;
|
|
18
|
+
constructor();
|
|
19
|
+
ngOnDestroy(): void;
|
|
20
|
+
syncToDevTools(changedStatePerId: Record<string, object>): void;
|
|
21
|
+
getNextId(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Consumer provides the id. That is because we can only start
|
|
24
|
+
* tracking the store in the init hook.
|
|
25
|
+
* Unfortunately, methods for renaming having the final id
|
|
26
|
+
* need to be defined already before.
|
|
27
|
+
* That's why `withDevtools` requests first the id and
|
|
28
|
+
* then registers itself later.
|
|
29
|
+
*/
|
|
30
|
+
addStore(id: string, name: string, store: StateSource<object>, options: DevtoolsInnerOptions): void;
|
|
31
|
+
removeStore(id: string): void;
|
|
32
|
+
renameStore(oldName: string, newName: string): void;
|
|
33
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DevtoolsSyncer, never>;
|
|
34
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DevtoolsSyncer>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Tracker, TrackerStores } from './models';
|
|
2
|
+
import { StateSource } from '@ngrx/signals';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Internal Service used by {@link withGlitchTracking}. It does not rely
|
|
6
|
+
* on `effect` as {@link DefaultTracker} does but uses the NgRx function
|
|
7
|
+
* `watchState` to track all state changes.
|
|
8
|
+
*/
|
|
9
|
+
export declare class GlitchTrackerService implements Tracker {
|
|
10
|
+
#private;
|
|
11
|
+
get stores(): TrackerStores;
|
|
12
|
+
onChange(callback: (changedState: Record<string, object>) => void): void;
|
|
13
|
+
removeStore(id: string): void;
|
|
14
|
+
track(id: string, store: StateSource<object>): void;
|
|
15
|
+
notifyRenamedStore(id: string): void;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GlitchTrackerService, never>;
|
|
17
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<GlitchTrackerService>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { StateSource } from '@ngrx/signals';
|
|
2
|
+
import { DevtoolsInnerOptions } from './devtools-feature';
|
|
3
|
+
export type Action = {
|
|
4
|
+
type: string;
|
|
5
|
+
};
|
|
6
|
+
export type Connection = {
|
|
7
|
+
send: (action: Action, state: Record<string, unknown>) => void;
|
|
8
|
+
};
|
|
9
|
+
export type ReduxDevtoolsExtension = {
|
|
10
|
+
connect: (options: {
|
|
11
|
+
name: string;
|
|
12
|
+
}) => Connection;
|
|
13
|
+
};
|
|
14
|
+
export type StoreRegistry = Record<string, {
|
|
15
|
+
options: DevtoolsInnerOptions;
|
|
16
|
+
name: string;
|
|
17
|
+
}>;
|
|
18
|
+
export type Tracker = {
|
|
19
|
+
track(id: string, store: StateSource<object>): void;
|
|
20
|
+
onChange(callback: (changedState: Record<string, object>) => void): void;
|
|
21
|
+
notifyRenamedStore(id: string): void;
|
|
22
|
+
removeStore(id: string): void;
|
|
23
|
+
get stores(): TrackerStores;
|
|
24
|
+
};
|
|
25
|
+
export type TrackerStores = Record<string, StateSource<object>>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StateSource } from '@ngrx/signals';
|
|
2
|
+
/**
|
|
3
|
+
* Renames the name of a store how it appears in the Devtools.
|
|
4
|
+
* @param store instance of the SignalStore
|
|
5
|
+
* @param newName new name for the Devtools
|
|
6
|
+
*/
|
|
7
|
+
export declare function renameDevtoolsName<State extends object>(store: StateSource<State>, newName: string): void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { patchState as originalPatchState } from '@ngrx/signals';
|
|
2
|
+
import { PartialStateUpdater, WritableStateSource } from '@ngrx/signals';
|
|
3
|
+
import { Prettify } from '../shared/prettify';
|
|
4
|
+
type PatchFn = typeof originalPatchState extends (arg1: infer First, ...args: infer Rest) => infer Returner ? (state: First, action: string, ...rest: Rest) => Returner : never;
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Has been renamed to `updateState`
|
|
7
|
+
*/
|
|
8
|
+
export declare const patchState: PatchFn;
|
|
9
|
+
/**
|
|
10
|
+
* Wrapper of `patchState` for DevTools integration. Next to updating the state,
|
|
11
|
+
* it also sends the action to the DevTools.
|
|
12
|
+
* @param stateSource state of Signal Store
|
|
13
|
+
* @param action name of action how it will show in DevTools
|
|
14
|
+
* @param updaters updater functions or objects
|
|
15
|
+
*/
|
|
16
|
+
export declare function updateState<State extends object>(stateSource: WritableStateSource<State>, action: string, ...updaters: Array<Partial<Prettify<State>> | PartialStateUpdater<Prettify<State>>>): void;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DevtoolsFeature } from './internal/devtools-feature';
|
|
2
|
+
import { ReduxDevtoolsExtension } from './internal/models';
|
|
3
|
+
declare global {
|
|
4
|
+
interface Window {
|
|
5
|
+
__REDUX_DEVTOOLS_EXTENSION__: ReduxDevtoolsExtension | undefined;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export declare const existingNames: Map<string, unknown>;
|
|
9
|
+
export declare const renameDevtoolsMethodName = "___renameDevtoolsName";
|
|
10
|
+
export declare const uniqueDevtoolsId = "___uniqueDevtoolsId";
|
|
11
|
+
/**
|
|
12
|
+
* Adds this store as a feature state to the Redux DevTools.
|
|
13
|
+
*
|
|
14
|
+
* By default, the action name is 'Store Update'. You can
|
|
15
|
+
* change that via the {@link updateState} method, which has as second
|
|
16
|
+
* parameter the action name.
|
|
17
|
+
*
|
|
18
|
+
* The standalone function {@link renameDevtoolsName} can rename
|
|
19
|
+
* the store name.
|
|
20
|
+
*
|
|
21
|
+
* @param name name of the store as it should appear in the DevTools
|
|
22
|
+
* @param features features to extend or modify the behavior of the Devtools
|
|
23
|
+
*/
|
|
24
|
+
export declare function withDevtools(name: string, ...features: DevtoolsFeature[]): import("@ngrx/signals").SignalStoreFeature<import("@ngrx/signals").EmptyFeatureResult, {
|
|
25
|
+
state: {};
|
|
26
|
+
props: {};
|
|
27
|
+
methods: {
|
|
28
|
+
[x: string]: (newName?: unknown) => unknown;
|
|
29
|
+
};
|
|
30
|
+
}>;
|
package/lib/shared/prettify.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function throwIfNull<T>(obj: T): NonNullable<T>;
|
package/lib/with-call-state.d.ts
CHANGED
|
@@ -30,11 +30,11 @@ export declare function withCallState<Collection extends string>(config: {
|
|
|
30
30
|
collection: Collection;
|
|
31
31
|
}): SignalStoreFeature<EmptyFeatureResult, EmptyFeatureResult & {
|
|
32
32
|
state: NamedCallStateSlice<Collection>;
|
|
33
|
-
|
|
33
|
+
props: NamedCallStateSignals<Collection>;
|
|
34
34
|
}>;
|
|
35
35
|
export declare function withCallState(): SignalStoreFeature<EmptyFeatureResult, EmptyFeatureResult & {
|
|
36
36
|
state: CallStateSlice;
|
|
37
|
-
|
|
37
|
+
props: CallStateSignals;
|
|
38
38
|
}>;
|
|
39
39
|
export declare function setLoading<Prop extends string | undefined = undefined>(prop?: Prop): SetCallState<Prop>;
|
|
40
40
|
export declare function setLoaded<Prop extends string | undefined = undefined>(prop?: Prop): SetCallState<Prop>;
|
|
@@ -89,10 +89,10 @@ export declare function withDataService<E extends Entity, F extends Filter, Coll
|
|
|
89
89
|
filter: F;
|
|
90
90
|
collection: Collection;
|
|
91
91
|
}): SignalStoreFeature<EmptyFeatureResult & {
|
|
92
|
-
|
|
92
|
+
props: NamedEntityComputed<E, Collection>;
|
|
93
93
|
}, {
|
|
94
94
|
state: NamedDataServiceState<E, F, Collection>;
|
|
95
|
-
|
|
95
|
+
props: NamedDataServiceComputed<E, Collection>;
|
|
96
96
|
methods: NamedDataServiceMethods<E, F, Collection>;
|
|
97
97
|
}>;
|
|
98
98
|
export declare function withDataService<E extends Entity, F extends Filter>(options: {
|
|
@@ -104,6 +104,6 @@ export declare function withDataService<E extends Entity, F extends Filter>(opti
|
|
|
104
104
|
} & EntityState<E>;
|
|
105
105
|
}, {
|
|
106
106
|
state: DataServiceState<E, F>;
|
|
107
|
-
|
|
107
|
+
props: DataServiceComputed<E>;
|
|
108
108
|
methods: DataServiceMethods<E, F>;
|
|
109
109
|
}>;
|
package/lib/with-pagination.d.ts
CHANGED
|
@@ -92,18 +92,18 @@ export declare function withPagination<E, Collection extends string>(options: {
|
|
|
92
92
|
entity: E;
|
|
93
93
|
collection: Collection;
|
|
94
94
|
}): SignalStoreFeature<EmptyFeatureResult & {
|
|
95
|
-
|
|
95
|
+
props: NamedEntityComputed<E, Collection>;
|
|
96
96
|
}, {
|
|
97
97
|
state: NamedPaginationServiceState<E, Collection>;
|
|
98
|
-
|
|
98
|
+
props: NamedPaginationServiceSignals<E, Collection>;
|
|
99
99
|
methods: NamedPaginationServiceMethods<Collection>;
|
|
100
100
|
}>;
|
|
101
101
|
export declare function withPagination<E>(): SignalStoreFeature<EmptyFeatureResult & {
|
|
102
102
|
state: EntityState<E>;
|
|
103
|
-
|
|
103
|
+
props: EntityComputed<E>;
|
|
104
104
|
}, {
|
|
105
105
|
state: PaginationServiceState<E>;
|
|
106
|
-
|
|
106
|
+
props: PaginationServiceSignals<E>;
|
|
107
107
|
methods: PaginationServiceMethods;
|
|
108
108
|
}>;
|
|
109
109
|
export declare function gotoPage<E, Collection extends string>(page: number, options?: {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { StateSource } from '@ngrx/signals';
|
|
2
|
+
export type PublicMethods = {
|
|
3
|
+
resetState(): void;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Adds a `resetState` method to the store, which resets the state
|
|
7
|
+
* to the initial state.
|
|
8
|
+
*
|
|
9
|
+
* If you want to set a custom initial state, you can use {@link setResetState}.
|
|
10
|
+
*/
|
|
11
|
+
export declare function withReset(): import("@ngrx/signals").SignalStoreFeature<import("@ngrx/signals").EmptyFeatureResult, {
|
|
12
|
+
state: {};
|
|
13
|
+
props: {
|
|
14
|
+
_resetState: {
|
|
15
|
+
value: {};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
methods: {
|
|
19
|
+
resetState: () => void;
|
|
20
|
+
};
|
|
21
|
+
}>;
|
|
22
|
+
/**
|
|
23
|
+
* Sets the reset state of the store to the given state.
|
|
24
|
+
*
|
|
25
|
+
* Throws an error if the store is not configured with {@link withReset}.
|
|
26
|
+
* @param store the instance of a SignalStore
|
|
27
|
+
* @param state the state to set as the reset state
|
|
28
|
+
*/
|
|
29
|
+
export declare function setResetState<State extends object>(store: StateSource<State>, state: State): void;
|
|
@@ -47,6 +47,6 @@ export type SyncConfig<State> = {
|
|
|
47
47
|
*
|
|
48
48
|
* Only works on browser platform.
|
|
49
49
|
*/
|
|
50
|
-
export declare function withStorageSync<
|
|
51
|
-
export declare function withStorageSync<
|
|
50
|
+
export declare function withStorageSync<Input extends SignalStoreFeatureResult>(key: string): SignalStoreFeature<Input, WithStorageSyncFeatureResult>;
|
|
51
|
+
export declare function withStorageSync<Input extends SignalStoreFeatureResult>(config: SyncConfig<Input['state']>): SignalStoreFeature<Input, WithStorageSyncFeatureResult>;
|
|
52
52
|
export {};
|
package/lib/with-undo-redo.d.ts
CHANGED
|
@@ -11,20 +11,21 @@ export declare function getUndoRedoKeys(collections?: string[]): string[];
|
|
|
11
11
|
type NonNever<T> = T extends never ? never : T;
|
|
12
12
|
type ExtractEntityCollection<T> = T extends `${infer U}Entities` ? U : never;
|
|
13
13
|
type ExtractEntityCollections<Store extends SignalStoreFeatureResult> = NonNever<{
|
|
14
|
-
[K in keyof Store['
|
|
15
|
-
}[keyof Store['
|
|
14
|
+
[K in keyof Store['props']]: ExtractEntityCollection<K>;
|
|
15
|
+
}[keyof Store['props']]>;
|
|
16
16
|
type OptionsForState<Store extends SignalStoreFeatureResult> = Partial<Omit<NormalizedUndoRedoOptions, 'collections' | 'keys'>> & {
|
|
17
17
|
collections?: ExtractEntityCollections<Store>[];
|
|
18
18
|
keys?: (keyof Store['state'])[];
|
|
19
19
|
};
|
|
20
20
|
export declare function withUndoRedo<Input extends EmptyFeatureResult>(options?: OptionsForState<Input>): SignalStoreFeature<Input, EmptyFeatureResult & {
|
|
21
|
-
|
|
21
|
+
props: {
|
|
22
22
|
canUndo: Signal<boolean>;
|
|
23
23
|
canRedo: Signal<boolean>;
|
|
24
24
|
};
|
|
25
25
|
methods: {
|
|
26
26
|
undo: () => void;
|
|
27
27
|
redo: () => void;
|
|
28
|
+
clearStack: () => void;
|
|
28
29
|
};
|
|
29
30
|
}>;
|
|
30
31
|
export {};
|
package/package.json
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-architects/ngrx-toolkit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "19.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "GitHub",
|
|
7
7
|
"url": "https://github.com/angular-architects/ngrx-toolkit"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@
|
|
11
|
-
"@
|
|
10
|
+
"@angular/core": "^19.0.0",
|
|
11
|
+
"@angular/common": "^19.0.0",
|
|
12
|
+
"@ngrx/signals": "^19.0.0",
|
|
13
|
+
"@ngrx/store": "^19.0.0",
|
|
14
|
+
"rxjs": "^7.0.0"
|
|
12
15
|
},
|
|
13
16
|
"peerDependenciesMeta": {
|
|
14
17
|
"@ngrx/store": {
|
|
@@ -27,14 +30,10 @@
|
|
|
27
30
|
},
|
|
28
31
|
".": {
|
|
29
32
|
"types": "./index.d.ts",
|
|
30
|
-
"esm2022": "./esm2022/angular-architects-ngrx-toolkit.mjs",
|
|
31
|
-
"esm": "./esm2022/angular-architects-ngrx-toolkit.mjs",
|
|
32
33
|
"default": "./fesm2022/angular-architects-ngrx-toolkit.mjs"
|
|
33
34
|
},
|
|
34
35
|
"./redux-connector": {
|
|
35
36
|
"types": "./redux-connector/index.d.ts",
|
|
36
|
-
"esm2022": "./esm2022/redux-connector/angular-architects-ngrx-toolkit-redux-connector.mjs",
|
|
37
|
-
"esm": "./esm2022/redux-connector/angular-architects-ngrx-toolkit-redux-connector.mjs",
|
|
38
37
|
"default": "./fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs"
|
|
39
38
|
}
|
|
40
39
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ActionCreator, ActionType } from
|
|
2
|
-
import { CreateReduxState, MapperTypes, Store } from
|
|
1
|
+
import { ActionCreator, ActionType } from '@ngrx/store/src/models';
|
|
2
|
+
import { CreateReduxState, MapperTypes, Store } from './model';
|
|
3
3
|
export declare function mapAction<Creators extends readonly ActionCreator[]>(...args: [
|
|
4
4
|
...creators: Creators,
|
|
5
5
|
storeMethod: (action: ActionType<Creators[number]>) => unknown
|
|
@@ -9,5 +9,5 @@ export declare function mapAction<Creators extends readonly ActionCreator[], T>(
|
|
|
9
9
|
storeMethod: (action: ActionType<Creators[number]>, resultMethod: (input: T) => unknown) => unknown,
|
|
10
10
|
resultMethod: (input: T) => unknown
|
|
11
11
|
]): MapperTypes<Creators>;
|
|
12
|
-
export declare function withActionMappers(...mappers: MapperTypes<ActionCreator
|
|
13
|
-
export declare function createReduxState<StoreName extends string, STORE extends Store>(storeName: StoreName, signalStore: STORE, withActionMappers: (store: InstanceType<STORE>) => MapperTypes<ActionCreator
|
|
12
|
+
export declare function withActionMappers(...mappers: MapperTypes<ActionCreator[]>[]): MapperTypes<ActionCreator[]>[];
|
|
13
|
+
export declare function createReduxState<StoreName extends string, STORE extends Store>(storeName: StoreName, signalStore: STORE, withActionMappers: (store: InstanceType<STORE>) => MapperTypes<ActionCreator[]>[]): CreateReduxState<StoreName, STORE>;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Injector, Signal } from "@angular/core";
|
|
2
|
-
import { Observable
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
3
|
type RxMethodInput<Input> = Input | Observable<Input> | Signal<Input>;
|
|
4
|
-
type
|
|
4
|
+
type RxMethodRef = {
|
|
5
|
+
destroy: () => void;
|
|
6
|
+
};
|
|
7
|
+
type RxMethod<Input, MethodInput = Input, MethodResult = unknown> = ((input: RxMethodInput<Input>, resultMethod: (input: MethodInput) => MethodResult) => RxMethodRef) & RxMethodRef;
|
|
5
8
|
export declare function reduxMethod<Input, MethodInput = Input>(generator: (source$: Observable<Input>) => Observable<MethodInput>, config?: {
|
|
6
9
|
injector?: Injector;
|
|
7
10
|
}): RxMethod<Input, MethodInput>;
|
|
@@ -5,11 +5,19 @@ export declare class SignalReduxStore {
|
|
|
5
5
|
private mapperDict;
|
|
6
6
|
dispatch: ((input: Action<string> | import("rxjs").Observable<Action<string>> | import("@angular/core").Signal<Action<string>>, config?: {
|
|
7
7
|
injector?: import("@angular/core").Injector;
|
|
8
|
-
}) =>
|
|
8
|
+
}) => {
|
|
9
|
+
destroy: () => void;
|
|
10
|
+
}) & {
|
|
11
|
+
destroy: () => void;
|
|
12
|
+
};
|
|
9
13
|
connectFeatureStore(mappers: MapperTypes<ActionCreator<any, any>[]>[]): void;
|
|
10
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<SignalReduxStore, never>;
|
|
11
15
|
static ɵprov: i0.ɵɵInjectableDeclaration<SignalReduxStore>;
|
|
12
16
|
}
|
|
13
17
|
export declare function injectReduxDispatch(): ((input: Action<string> | import("rxjs").Observable<Action<string>> | import("@angular/core").Signal<Action<string>>, config?: {
|
|
14
18
|
injector?: import("@angular/core").Injector;
|
|
15
|
-
}) =>
|
|
19
|
+
}) => {
|
|
20
|
+
destroy: () => void;
|
|
21
|
+
}) & {
|
|
22
|
+
destroy: () => void;
|
|
23
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ActionCreator } from '@ngrx/store';
|
|
2
2
|
import { Unsubscribable } from 'rxjs';
|
|
3
3
|
export declare function isUnsubscribable<F extends (...args: unknown[]) => unknown>(fn: F | (F & Unsubscribable)): fn is F & Unsubscribable;
|
|
4
4
|
export declare function capitalize(str: string): string;
|
|
5
|
-
export declare function isActionCreator(action:
|
|
5
|
+
export declare function isActionCreator(action: unknown): action is ActionCreator;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hcmNoaXRlY3RzLW5ncngtdG9vbGtpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9hbmd1bGFyLWFyY2hpdGVjdHMtbmdyeC10b29sa2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
package/esm2022/index.mjs
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { withDevtools, patchState, updateState, } from './lib/with-devtools';
|
|
2
|
-
export * from './lib/with-redux';
|
|
3
|
-
export * from './lib/with-call-state';
|
|
4
|
-
export * from './lib/with-undo-redo';
|
|
5
|
-
export * from './lib/with-data-service';
|
|
6
|
-
export { withStorageSync } from './lib/with-storage-sync';
|
|
7
|
-
export * from './lib/with-pagination';
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxHQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0seUJBQXlCLENBQUM7QUFDdEUsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIHdpdGhEZXZ0b29scyxcbiAgcGF0Y2hTdGF0ZSxcbiAgdXBkYXRlU3RhdGUsXG4gIEFjdGlvbixcbn0gZnJvbSAnLi9saWIvd2l0aC1kZXZ0b29scyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93aXRoLXJlZHV4JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvd2l0aC1jYWxsLXN0YXRlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtdW5kby1yZWRvJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtZGF0YS1zZXJ2aWNlJztcbmV4cG9ydCB7IHdpdGhTdG9yYWdlU3luYywgU3luY0NvbmZpZyB9IGZyb20gJy4vbGliL3dpdGgtc3RvcmFnZS1zeW5jJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtcGFnaW5hdGlvbic7XG4iXX0=
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export function assertActionFnSpecs(obj) {
|
|
2
|
-
if (!obj || typeof obj !== 'object') {
|
|
3
|
-
throw new Error('%o is not an Action Specification');
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvYXNzZXJ0aW9ucy9hc3NlcnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBWTtJQUVaLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uc0ZuU3BlY3MgfSBmcm9tICcuLi93aXRoLXJlZHV4JztcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFjdGlvbkZuU3BlY3MoXG4gIG9iajogdW5rbm93blxuKTogYXNzZXJ0cyBvYmogaXMgQWN0aW9uc0ZuU3BlY3Mge1xuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignJW8gaXMgbm90IGFuIEFjdGlvbiBTcGVjaWZpY2F0aW9uJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldHRpZnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9wcmV0dGlmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUHJldHRpZnk8VHlwZSBleHRlbmRzIHt9PiA9IHtcbiAgW0tleSBpbiBrZXlvZiBUeXBlXTogVHlwZVtLZXldO1xufTtcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLXN0b3JlLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NpZ25hbC1zdG9yZS1tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvcGllcyBvZiB0eXBlcyBvZiB0aGUgU2lnbmFsIFN0b3JlIHdoaWNoIGFyZSBub3QgcHVibGljLlxuICpcbiAqIFNpbmNlIGNlcnRhaW4gZmVhdHVyZXMgZGVwZW5kIG9uIHRoZW0sIGlmIHdlIGRvbid0IHdhbnQgdG8gYnJlYWtcbiAqIHRoZSBlbmNhcHN1bGF0aW9uIG9mIEBuZ3J4L3NpZ25hbHMsIHdlIGRlY2lkZWQgdG8gY29weSB0aGVtLlxuICpcbiAqIFNpbmNlIFR5cGVTY3JpcHQgaXMgYmFzZWQgb24gc3RydWN0dXJhbCB0eXBpbmcsIHdlIGNhbiBnZXQgYXdheSB3aXRoIGl0LlxuICpcbiAqIElmIEBuZ3J4L3NpZ25hbHMgY2hhbmdlcyBpdHMgaW50ZXJuYWwgdHlwZXMsIHdlIGNhdGNoIHRoZW0gdmlhIGludGVncmF0aW9uXG4gKiB0ZXN0cy5cbiAqXG4gKiBCZWNhdXNlIG9mIHRoZSBcInRpZ2h0IGNvdXBsaW5nXCIsIHRoZSB0b29sa2l0IGRvZXNuJ3QgaGF2ZSB2ZXJzaW9uIHJhbmdlXG4gKiB0byBAbmdyeC9zaWduYWwsIGJ1dCBpcyB2ZXJ5IHByZWNpc2UuXG4gKi9cbmltcG9ydCB7IFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRW50aXR5SWQgfSBmcm9tICdAbmdyeC9zaWduYWxzL2VudGl0aWVzJztcblxuLy8gd2l0aEVudGl0ZXMgbW9kZWxzXG5leHBvcnQgdHlwZSBFbnRpdHlTdGF0ZTxFbnRpdHk+ID0ge1xuICBlbnRpdHlNYXA6IFJlY29yZDxFbnRpdHlJZCwgRW50aXR5PjtcbiAgaWRzOiBFbnRpdHlJZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgRW50aXR5Q29tcHV0ZWQ8RW50aXR5PiA9IHtcbiAgZW50aXRpZXM6IFNpZ25hbDxFbnRpdHlbXT47XG59O1xuXG5leHBvcnQgdHlwZSBOYW1lZEVudGl0eUNvbXB1dGVkPEVudGl0eSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtLIGluIGtleW9mIEVudGl0eUNvbXB1dGVkPEVudGl0eT4gYXMgYCR7Q29sbGVjdGlvbn0ke0NhcGl0YWxpemU8Sz59YF06IEVudGl0eUNvbXB1dGVkPEVudGl0eT5bS107XG59O1xuIl19
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { computed } from '@angular/core';
|
|
2
|
-
import { signalStoreFeature, withComputed, withState, } from '@ngrx/signals';
|
|
3
|
-
export function getCallStateKeys(config) {
|
|
4
|
-
const prop = config?.collection;
|
|
5
|
-
return {
|
|
6
|
-
callStateKey: prop ? `${config.collection}CallState` : 'callState',
|
|
7
|
-
loadingKey: prop ? `${config.collection}Loading` : 'loading',
|
|
8
|
-
loadedKey: prop ? `${config.collection}Loaded` : 'loaded',
|
|
9
|
-
errorKey: prop ? `${config.collection}Error` : 'error',
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
export function withCallState(config) {
|
|
13
|
-
const { callStateKey, errorKey, loadedKey, loadingKey } = getCallStateKeys(config);
|
|
14
|
-
return signalStoreFeature(withState({ [callStateKey]: 'init' }), withComputed((state) => {
|
|
15
|
-
const callState = state[callStateKey];
|
|
16
|
-
return {
|
|
17
|
-
[loadingKey]: computed(() => callState() === 'loading'),
|
|
18
|
-
[loadedKey]: computed(() => callState() === 'loaded'),
|
|
19
|
-
[errorKey]: computed(() => {
|
|
20
|
-
const v = callState();
|
|
21
|
-
return typeof v === 'object' ? v.error : null;
|
|
22
|
-
}),
|
|
23
|
-
};
|
|
24
|
-
}));
|
|
25
|
-
}
|
|
26
|
-
export function setLoading(prop) {
|
|
27
|
-
if (prop) {
|
|
28
|
-
return { [`${prop}CallState`]: 'loading' };
|
|
29
|
-
}
|
|
30
|
-
return { callState: 'loading' };
|
|
31
|
-
}
|
|
32
|
-
export function setLoaded(prop) {
|
|
33
|
-
if (prop) {
|
|
34
|
-
return { [`${prop}CallState`]: 'loaded' };
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
return { callState: 'loaded' };
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export function setError(error, prop) {
|
|
41
|
-
let errorMessage;
|
|
42
|
-
if (!error) {
|
|
43
|
-
errorMessage = '';
|
|
44
|
-
}
|
|
45
|
-
else if (typeof error === 'object' && 'message' in error) {
|
|
46
|
-
errorMessage = String(error.message);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
errorMessage = String(error);
|
|
50
|
-
}
|
|
51
|
-
if (prop) {
|
|
52
|
-
return {
|
|
53
|
-
[`${prop}CallState`]: { error: errorMessage },
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
return { callState: { error: errorMessage } };
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jYWxsLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi93aXRoLWNhbGwtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUEwQnZCLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFnQztJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDO0lBQ2hDLE9BQU87UUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUNsRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUN6RCxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTztLQUN2RCxDQUFDO0FBQ0osQ0FBQztBQWtCRCxNQUFNLFVBQVUsYUFBYSxDQUE0QixNQUV4RDtJQUNDLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FDckQsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsT0FBTyxrQkFBa0IsQ0FDdkIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUNyQyxZQUFZLENBQUMsQ0FBQyxLQUFzQyxFQUFFLEVBQUU7UUFDdEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBc0IsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssU0FBUyxDQUFDO1lBQ3ZELENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLFFBQVEsQ0FBQztZQUNyRCxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUN0QixPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hELENBQUMsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQ3hCLElBQVc7SUFFWCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBd0IsQ0FBQztJQUNuRSxDQUFDO0lBRUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQXdCLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQ3ZCLElBQVc7SUFFWCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBd0IsQ0FBQztJQUNsRSxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUF3QixDQUFDO0lBQ3ZELENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsS0FBYyxFQUNkLElBQVc7SUFFWCxJQUFJLFlBQW9CLENBQUM7SUFFekIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzNELFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxDQUFDO1FBQ04sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU87WUFDTCxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7U0FDeEIsQ0FBQztJQUMxQixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQXdCLENBQUM7SUFDdEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgc2lnbmFsU3RvcmVGZWF0dXJlLFxuICB3aXRoQ29tcHV0ZWQsXG4gIHdpdGhTdGF0ZSxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5cbmV4cG9ydCB0eXBlIENhbGxTdGF0ZSA9ICdpbml0JyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgeyBlcnJvcjogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIENhbGxTdGF0ZVNsaWNlID0ge1xuICBjYWxsU3RhdGU6IENhbGxTdGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkQ2FsbFN0YXRlU2xpY2U8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtLIGluIGtleW9mIENhbGxTdGF0ZVNsaWNlIGFzIGAke0NvbGxlY3Rpb259JHtDYXBpdGFsaXplPEs+fWBdOiBDYWxsU3RhdGVTbGljZVtLXTtcbn07XG5cbmV4cG9ydCB0eXBlIENhbGxTdGF0ZVNpZ25hbHMgPSB7XG4gIGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgbG9hZGVkOiBTaWduYWw8Ym9vbGVhbj47XG4gIGVycm9yOiBTaWduYWw8c3RyaW5nIHwgbnVsbD47XG59O1xuXG5leHBvcnQgdHlwZSBOYW1lZENhbGxTdGF0ZVNpZ25hbHM8UHJvcCBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtLIGluIGtleW9mIENhbGxTdGF0ZVNpZ25hbHMgYXMgYCR7UHJvcH0ke0NhcGl0YWxpemU8Sz59YF06IENhbGxTdGF0ZVNpZ25hbHNbS107XG59O1xuXG5leHBvcnQgdHlwZSBTZXRDYWxsU3RhdGU8UHJvcCBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZD4gPSBQcm9wIGV4dGVuZHMgc3RyaW5nXG4gID8gTmFtZWRDYWxsU3RhdGVTbGljZTxQcm9wPlxuICA6IENhbGxTdGF0ZVNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FsbFN0YXRlS2V5cyhjb25maWc/OiB7IGNvbGxlY3Rpb24/OiBzdHJpbmcgfSkge1xuICBjb25zdCBwcm9wID0gY29uZmlnPy5jb2xsZWN0aW9uO1xuICByZXR1cm4ge1xuICAgIGNhbGxTdGF0ZUtleTogcHJvcCA/IGAke2NvbmZpZy5jb2xsZWN0aW9ufUNhbGxTdGF0ZWAgOiAnY2FsbFN0YXRlJyxcbiAgICBsb2FkaW5nS2V5OiBwcm9wID8gYCR7Y29uZmlnLmNvbGxlY3Rpb259TG9hZGluZ2AgOiAnbG9hZGluZycsXG4gICAgbG9hZGVkS2V5OiBwcm9wID8gYCR7Y29uZmlnLmNvbGxlY3Rpb259TG9hZGVkYCA6ICdsb2FkZWQnLFxuICAgIGVycm9yS2V5OiBwcm9wID8gYCR7Y29uZmlnLmNvbGxlY3Rpb259RXJyb3JgIDogJ2Vycm9yJyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDYWxsU3RhdGU8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4oY29uZmlnOiB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHtcbiAgICBzdGF0ZTogTmFtZWRDYWxsU3RhdGVTbGljZTxDb2xsZWN0aW9uPjtcbiAgICBjb21wdXRlZDogTmFtZWRDYWxsU3RhdGVTaWduYWxzPENvbGxlY3Rpb24+O1xuICB9XG4+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDYWxsU3RhdGUoKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHtcbiAgICBzdGF0ZTogQ2FsbFN0YXRlU2xpY2U7XG4gICAgY29tcHV0ZWQ6IENhbGxTdGF0ZVNpZ25hbHM7XG4gIH1cbj47XG5leHBvcnQgZnVuY3Rpb24gd2l0aENhbGxTdGF0ZTxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihjb25maWc/OiB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlIHtcbiAgY29uc3QgeyBjYWxsU3RhdGVLZXksIGVycm9yS2V5LCBsb2FkZWRLZXksIGxvYWRpbmdLZXkgfSA9XG4gICAgZ2V0Q2FsbFN0YXRlS2V5cyhjb25maWcpO1xuXG4gIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXG4gICAgd2l0aFN0YXRlKHsgW2NhbGxTdGF0ZUtleV06ICdpbml0JyB9KSxcbiAgICB3aXRoQ29tcHV0ZWQoKHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+KSA9PiB7XG4gICAgICBjb25zdCBjYWxsU3RhdGUgPSBzdGF0ZVtjYWxsU3RhdGVLZXldIGFzIFNpZ25hbDxDYWxsU3RhdGU+O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbbG9hZGluZ0tleV06IGNvbXB1dGVkKCgpID0+IGNhbGxTdGF0ZSgpID09PSAnbG9hZGluZycpLFxuICAgICAgICBbbG9hZGVkS2V5XTogY29tcHV0ZWQoKCkgPT4gY2FsbFN0YXRlKCkgPT09ICdsb2FkZWQnKSxcbiAgICAgICAgW2Vycm9yS2V5XTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHYgPSBjYWxsU3RhdGUoKTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnID8gdi5lcnJvciA6IG51bGw7XG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9hZGluZzxQcm9wIGV4dGVuZHMgc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcHJvcD86IFByb3Bcbik6IFNldENhbGxTdGF0ZTxQcm9wPiB7XG4gIGlmIChwcm9wKSB7XG4gICAgcmV0dXJuIHsgW2Ake3Byb3B9Q2FsbFN0YXRlYF06ICdsb2FkaW5nJyB9IGFzIFNldENhbGxTdGF0ZTxQcm9wPjtcbiAgfVxuXG4gIHJldHVybiB7IGNhbGxTdGF0ZTogJ2xvYWRpbmcnIH0gYXMgU2V0Q2FsbFN0YXRlPFByb3A+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9hZGVkPFByb3AgZXh0ZW5kcyBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICBwcm9wPzogUHJvcFxuKTogU2V0Q2FsbFN0YXRlPFByb3A+IHtcbiAgaWYgKHByb3ApIHtcbiAgICByZXR1cm4geyBbYCR7cHJvcH1DYWxsU3RhdGVgXTogJ2xvYWRlZCcgfSBhcyBTZXRDYWxsU3RhdGU8UHJvcD47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgY2FsbFN0YXRlOiAnbG9hZGVkJyB9IGFzIFNldENhbGxTdGF0ZTxQcm9wPjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RXJyb3I8UHJvcCBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIGVycm9yOiB1bmtub3duLFxuICBwcm9wPzogUHJvcFxuKTogU2V0Q2FsbFN0YXRlPFByb3A+IHtcbiAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIGlmICghZXJyb3IpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSAnJztcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmICdtZXNzYWdlJyBpbiBlcnJvcikge1xuICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZyhlcnJvci5tZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoZXJyb3IpO1xuICB9XG5cbiAgaWYgKHByb3ApIHtcbiAgICByZXR1cm4ge1xuICAgICAgW2Ake3Byb3B9Q2FsbFN0YXRlYF06IHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9LFxuICAgIH0gYXMgU2V0Q2FsbFN0YXRlPFByb3A+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGNhbGxTdGF0ZTogeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0gfSBhcyBTZXRDYWxsU3RhdGU8UHJvcD47XG4gIH1cbn1cbiJdfQ==
|