diff --git a/apps/browser/src/platform/state/background-derived-state.provider.ts b/apps/browser/src/platform/state/background-derived-state.provider.ts index 8057c3bfcde..95eec711132 100644 --- a/apps/browser/src/platform/state/background-derived-state.provider.ts +++ b/apps/browser/src/platform/state/background-derived-state.provider.ts @@ -3,15 +3,15 @@ import { Observable } from "rxjs"; import { DeriveDefinition, DerivedState } from "@bitwarden/common/platform/state"; // eslint-disable-next-line import/no-restricted-paths -- extending this class for this client import { DefaultDerivedStateProvider } from "@bitwarden/common/platform/state/implementations/default-derived-state.provider"; -import { ShapeToInstances, Type } from "@bitwarden/common/src/types/state"; +import { DerivedStateDependencies } from "@bitwarden/common/src/types/state"; import { BackgroundDerivedState } from "./background-derived-state"; export class BackgroundDerivedStateProvider extends DefaultDerivedStateProvider { - override buildDerivedState>>( + override buildDerivedState( parentState$: Observable, deriveDefinition: DeriveDefinition, - dependencies: ShapeToInstances, + dependencies: TDeps, ): DerivedState { return new BackgroundDerivedState( parentState$, diff --git a/apps/browser/src/platform/state/background-derived-state.ts b/apps/browser/src/platform/state/background-derived-state.ts index 7e08d1543da..420901b0f88 100644 --- a/apps/browser/src/platform/state/background-derived-state.ts +++ b/apps/browser/src/platform/state/background-derived-state.ts @@ -9,14 +9,14 @@ import { Utils } from "@bitwarden/common/platform/misc/utils"; import { DeriveDefinition } from "@bitwarden/common/platform/state"; // eslint-disable-next-line import/no-restricted-paths -- extending this class for this client import { DefaultDerivedState } from "@bitwarden/common/platform/state/implementations/default-derived-state"; -import { ShapeToInstances, Type } from "@bitwarden/common/types/state"; +import { DerivedStateDependencies } from "@bitwarden/common/types/state"; import { BrowserApi } from "../browser/browser-api"; export class BackgroundDerivedState< TFrom, TTo, - TDeps extends Record>, + TDeps extends DerivedStateDependencies, > extends DefaultDerivedState { private portSubscriptions: Map< chrome.runtime.Port, @@ -27,7 +27,7 @@ export class BackgroundDerivedState< parentState$: Observable, deriveDefinition: DeriveDefinition, memoryStorage: AbstractStorageService & ObservableStorageService, - dependencies: ShapeToInstances, + dependencies: TDeps, ) { super(parentState$, deriveDefinition, memoryStorage, dependencies); const portName = deriveDefinition.buildCacheKey(); diff --git a/apps/browser/src/platform/state/derived-state-service-interactions.spec.ts b/apps/browser/src/platform/state/derived-state-service-interactions.spec.ts index 246507c4269..bc4e82315c5 100644 --- a/apps/browser/src/platform/state/derived-state-service-interactions.spec.ts +++ b/apps/browser/src/platform/state/derived-state-service-interactions.spec.ts @@ -10,7 +10,6 @@ import { Subject, firstValueFrom } from "rxjs"; import { DeriveDefinition } from "@bitwarden/common/platform/state"; // eslint-disable-next-line import/no-restricted-paths -- needed to define a derive definition import { StateDefinition } from "@bitwarden/common/platform/state/state-definition"; -import { Type } from "@bitwarden/common/types/state"; import { mockPorts } from "../../../spec/mock-port.spec-util"; @@ -25,7 +24,7 @@ const deriveDefinition = new DeriveDefinition(stateDefinition, "test", { describe("foreground background derived state interactions", () => { let foreground: ForegroundDerivedState; - let background: BackgroundDerivedState>>; + let background: BackgroundDerivedState>; let parentState$: Subject; let memoryStorage: FakeStorageService; const initialParent = "2020-01-01"; diff --git a/apps/browser/src/platform/state/foreground-derived-state.provider.ts b/apps/browser/src/platform/state/foreground-derived-state.provider.ts index bbbf10bdd10..9561d08e0b6 100644 --- a/apps/browser/src/platform/state/foreground-derived-state.provider.ts +++ b/apps/browser/src/platform/state/foreground-derived-state.provider.ts @@ -3,15 +3,15 @@ import { Observable } from "rxjs"; import { DeriveDefinition, DerivedState } from "@bitwarden/common/platform/state"; // eslint-disable-next-line import/no-restricted-paths -- extending this class for this client import { DefaultDerivedStateProvider } from "@bitwarden/common/platform/state/implementations/default-derived-state.provider"; -import { ShapeToInstances, Type } from "@bitwarden/common/src/types/state"; +import { DerivedStateDependencies } from "@bitwarden/common/src/types/state"; import { ForegroundDerivedState } from "./foreground-derived-state"; export class ForegroundDerivedStateProvider extends DefaultDerivedStateProvider { - override buildDerivedState>>( + override buildDerivedState( _parentState$: Observable, deriveDefinition: DeriveDefinition, - _dependencies: ShapeToInstances, + _dependencies: TDeps, ): DerivedState { return new ForegroundDerivedState(deriveDefinition); } diff --git a/apps/browser/src/platform/state/foreground-derived-state.ts b/apps/browser/src/platform/state/foreground-derived-state.ts index 3200507b8cb..f4c4ec2a0a7 100644 --- a/apps/browser/src/platform/state/foreground-derived-state.ts +++ b/apps/browser/src/platform/state/foreground-derived-state.ts @@ -12,7 +12,7 @@ import { import { Utils } from "@bitwarden/common/platform/misc/utils"; import { DeriveDefinition, DerivedState } from "@bitwarden/common/platform/state"; -import { Type } from "@bitwarden/common/types/state"; +import { DerivedStateDependencies } from "@bitwarden/common/types/state"; import { fromChromeEvent } from "../browser/from-chrome-event"; @@ -23,9 +23,7 @@ export class ForegroundDerivedState implements DerivedState { private backgroundResponses$: Observable; state$: Observable; - constructor( - private deriveDefinition: DeriveDefinition>>, - ) { + constructor(private deriveDefinition: DeriveDefinition) { this.state$ = defer(() => this.initializePort()).pipe( filter((message) => message.action === "nextState"), map((message) => this.hydrateNext(message.data)), diff --git a/libs/common/spec/fake-state-provider.ts b/libs/common/spec/fake-state-provider.ts index 36ffe8e186a..4712f9077fc 100644 --- a/libs/common/spec/fake-state-provider.ts +++ b/libs/common/spec/fake-state-provider.ts @@ -14,7 +14,7 @@ import { DerivedStateProvider, } from "../src/platform/state"; import { UserId } from "../src/types/guid"; -import { ShapeToInstances, DerivedStateDependencies } from "../src/types/state"; +import { DerivedStateDependencies } from "../src/types/state"; import { FakeActiveUserState, @@ -92,7 +92,7 @@ export class FakeStateProvider implements StateProvider { getDerived( parentState$: Observable, deriveDefinition: DeriveDefinition, - dependencies: ShapeToInstances, + dependencies: TDeps, ): DerivedState { return this.derived.get(parentState$, deriveDefinition, dependencies); } @@ -108,7 +108,7 @@ export class FakeDerivedStateProvider implements DerivedStateProvider { get( parentState$: Observable, deriveDefinition: DeriveDefinition, - dependencies: ShapeToInstances, + dependencies: TDeps, ): DerivedState { let result = this.states.get(deriveDefinition.buildCacheKey()) as DerivedState; diff --git a/libs/common/src/platform/state/derive-definition.ts b/libs/common/src/platform/state/derive-definition.ts index f698f820f7e..702a4cce9bf 100644 --- a/libs/common/src/platform/state/derive-definition.ts +++ b/libs/common/src/platform/state/derive-definition.ts @@ -1,6 +1,6 @@ import { Jsonify } from "type-fest"; -import { DerivedStateDependencies, ShapeToInstances, StorageKey } from "../../types/state"; +import { DerivedStateDependencies, StorageKey } from "../../types/state"; import { KeyDefinition } from "./key-definition"; import { StateDefinition } from "./state-definition"; @@ -19,7 +19,7 @@ type DeriveDefinitionOptions) => TTo | Promise; + derive: (from: TFrom, deps: TDeps) => TTo | Promise; /** * A function to use to safely convert your type from json to your expected type. * diff --git a/libs/common/src/platform/state/derived-state.provider.ts b/libs/common/src/platform/state/derived-state.provider.ts index 55db8bf7886..cf0a0c56c77 100644 --- a/libs/common/src/platform/state/derived-state.provider.ts +++ b/libs/common/src/platform/state/derived-state.provider.ts @@ -1,6 +1,6 @@ import { Observable } from "rxjs"; -import { ShapeToInstances, DerivedStateDependencies } from "../../types/state"; +import { DerivedStateDependencies } from "../../types/state"; import { DeriveDefinition } from "./derive-definition"; import { DerivedState } from "./derived-state"; @@ -20,6 +20,6 @@ export abstract class DerivedStateProvider { get: ( parentState$: Observable, deriveDefinition: DeriveDefinition, - dependencies: ShapeToInstances, + dependencies: TDeps, ) => DerivedState; } diff --git a/libs/common/src/platform/state/implementations/default-derived-state.provider.ts b/libs/common/src/platform/state/implementations/default-derived-state.provider.ts index 824a81d2cfe..48ccb9d300d 100644 --- a/libs/common/src/platform/state/implementations/default-derived-state.provider.ts +++ b/libs/common/src/platform/state/implementations/default-derived-state.provider.ts @@ -1,6 +1,6 @@ import { Observable } from "rxjs"; -import { DerivedStateDependencies, ShapeToInstances } from "../../../types/state"; +import { DerivedStateDependencies } from "../../../types/state"; import { AbstractStorageService, ObservableStorageService, @@ -19,7 +19,7 @@ export class DefaultDerivedStateProvider implements DerivedStateProvider { get( parentState$: Observable, deriveDefinition: DeriveDefinition, - dependencies: ShapeToInstances, + dependencies: TDeps, ): DerivedState { const cacheKey = deriveDefinition.buildCacheKey(); const existingDerivedState = this.cache[cacheKey]; @@ -37,7 +37,7 @@ export class DefaultDerivedStateProvider implements DerivedStateProvider { protected buildDerivedState( parentState$: Observable, deriveDefinition: DeriveDefinition, - dependencies: ShapeToInstances, + dependencies: TDeps, ): DerivedState { return new DefaultDerivedState( parentState$, diff --git a/libs/common/src/platform/state/implementations/default-derived-state.spec.ts b/libs/common/src/platform/state/implementations/default-derived-state.spec.ts index b4d6ba03e1a..3e8ba41911c 100644 --- a/libs/common/src/platform/state/implementations/default-derived-state.spec.ts +++ b/libs/common/src/platform/state/implementations/default-derived-state.spec.ts @@ -14,7 +14,7 @@ import { DefaultDerivedState } from "./default-derived-state"; let callCount = 0; const cleanupDelayMs = 10; const stateDefinition = new StateDefinition("test", "memory"); -const deriveDefinition = new DeriveDefinition( +const deriveDefinition = new DeriveDefinition( stateDefinition, "test", { @@ -30,7 +30,7 @@ const deriveDefinition = new DeriveDefinition { let parentState$: Subject; let memoryStorage: FakeStorageService; - let sut: DefaultDerivedState; + let sut: DefaultDerivedState; const deps = { date: new Date(), }; diff --git a/libs/common/src/platform/state/implementations/default-derived-state.ts b/libs/common/src/platform/state/implementations/default-derived-state.ts index bc9101fb3da..186faf99877 100644 --- a/libs/common/src/platform/state/implementations/default-derived-state.ts +++ b/libs/common/src/platform/state/implementations/default-derived-state.ts @@ -1,6 +1,6 @@ import { Observable, ReplaySubject, Subject, concatMap, merge, share, timer } from "rxjs"; -import { ShapeToInstances, DerivedStateDependencies } from "../../../types/state"; +import { DerivedStateDependencies } from "../../../types/state"; import { AbstractStorageService, ObservableStorageService, @@ -23,7 +23,7 @@ export class DefaultDerivedState, protected deriveDefinition: DeriveDefinition, private memoryStorage: AbstractStorageService & ObservableStorageService, - private dependencies: ShapeToInstances, + private dependencies: TDeps, ) { this.storageKey = deriveDefinition.storageKey; diff --git a/libs/common/src/platform/state/implementations/default-state.provider.ts b/libs/common/src/platform/state/implementations/default-state.provider.ts index 7962739ecf5..77873a55472 100644 --- a/libs/common/src/platform/state/implementations/default-state.provider.ts +++ b/libs/common/src/platform/state/implementations/default-state.provider.ts @@ -1,6 +1,6 @@ import { Observable } from "rxjs"; -import { ShapeToInstances, DerivedStateDependencies } from "../../../types/state"; +import { DerivedStateDependencies } from "../../../types/state"; import { DeriveDefinition } from "../derive-definition"; import { DerivedState } from "../derived-state"; import { DerivedStateProvider } from "../derived-state.provider"; @@ -26,6 +26,6 @@ export class DefaultStateProvider implements StateProvider { getDerived: ( parentState$: Observable, deriveDefinition: DeriveDefinition, - dependencies: ShapeToInstances, + dependencies: TDeps, ) => DerivedState = this.derivedStateProvider.get.bind(this.derivedStateProvider); } diff --git a/libs/common/src/platform/state/state.provider.ts b/libs/common/src/platform/state/state.provider.ts index b234c9cde26..61595521840 100644 --- a/libs/common/src/platform/state/state.provider.ts +++ b/libs/common/src/platform/state/state.provider.ts @@ -1,7 +1,7 @@ import { Observable } from "rxjs"; import { UserId } from "../../types/guid"; -import { ShapeToInstances, DerivedStateDependencies } from "../../types/state"; +import { DerivedStateDependencies } from "../../types/state"; import { DeriveDefinition } from "./derive-definition"; import { DerivedState } from "./derived-state"; @@ -26,6 +26,6 @@ export abstract class StateProvider { getDerived: ( parentState$: Observable, deriveDefinition: DeriveDefinition, - dependencies: ShapeToInstances, + dependencies: TDeps, ) => DerivedState; } diff --git a/libs/common/src/types/state.d.ts b/libs/common/src/types/state.d.ts index fea0c7fee0c..45b41c27a4c 100644 --- a/libs/common/src/types/state.d.ts +++ b/libs/common/src/types/state.d.ts @@ -2,16 +2,4 @@ import { Opaque } from "type-fest"; type StorageKey = Opaque; -/** - * A helper type defining Constructor types for javascript and `typeof T` types for Typescript - */ -type Type = abstract new (...args: unknown[]) => T; - -type DerivedStateDependencies = Record>; - -/** - * Converts an object of types to an object of instances - */ -type ShapeToInstances = { - [P in keyof T]: T[P] extends Type ? R : never; -}; +type DerivedStateDependencies = Record;