@metamask-previews/composable-controller
Advanced tools
Comparing version 6.0.1-preview-4a029d8 to 6.0.1-preview-4a95e5f
@@ -10,2 +10,14 @@ # Changelog | ||
### Added | ||
- Adds and exports new types: ([#3952](https://github.com/MetaMask/core/pull/3952)) | ||
- `RestrictedControllerMessengerConstraint`, which is the narrowest supertype of all controller-messenger instances. | ||
- `LegacyControllerStateConstraint`, a universal supertype for the controller state object, encompassing both BaseControllerV1 and BaseControllerV2 state. | ||
- `ComposableControllerStateConstraint`, the narrowest supertype for the composable controller state object. | ||
### Changed | ||
- **BREAKING:** The `ComposableController` class is now a generic class that expects one generic argument `ComposableControllerState` ([#3952](https://github.com/MetaMask/core/pull/3952)). | ||
- **BREAKING:** For the `ComposableController` class to be typed correctly, any of its child controllers that extend `BaseControllerV1` must have an overridden `name` property that is defined using the `as const` assertion. | ||
## [6.0.1] | ||
@@ -12,0 +24,0 @@ |
@@ -7,3 +7,3 @@ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); | ||
var _chunkK4UHO4GXjs = require('./chunk-K4UHO4GX.js'); | ||
var _chunkK74IFAE6js = require('./chunk-K74IFAE6.js'); | ||
@@ -15,3 +15,3 @@ | ||
exports.ComposableController = _chunkK4UHO4GXjs.ComposableController; exports.controllerName = _chunkK4UHO4GXjs.controllerName; exports.default = _chunkK4UHO4GXjs.ComposableController_default; exports.isBaseController = _chunkK4UHO4GXjs.isBaseController; exports.isBaseControllerV1 = _chunkK4UHO4GXjs.isBaseControllerV1; | ||
exports.ComposableController = _chunkK74IFAE6js.ComposableController; exports.controllerName = _chunkK74IFAE6js.controllerName; exports.default = _chunkK74IFAE6js.ComposableController_default; exports.isBaseController = _chunkK74IFAE6js.isBaseController; exports.isBaseControllerV1 = _chunkK74IFAE6js.isBaseControllerV1; | ||
//# sourceMappingURL=ComposableController.js.map |
@@ -5,3 +5,3 @@ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); | ||
var _chunkK4UHO4GXjs = require('./chunk-K4UHO4GX.js'); | ||
var _chunkK74IFAE6js = require('./chunk-K74IFAE6.js'); | ||
@@ -11,3 +11,3 @@ | ||
exports.ComposableController = _chunkK4UHO4GXjs.ComposableController; exports.isBaseController = _chunkK4UHO4GXjs.isBaseController; exports.isBaseControllerV1 = _chunkK4UHO4GXjs.isBaseControllerV1; | ||
exports.ComposableController = _chunkK74IFAE6js.ComposableController; exports.isBaseController = _chunkK74IFAE6js.isBaseController; exports.isBaseControllerV1 = _chunkK74IFAE6js.isBaseControllerV1; | ||
//# sourceMappingURL=index.js.map |
import { BaseController, BaseControllerV1 } from '@metamask/base-controller'; | ||
import type { ActionConstraint, BaseConfig, BaseState, EventConstraint, RestrictedControllerMessenger, StateConstraint } from '@metamask/base-controller'; | ||
import type { ActionConstraint, BaseConfig, BaseState, EventConstraint, RestrictedControllerMessenger, StateConstraint, ControllerStateChangeEvent } from '@metamask/base-controller'; | ||
import type { Patch } from 'immer'; | ||
@@ -9,3 +9,3 @@ export declare const controllerName = "ComposableController"; | ||
* | ||
* Note that this type is not the greatest subtype or narrowest supertype of all `BaseControllerV1` instances. | ||
* Note that this type is not the widest subtype or narrowest supertype of all `BaseControllerV1` instances. | ||
* This type is therefore unsuitable for general use as a type constraint, and is only intended for use within the ComposableController. | ||
@@ -18,3 +18,3 @@ */ | ||
* | ||
* Note that this type is not the greatest subtype or narrowest supertype of all `BaseController` instances. | ||
* Note that this type is not the widest subtype or narrowest supertype of all `BaseController` instances. | ||
* This type is therefore unsuitable for general use as a type constraint, and is only intended for use within the ComposableController. | ||
@@ -32,3 +32,3 @@ * | ||
* | ||
* Note that this type is not the greatest subtype or narrowest supertype of all `BaseController` and `BaseControllerV1` instances. | ||
* Note that this type is not the widest subtype or narrowest supertype of all `BaseController` and `BaseControllerV1` instances. | ||
* This type is therefore unsuitable for general use as a type constraint, and is only intended for use within the ComposableController. | ||
@@ -38,2 +38,6 @@ */ | ||
/** | ||
* The narrowest supertype of all `RestrictedControllerMessenger` instances. | ||
*/ | ||
export type RestrictedControllerMessengerConstraint = RestrictedControllerMessenger<string, ActionConstraint, EventConstraint, string, string>; | ||
/** | ||
* Determines if the given controller is an instance of `BaseControllerV1` | ||
@@ -49,21 +53,44 @@ * @param controller - Controller instance to check | ||
*/ | ||
export declare function isBaseController(controller: ControllerInstance): controller is BaseController<string, StateConstraint, RestrictedControllerMessenger<string, ActionConstraint, EventConstraint, string, string>>; | ||
export type ComposableControllerState = { | ||
export declare function isBaseController(controller: ControllerInstance): controller is BaseController<string, StateConstraint, RestrictedControllerMessengerConstraint>; | ||
/** | ||
* A universal supertype for the controller state object, encompassing both `BaseControllerV1` and `BaseControllerV2` state. | ||
*/ | ||
export type LegacyControllerStateConstraint = BaseState | StateConstraint; | ||
/** | ||
* A universal supertype for the composable controller state object. | ||
* | ||
* This type is only intended to be used for disabling the generic constraint on the `ControllerState` type argument in the `BaseController` type as a temporary solution for ensuring compatibility with BaseControllerV1 child controllers. | ||
* Note that it is unsuitable for general use as a type constraint. | ||
*/ | ||
type LegacyComposableControllerStateConstraint = { | ||
[name: string]: Record<string, any>; | ||
}; | ||
export type ComposableControllerStateChangeEvent = { | ||
type: `${typeof controllerName}:stateChange`; | ||
payload: [ComposableControllerState, Patch[]]; | ||
/** | ||
* The narrowest supertype for the composable controller state object. | ||
* This is also a widest subtype of the 'LegacyComposableControllerStateConstraint' type. | ||
*/ | ||
export type ComposableControllerStateConstraint = { | ||
[name: string]: LegacyControllerStateConstraint; | ||
}; | ||
export type ComposableControllerEvents = ComposableControllerStateChangeEvent; | ||
type AnyControllerStateChangeEvent = { | ||
type: `${string}:stateChange`; | ||
payload: [ControllerInstance['state'], Patch[]]; | ||
/** | ||
* A controller state change event for any controller instance that extends from either `BaseControllerV1` or `BaseControllerV2`. | ||
*/ | ||
type LegacyControllerStateChangeEvent<ControllerName extends string, ControllerState extends LegacyControllerStateConstraint> = { | ||
type: `${ControllerName}:stateChange`; | ||
payload: [ControllerState, Patch[]]; | ||
}; | ||
type AllowedEvents = AnyControllerStateChangeEvent; | ||
export type ComposableControllerMessenger = RestrictedControllerMessenger<typeof controllerName, never, ComposableControllerEvents | AllowedEvents, never, AllowedEvents['type']>; | ||
export type ComposableControllerStateChangeEvent<ComposableControllerState extends ComposableControllerStateConstraint> = LegacyControllerStateChangeEvent<typeof controllerName, ComposableControllerState>; | ||
export type ComposableControllerEvents<ComposableControllerState extends ComposableControllerStateConstraint> = ComposableControllerStateChangeEvent<ComposableControllerState>; | ||
type ChildControllerStateChangeEvents<ComposableControllerState extends ComposableControllerStateConstraint> = ComposableControllerState extends Record<infer ControllerName extends string, infer ControllerState> ? ControllerState extends StateConstraint ? ControllerStateChangeEvent<ControllerName, ControllerState> : ControllerState extends Record<string, unknown> ? LegacyControllerStateChangeEvent<ControllerName, ControllerState> : never : never; | ||
type AllowedEvents<ComposableControllerState extends ComposableControllerStateConstraint> = ChildControllerStateChangeEvents<ComposableControllerState>; | ||
export type ComposableControllerMessenger<ComposableControllerState extends ComposableControllerStateConstraint> = RestrictedControllerMessenger<typeof controllerName, never, ComposableControllerEvents<ComposableControllerState> | AllowedEvents<ComposableControllerState>, never, AllowedEvents<ComposableControllerState>['type']>; | ||
type GetChildControllers<ComposableControllerState, ControllerName extends keyof ComposableControllerState = keyof ComposableControllerState> = ControllerName extends string ? ComposableControllerState[ControllerName] extends StateConstraint ? { | ||
name: ControllerName; | ||
state: ComposableControllerState[ControllerName]; | ||
} : BaseControllerV1<BaseConfig & Record<string, unknown>, BaseState & ComposableControllerState[ControllerName]> : never; | ||
/** | ||
* Controller that can be used to compose multiple controllers together. | ||
* @template ChildControllerState - The composed state of the child controllers that are being used to instantiate the composable controller. | ||
*/ | ||
export declare class ComposableController extends BaseController<typeof controllerName, ComposableControllerState, ComposableControllerMessenger> { | ||
export declare class ComposableController<ComposableControllerState extends LegacyComposableControllerStateConstraint, ChildControllers extends ControllerInstance = GetChildControllers<ComposableControllerState>> extends BaseController<typeof controllerName, ComposableControllerState, ComposableControllerMessenger<ComposableControllerState>> { | ||
#private; | ||
@@ -78,4 +105,4 @@ /** | ||
constructor({ controllers, messenger, }: { | ||
controllers: ControllerInstance[]; | ||
messenger: ComposableControllerMessenger; | ||
controllers: ChildControllers[]; | ||
messenger: ComposableControllerMessenger<ComposableControllerState>; | ||
}); | ||
@@ -82,0 +109,0 @@ } |
@@ -1,3 +0,3 @@ | ||
export type { ComposableControllerState, ComposableControllerStateChangeEvent, ComposableControllerEvents, ComposableControllerMessenger, } from './ComposableController'; | ||
export type { ComposableControllerStateConstraint, ComposableControllerStateChangeEvent, ComposableControllerEvents, ComposableControllerMessenger, LegacyControllerStateConstraint, RestrictedControllerMessengerConstraint, } from './ComposableController'; | ||
export { ComposableController, isBaseController, isBaseControllerV1, } from './ComposableController'; | ||
//# sourceMappingURL=index.d.ts.map |
{ | ||
"name": "@metamask-previews/composable-controller", | ||
"version": "6.0.1-preview-4a029d8", | ||
"version": "6.0.1-preview-4a95e5f", | ||
"description": "Consolidates the state from multiple controllers into one", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
101174
332
1