@metamask-previews/composable-controller 10.0.0-preview-99939da3 → 11.0.0-preview-1a21f764
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/CHANGELOG.md +8 -2
- package/dist/ComposableController.cjs +3 -10
- package/dist/ComposableController.cjs.map +1 -1
- package/dist/ComposableController.d.cts +6 -26
- package/dist/ComposableController.d.cts.map +1 -1
- package/dist/ComposableController.d.mts +6 -26
- package/dist/ComposableController.d.mts.map +1 -1
- package/dist/ComposableController.mjs +4 -11
- package/dist/ComposableController.mjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
@@ -7,9 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [11.0.0]
|
11
|
+
|
10
12
|
### Changed
|
11
13
|
|
12
|
-
-
|
14
|
+
- **BREAKING:** Re-define `ComposableControllerStateConstraint` type using `StateConstraint` instead of `LegacyControllerStateConstraint` ([#5018](https://github.com/MetaMask/core/pull/5018/))
|
15
|
+
- **BREAKING:** Constrain the `ComposableControllerState` generic argument for the `ComposableController` class using `ComposableControllerStateConstraint` instead of `LegacyComposableControllerStateConstraint` ([#5018](https://github.com/MetaMask/core/pull/5018/))
|
16
|
+
- Bump `@metamask/base-controller` from `^7.0.2` to `^8.0.0` ([#5079](https://github.com/MetaMask/core/pull/5079)), ([#5135](https://github.com/MetaMask/core/pull/5135)), ([#5305](https://github.com/MetaMask/core/pull/5305))
|
17
|
+
- Bump `@metamask/json-rpc-engine` from `^10.0.1` to `^10.0.3` ([#5082](https://github.com/MetaMask/core/pull/5082)), ([#5272](https://github.com/MetaMask/core/pull/5272))
|
13
18
|
|
14
19
|
## [10.0.0]
|
15
20
|
|
@@ -216,7 +221,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
216
221
|
|
217
222
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
218
223
|
|
219
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/composable-controller@
|
224
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/composable-controller@11.0.0...HEAD
|
225
|
+
[11.0.0]: https://github.com/MetaMask/core/compare/@metamask/composable-controller@10.0.0...@metamask/composable-controller@11.0.0
|
220
226
|
[10.0.0]: https://github.com/MetaMask/core/compare/@metamask/composable-controller@9.0.1...@metamask/composable-controller@10.0.0
|
221
227
|
[9.0.1]: https://github.com/MetaMask/core/compare/@metamask/composable-controller@9.0.0...@metamask/composable-controller@9.0.1
|
222
228
|
[9.0.0]: https://github.com/MetaMask/core/compare/@metamask/composable-controller@8.0.0...@metamask/composable-controller@9.0.0
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.ComposableController = exports.INVALID_CONTROLLER_ERROR = exports.controllerName = void 0;
|
10
10
|
const base_controller_1 = require("@metamask/base-controller");
|
11
11
|
exports.controllerName = 'ComposableController';
|
12
|
-
exports.INVALID_CONTROLLER_ERROR = 'Invalid controller: controller must have a `messagingSystem`
|
12
|
+
exports.INVALID_CONTROLLER_ERROR = 'Invalid controller: controller must have a `messagingSystem` and inherit from `BaseController`.';
|
13
13
|
/**
|
14
14
|
* Controller that composes multiple child controllers and maintains up-to-date composed state.
|
15
15
|
*
|
@@ -56,7 +56,7 @@ class ComposableController extends base_controller_1.BaseController {
|
|
56
56
|
exports.ComposableController = ComposableController;
|
57
57
|
_ComposableController_instances = new WeakSet(), _ComposableController_updateChildController = function _ComposableController_updateChildController(controller) {
|
58
58
|
const { name } = controller;
|
59
|
-
if (!(0, base_controller_1.isBaseController)(controller)
|
59
|
+
if (!(0, base_controller_1.isBaseController)(controller)) {
|
60
60
|
try {
|
61
61
|
delete this.metadata[name];
|
62
62
|
delete this.state[name];
|
@@ -74,6 +74,7 @@ _ComposableController_instances = new WeakSet(), _ComposableController_updateChi
|
|
74
74
|
`${name}:stateChange`, (childState) => {
|
75
75
|
this.update((state) => {
|
76
76
|
// Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.
|
77
|
+
// @ts-expect-error "Type instantiation is excessively deep"
|
77
78
|
state[name] = childState;
|
78
79
|
});
|
79
80
|
});
|
@@ -83,14 +84,6 @@ _ComposableController_instances = new WeakSet(), _ComposableController_updateChi
|
|
83
84
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
84
85
|
console.error(`${name} - ${String(error)}`);
|
85
86
|
}
|
86
|
-
if ((0, base_controller_1.isBaseControllerV1)(controller)) {
|
87
|
-
controller.subscribe((childState) => {
|
88
|
-
this.update((state) => {
|
89
|
-
// Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.
|
90
|
-
state[name] = childState;
|
91
|
-
});
|
92
|
-
});
|
93
|
-
}
|
94
87
|
};
|
95
88
|
exports.default = ComposableController;
|
96
89
|
//# sourceMappingURL=ComposableController.cjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ComposableController.cjs","sourceRoot":"","sources":["../src/ComposableController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n RestrictedMessenger,\n StateConstraint,\n StateConstraintV1,\n StateMetadata,\n StateMetadataConstraint,\n ControllerStateChangeEvent,\n LegacyControllerStateConstraint,\n ControllerInstance,\n} from '@metamask/base-controller';\nimport {\n BaseController,\n isBaseController,\n isBaseControllerV1,\n} from '@metamask/base-controller';\nimport type { Patch } from 'immer';\n\nexport const controllerName = 'ComposableController';\n\nexport const INVALID_CONTROLLER_ERROR =\n 'Invalid controller: controller must have a `messagingSystem` or be a class inheriting from `BaseControllerV1`.';\n\n/**\n * A universal supertype for the composable controller state object.\n *\n * 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.\n * Note that it is unsuitable for general use as a type constraint.\n */\n// TODO: Replace with `ComposableControllerStateConstraint` once BaseControllerV2 migrations are completed for all controllers.\ntype LegacyComposableControllerStateConstraint = {\n // `any` is used here to disable the generic constraint on the `ControllerState` type argument in the `BaseController` type,\n // enabling composable controller state types with BaseControllerV1 state objects to be.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [name: string]: Record<string, any>;\n};\n\n/**\n * The narrowest supertype for the composable controller state object.\n * This is also a widest subtype of the 'LegacyComposableControllerStateConstraint' type.\n */\n// TODO: Replace with `{ [name: string]: StateConstraint }` once BaseControllerV2 migrations are completed for all controllers.\nexport type ComposableControllerStateConstraint = {\n [name: string]: LegacyControllerStateConstraint;\n};\n\n/**\n * A `stateChange` event for any controller instance that extends from either `BaseControllerV1` or `BaseControllerV2`.\n */\n// TODO: Replace all instances with `ControllerStateChangeEvent` once `BaseControllerV2` migrations are completed for all controllers.\ntype LegacyControllerStateChangeEvent<\n ControllerName extends string,\n ControllerState extends StateConstraintV1,\n> = {\n type: `${ControllerName}:stateChange`;\n payload: [ControllerState, Patch[]];\n};\n\n/**\n * The `stateChange` event type for the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerStateChangeEvent<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = LegacyControllerStateChangeEvent<\n typeof controllerName,\n ComposableControllerState\n>;\n\n/**\n * A union type of internal event types available to the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ComposableControllerStateChangeEvent<ComposableControllerState>;\n\n/**\n * A utility type that extracts controllers from the {@link ComposableControllerState} type,\n * and derives a union type of all of their corresponding `stateChange` events.\n *\n * This type can handle both `BaseController` and `BaseControllerV1` controller instances.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ChildControllerStateChangeEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> =\n ComposableControllerState extends Record<\n infer ControllerName extends string,\n infer ControllerState\n >\n ? ControllerState extends StateConstraint\n ? ControllerStateChangeEvent<ControllerName, ControllerState>\n : // TODO: Remove this conditional branch once `BaseControllerV2` migrations are completed for all controllers.\n ControllerState extends StateConstraintV1\n ? LegacyControllerStateChangeEvent<ControllerName, ControllerState>\n : never\n : never;\n\n/**\n * A union type of external event types available to the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type AllowedEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ChildControllerStateChangeEvents<ComposableControllerState>;\n\n/**\n * The messenger of the {@link ComposableController}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerMessenger<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = RestrictedMessenger<\n typeof controllerName,\n never,\n | ComposableControllerEvents<ComposableControllerState>\n | AllowedEvents<ComposableControllerState>,\n never,\n AllowedEvents<ComposableControllerState>['type']\n>;\n\n/**\n * Controller that composes multiple child controllers and maintains up-to-date composed state.\n *\n * @template ComposableControllerState - A type object containing the names and state types of the child controllers.\n * @template ChildControllersMap - A type object that specifies the child controllers which are used to instantiate the {@link ComposableController}.\n */\nexport class ComposableController<\n ComposableControllerState extends LegacyComposableControllerStateConstraint,\n ChildControllersMap extends Record<\n keyof ComposableControllerState,\n ControllerInstance\n >,\n> extends BaseController<\n typeof controllerName,\n ComposableControllerState,\n ComposableControllerMessenger<ComposableControllerState>\n> {\n /**\n * Creates a ComposableController instance.\n *\n * @param options - Initial options used to configure this controller\n * @param options.controllers - An object that contains child controllers keyed by their names.\n * @param options.messenger - A restricted messenger.\n */\n constructor({\n controllers,\n messenger,\n }: {\n controllers: ChildControllersMap;\n messenger: ComposableControllerMessenger<ComposableControllerState>;\n }) {\n if (messenger === undefined) {\n throw new Error(`Messaging system is required`);\n }\n\n super({\n name: controllerName,\n // This reduce operation intentionally reuses its output object. This provides a significant performance benefit over returning a new object on each iteration.\n metadata: Object.keys(controllers).reduce<\n StateMetadata<ComposableControllerState>\n >((metadata, name) => {\n (metadata as StateMetadataConstraint)[name] = {\n persist: true,\n anonymous: true,\n };\n return metadata;\n }, {} as never),\n // This reduce operation intentionally reuses its output object. This provides a significant performance benefit over returning a new object on each iteration.\n state: Object.values(controllers).reduce<ComposableControllerState>(\n (state, controller) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n (state as ComposableControllerStateConstraint)[controller.name] =\n controller.state;\n return state;\n },\n {} as never,\n ),\n messenger,\n });\n\n Object.values(controllers).forEach((controller) => {\n this.#updateChildController(controller);\n });\n }\n\n /**\n * Constructor helper that subscribes to child controller state changes.\n *\n * @param controller - Controller instance to update\n */\n #updateChildController(controller: ControllerInstance): void {\n const { name } = controller;\n if (!isBaseController(controller) && !isBaseControllerV1(controller)) {\n try {\n delete this.metadata[name];\n delete this.state[name];\n // eslint-disable-next-line no-empty\n } catch (_) {}\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`${name} - ${INVALID_CONTROLLER_ERROR}`);\n }\n try {\n this.messagingSystem.subscribe(\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${name}:stateChange`,\n (childState: LegacyControllerStateConstraint) => {\n this.update((state) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n (state as ComposableControllerStateConstraint)[name] = childState;\n });\n },\n );\n } catch (error: unknown) {\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n console.error(`${name} - ${String(error)}`);\n }\n if (isBaseControllerV1(controller)) {\n controller.subscribe((childState: StateConstraintV1) => {\n this.update((state) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n (state as ComposableControllerStateConstraint)[name] = childState;\n });\n });\n }\n }\n}\n\nexport default ComposableController;\n"]}
|
1
|
+
{"version":3,"file":"ComposableController.cjs","sourceRoot":"","sources":["../src/ComposableController.ts"],"names":[],"mappings":";;;;;;;;;AAQA,+DAA6E;AAEhE,QAAA,cAAc,GAAG,sBAAsB,CAAC;AAExC,QAAA,wBAAwB,GACnC,iGAAiG,CAAC;AAyEpG;;;;;GAKG;AACH,MAAa,oBAMX,SAAQ,gCAIT;IACC;;;;;;OAMG;IACH,YAAY,EACV,WAAW,EACX,SAAS,GAIV;QACC,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;QAED,KAAK,CAAC;YACJ,IAAI,EAAE,sBAAc;YACpB,+JAA+J;YAC/J,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAEvC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;gBAClB,QAAoC,CAAC,IAAI,CAAC,GAAG;oBAC5C,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI;iBAChB,CAAC;gBACF,OAAO,QAAQ,CAAC;YAClB,CAAC,EAAE,EAAW,CAAC;YACf,+JAA+J;YAC/J,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CACtC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBACpB,2IAA2I;gBAC1I,KAA6C,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC7D,UAAU,CAAC,KAAK,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC,EACD,EAAW,CACZ;YACD,SAAS;SACV,CAAC,CAAC;;QAEH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAChD,uBAAA,IAAI,oFAAuB,MAA3B,IAAI,EAAwB,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;CAsCF;AA/FD,oDA+FC;oJA/BwB,UAA8B;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;IAC5B,IAAI,CAAC,IAAA,kCAAgB,EAAC,UAAU,CAAC,EAAE;QACjC,IAAI;YACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,oCAAoC;SACrC;QAAC,OAAO,CAAC,EAAE,GAAE;QACd,2CAA2C;QAC3C,4EAA4E;QAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,MAAM,gCAAwB,EAAE,CAAC,CAAC;KAC1D;IACD,IAAI;QACF,IAAI,CAAC,eAAe,CAAC,SAAS;QAC5B,2CAA2C;QAC3C,4EAA4E;QAC5E,GAAG,IAAI,cAAc,EACrB,CAAC,UAA2B,EAAE,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;gBACpB,2IAA2I;gBAC3I,4DAA4D;gBAC3D,KAA6C,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;KACH;IAAC,OAAO,KAAc,EAAE;QACvB,2CAA2C;QAC3C,4EAA4E;QAC5E,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KAC7C;AACH,CAAC;AAGH,kBAAe,oBAAoB,CAAC","sourcesContent":["import type {\n RestrictedMessenger,\n StateConstraint,\n StateMetadata,\n StateMetadataConstraint,\n ControllerStateChangeEvent,\n BaseControllerInstance as ControllerInstance,\n} from '@metamask/base-controller';\nimport { BaseController, isBaseController } from '@metamask/base-controller';\n\nexport const controllerName = 'ComposableController';\n\nexport const INVALID_CONTROLLER_ERROR =\n 'Invalid controller: controller must have a `messagingSystem` and inherit from `BaseController`.';\n\n/**\n * The narrowest supertype for the composable controller state object.\n */\nexport type ComposableControllerStateConstraint = {\n [controllerName: string]: StateConstraint;\n};\n\n/**\n * The `stateChange` event type for the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerStateChangeEvent<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ControllerStateChangeEvent<\n typeof controllerName,\n ComposableControllerState\n>;\n\n/**\n * A union type of internal event types available to the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ComposableControllerStateChangeEvent<ComposableControllerState>;\n\n/**\n * A utility type that extracts controllers from the {@link ComposableControllerState} type,\n * and derives a union type of all of their corresponding `stateChange` events.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ChildControllerStateChangeEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> =\n ComposableControllerState extends Record<\n infer ControllerName extends string,\n infer ControllerState\n >\n ? ControllerState extends StateConstraint\n ? ControllerStateChangeEvent<ControllerName, ControllerState>\n : never\n : never;\n\n/**\n * A union type of external event types available to the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type AllowedEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ChildControllerStateChangeEvents<ComposableControllerState>;\n\n/**\n * The messenger of the {@link ComposableController}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerMessenger<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = RestrictedMessenger<\n typeof controllerName,\n never,\n | ComposableControllerEvents<ComposableControllerState>\n | AllowedEvents<ComposableControllerState>,\n never,\n AllowedEvents<ComposableControllerState>['type']\n>;\n\n/**\n * Controller that composes multiple child controllers and maintains up-to-date composed state.\n *\n * @template ComposableControllerState - A type object containing the names and state types of the child controllers.\n * @template ChildControllersMap - A type object that specifies the child controllers which are used to instantiate the {@link ComposableController}.\n */\nexport class ComposableController<\n ComposableControllerState extends ComposableControllerStateConstraint,\n ChildControllersMap extends Record<\n keyof ComposableControllerState,\n ControllerInstance\n >,\n> extends BaseController<\n typeof controllerName,\n ComposableControllerState,\n ComposableControllerMessenger<ComposableControllerState>\n> {\n /**\n * Creates a ComposableController instance.\n *\n * @param options - Initial options used to configure this controller\n * @param options.controllers - An object that contains child controllers keyed by their names.\n * @param options.messenger - A restricted messenger.\n */\n constructor({\n controllers,\n messenger,\n }: {\n controllers: ChildControllersMap;\n messenger: ComposableControllerMessenger<ComposableControllerState>;\n }) {\n if (messenger === undefined) {\n throw new Error(`Messaging system is required`);\n }\n\n super({\n name: controllerName,\n // This reduce operation intentionally reuses its output object. This provides a significant performance benefit over returning a new object on each iteration.\n metadata: Object.keys(controllers).reduce<\n StateMetadata<ComposableControllerState>\n >((metadata, name) => {\n (metadata as StateMetadataConstraint)[name] = {\n persist: true,\n anonymous: true,\n };\n return metadata;\n }, {} as never),\n // This reduce operation intentionally reuses its output object. This provides a significant performance benefit over returning a new object on each iteration.\n state: Object.values(controllers).reduce<ComposableControllerState>(\n (state, controller) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n (state as ComposableControllerStateConstraint)[controller.name] =\n controller.state;\n return state;\n },\n {} as never,\n ),\n messenger,\n });\n\n Object.values(controllers).forEach((controller) => {\n this.#updateChildController(controller);\n });\n }\n\n /**\n * Constructor helper that subscribes to child controller state changes.\n *\n * @param controller - Controller instance to update\n */\n #updateChildController(controller: ControllerInstance): void {\n const { name } = controller;\n if (!isBaseController(controller)) {\n try {\n delete this.metadata[name];\n delete this.state[name];\n // eslint-disable-next-line no-empty\n } catch (_) {}\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`${name} - ${INVALID_CONTROLLER_ERROR}`);\n }\n try {\n this.messagingSystem.subscribe(\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${name}:stateChange`,\n (childState: StateConstraint) => {\n this.update((state) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n // @ts-expect-error \"Type instantiation is excessively deep\"\n (state as ComposableControllerStateConstraint)[name] = childState;\n });\n },\n );\n } catch (error: unknown) {\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n console.error(`${name} - ${String(error)}`);\n }\n }\n}\n\nexport default ComposableController;\n"]}
|
@@ -1,37 +1,19 @@
|
|
1
|
-
import type { RestrictedMessenger, StateConstraint,
|
1
|
+
import type { RestrictedMessenger, StateConstraint, ControllerStateChangeEvent, BaseControllerInstance as ControllerInstance } from "@metamask/base-controller";
|
2
2
|
import { BaseController } from "@metamask/base-controller";
|
3
|
-
import type { Patch } from "immer";
|
4
3
|
export declare const controllerName = "ComposableController";
|
5
|
-
export declare const INVALID_CONTROLLER_ERROR = "Invalid controller: controller must have a `messagingSystem`
|
6
|
-
/**
|
7
|
-
* A universal supertype for the composable controller state object.
|
8
|
-
*
|
9
|
-
* 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.
|
10
|
-
* Note that it is unsuitable for general use as a type constraint.
|
11
|
-
*/
|
12
|
-
type LegacyComposableControllerStateConstraint = {
|
13
|
-
[name: string]: Record<string, any>;
|
14
|
-
};
|
4
|
+
export declare const INVALID_CONTROLLER_ERROR = "Invalid controller: controller must have a `messagingSystem` and inherit from `BaseController`.";
|
15
5
|
/**
|
16
6
|
* The narrowest supertype for the composable controller state object.
|
17
|
-
* This is also a widest subtype of the 'LegacyComposableControllerStateConstraint' type.
|
18
7
|
*/
|
19
8
|
export type ComposableControllerStateConstraint = {
|
20
|
-
[
|
21
|
-
};
|
22
|
-
/**
|
23
|
-
* A `stateChange` event for any controller instance that extends from either `BaseControllerV1` or `BaseControllerV2`.
|
24
|
-
*/
|
25
|
-
type LegacyControllerStateChangeEvent<ControllerName extends string, ControllerState extends StateConstraintV1> = {
|
26
|
-
type: `${ControllerName}:stateChange`;
|
27
|
-
payload: [ControllerState, Patch[]];
|
9
|
+
[controllerName: string]: StateConstraint;
|
28
10
|
};
|
29
11
|
/**
|
30
12
|
* The `stateChange` event type for the {@link ComposableControllerMessenger}.
|
31
13
|
*
|
32
14
|
* @template ComposableControllerState - A type object that maps controller names to their state types.
|
33
15
|
*/
|
34
|
-
export type ComposableControllerStateChangeEvent<ComposableControllerState extends ComposableControllerStateConstraint> =
|
16
|
+
export type ComposableControllerStateChangeEvent<ComposableControllerState extends ComposableControllerStateConstraint> = ControllerStateChangeEvent<typeof controllerName, ComposableControllerState>;
|
35
17
|
/**
|
36
18
|
* A union type of internal event types available to the {@link ComposableControllerMessenger}.
|
37
19
|
*
|
@@ -42,11 +24,9 @@ export type ComposableControllerEvents<ComposableControllerState extends Composa
|
|
42
24
|
* A utility type that extracts controllers from the {@link ComposableControllerState} type,
|
43
25
|
* and derives a union type of all of their corresponding `stateChange` events.
|
44
26
|
*
|
45
|
-
* This type can handle both `BaseController` and `BaseControllerV1` controller instances.
|
46
|
-
*
|
47
27
|
* @template ComposableControllerState - A type object that maps controller names to their state types.
|
48
28
|
*/
|
49
|
-
export type ChildControllerStateChangeEvents<ComposableControllerState extends ComposableControllerStateConstraint> = ComposableControllerState extends Record<infer ControllerName extends string, infer ControllerState> ? ControllerState extends StateConstraint ? ControllerStateChangeEvent<ControllerName, ControllerState> :
|
29
|
+
export type ChildControllerStateChangeEvents<ComposableControllerState extends ComposableControllerStateConstraint> = ComposableControllerState extends Record<infer ControllerName extends string, infer ControllerState> ? ControllerState extends StateConstraint ? ControllerStateChangeEvent<ControllerName, ControllerState> : never : never;
|
50
30
|
/**
|
51
31
|
* A union type of external event types available to the {@link ComposableControllerMessenger}.
|
52
32
|
*
|
@@ -65,7 +45,7 @@ export type ComposableControllerMessenger<ComposableControllerState extends Comp
|
|
65
45
|
* @template ComposableControllerState - A type object containing the names and state types of the child controllers.
|
66
46
|
* @template ChildControllersMap - A type object that specifies the child controllers which are used to instantiate the {@link ComposableController}.
|
67
47
|
*/
|
68
|
-
export declare class ComposableController<ComposableControllerState extends
|
48
|
+
export declare class ComposableController<ComposableControllerState extends ComposableControllerStateConstraint, ChildControllersMap extends Record<keyof ComposableControllerState, ControllerInstance>> extends BaseController<typeof controllerName, ComposableControllerState, ComposableControllerMessenger<ComposableControllerState>> {
|
69
49
|
#private;
|
70
50
|
/**
|
71
51
|
* Creates a ComposableController instance.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ComposableController.d.cts","sourceRoot":"","sources":["../src/ComposableController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,
|
1
|
+
{"version":3,"file":"ComposableController.d.cts","sourceRoot":"","sources":["../src/ComposableController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAGf,0BAA0B,EAC1B,sBAAsB,IAAI,kBAAkB,EAC7C,kCAAkC;AACnC,OAAO,EAAE,cAAc,EAAoB,kCAAkC;AAE7E,eAAO,MAAM,cAAc,yBAAyB,CAAC;AAErD,eAAO,MAAM,wBAAwB,oGAC8D,CAAC;AAEpG;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG;IAChD,CAAC,cAAc,EAAE,MAAM,GAAG,eAAe,CAAC;CAC3C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,oCAAoC,CAC9C,yBAAyB,SAAS,mCAAmC,IACnE,0BAA0B,CAC5B,OAAO,cAAc,EACrB,yBAAyB,CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,CACpC,yBAAyB,SAAS,mCAAmC,IACnE,oCAAoC,CAAC,yBAAyB,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,MAAM,gCAAgC,CAC1C,yBAAyB,SAAS,mCAAmC,IAErE,yBAAyB,SAAS,MAAM,CACtC,MAAM,cAAc,SAAS,MAAM,EACnC,MAAM,eAAe,CACtB,GACG,eAAe,SAAS,eAAe,GACrC,0BAA0B,CAAC,cAAc,EAAE,eAAe,CAAC,GAC3D,KAAK,GACP,KAAK,CAAC;AAEZ;;;;GAIG;AACH,MAAM,MAAM,aAAa,CACvB,yBAAyB,SAAS,mCAAmC,IACnE,gCAAgC,CAAC,yBAAyB,CAAC,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,CACvC,yBAAyB,SAAS,mCAAmC,IACnE,mBAAmB,CACrB,OAAO,cAAc,EACrB,KAAK,EACH,0BAA0B,CAAC,yBAAyB,CAAC,GACrD,aAAa,CAAC,yBAAyB,CAAC,EAC1C,KAAK,EACL,aAAa,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,CACjD,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,oBAAoB,CAC/B,yBAAyB,SAAS,mCAAmC,EACrE,mBAAmB,SAAS,MAAM,CAChC,MAAM,yBAAyB,EAC/B,kBAAkB,CACnB,CACD,SAAQ,cAAc,CACtB,OAAO,cAAc,EACrB,yBAAyB,EACzB,6BAA6B,CAAC,yBAAyB,CAAC,CACzD;;IACC;;;;;;OAMG;gBACS,EACV,WAAW,EACX,SAAS,GACV,EAAE;QACD,WAAW,EAAE,mBAAmB,CAAC;QACjC,SAAS,EAAE,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;KACrE;CAuEF;AAED,eAAe,oBAAoB,CAAC"}
|
@@ -1,37 +1,19 @@
|
|
1
|
-
import type { RestrictedMessenger, StateConstraint,
|
1
|
+
import type { RestrictedMessenger, StateConstraint, ControllerStateChangeEvent, BaseControllerInstance as ControllerInstance } from "@metamask/base-controller";
|
2
2
|
import { BaseController } from "@metamask/base-controller";
|
3
|
-
import type { Patch } from "immer";
|
4
3
|
export declare const controllerName = "ComposableController";
|
5
|
-
export declare const INVALID_CONTROLLER_ERROR = "Invalid controller: controller must have a `messagingSystem`
|
6
|
-
/**
|
7
|
-
* A universal supertype for the composable controller state object.
|
8
|
-
*
|
9
|
-
* 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.
|
10
|
-
* Note that it is unsuitable for general use as a type constraint.
|
11
|
-
*/
|
12
|
-
type LegacyComposableControllerStateConstraint = {
|
13
|
-
[name: string]: Record<string, any>;
|
14
|
-
};
|
4
|
+
export declare const INVALID_CONTROLLER_ERROR = "Invalid controller: controller must have a `messagingSystem` and inherit from `BaseController`.";
|
15
5
|
/**
|
16
6
|
* The narrowest supertype for the composable controller state object.
|
17
|
-
* This is also a widest subtype of the 'LegacyComposableControllerStateConstraint' type.
|
18
7
|
*/
|
19
8
|
export type ComposableControllerStateConstraint = {
|
20
|
-
[
|
21
|
-
};
|
22
|
-
/**
|
23
|
-
* A `stateChange` event for any controller instance that extends from either `BaseControllerV1` or `BaseControllerV2`.
|
24
|
-
*/
|
25
|
-
type LegacyControllerStateChangeEvent<ControllerName extends string, ControllerState extends StateConstraintV1> = {
|
26
|
-
type: `${ControllerName}:stateChange`;
|
27
|
-
payload: [ControllerState, Patch[]];
|
9
|
+
[controllerName: string]: StateConstraint;
|
28
10
|
};
|
29
11
|
/**
|
30
12
|
* The `stateChange` event type for the {@link ComposableControllerMessenger}.
|
31
13
|
*
|
32
14
|
* @template ComposableControllerState - A type object that maps controller names to their state types.
|
33
15
|
*/
|
34
|
-
export type ComposableControllerStateChangeEvent<ComposableControllerState extends ComposableControllerStateConstraint> =
|
16
|
+
export type ComposableControllerStateChangeEvent<ComposableControllerState extends ComposableControllerStateConstraint> = ControllerStateChangeEvent<typeof controllerName, ComposableControllerState>;
|
35
17
|
/**
|
36
18
|
* A union type of internal event types available to the {@link ComposableControllerMessenger}.
|
37
19
|
*
|
@@ -42,11 +24,9 @@ export type ComposableControllerEvents<ComposableControllerState extends Composa
|
|
42
24
|
* A utility type that extracts controllers from the {@link ComposableControllerState} type,
|
43
25
|
* and derives a union type of all of their corresponding `stateChange` events.
|
44
26
|
*
|
45
|
-
* This type can handle both `BaseController` and `BaseControllerV1` controller instances.
|
46
|
-
*
|
47
27
|
* @template ComposableControllerState - A type object that maps controller names to their state types.
|
48
28
|
*/
|
49
|
-
export type ChildControllerStateChangeEvents<ComposableControllerState extends ComposableControllerStateConstraint> = ComposableControllerState extends Record<infer ControllerName extends string, infer ControllerState> ? ControllerState extends StateConstraint ? ControllerStateChangeEvent<ControllerName, ControllerState> :
|
29
|
+
export type ChildControllerStateChangeEvents<ComposableControllerState extends ComposableControllerStateConstraint> = ComposableControllerState extends Record<infer ControllerName extends string, infer ControllerState> ? ControllerState extends StateConstraint ? ControllerStateChangeEvent<ControllerName, ControllerState> : never : never;
|
50
30
|
/**
|
51
31
|
* A union type of external event types available to the {@link ComposableControllerMessenger}.
|
52
32
|
*
|
@@ -65,7 +45,7 @@ export type ComposableControllerMessenger<ComposableControllerState extends Comp
|
|
65
45
|
* @template ComposableControllerState - A type object containing the names and state types of the child controllers.
|
66
46
|
* @template ChildControllersMap - A type object that specifies the child controllers which are used to instantiate the {@link ComposableController}.
|
67
47
|
*/
|
68
|
-
export declare class ComposableController<ComposableControllerState extends
|
48
|
+
export declare class ComposableController<ComposableControllerState extends ComposableControllerStateConstraint, ChildControllersMap extends Record<keyof ComposableControllerState, ControllerInstance>> extends BaseController<typeof controllerName, ComposableControllerState, ComposableControllerMessenger<ComposableControllerState>> {
|
69
49
|
#private;
|
70
50
|
/**
|
71
51
|
* Creates a ComposableController instance.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ComposableController.d.mts","sourceRoot":"","sources":["../src/ComposableController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,
|
1
|
+
{"version":3,"file":"ComposableController.d.mts","sourceRoot":"","sources":["../src/ComposableController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAGf,0BAA0B,EAC1B,sBAAsB,IAAI,kBAAkB,EAC7C,kCAAkC;AACnC,OAAO,EAAE,cAAc,EAAoB,kCAAkC;AAE7E,eAAO,MAAM,cAAc,yBAAyB,CAAC;AAErD,eAAO,MAAM,wBAAwB,oGAC8D,CAAC;AAEpG;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG;IAChD,CAAC,cAAc,EAAE,MAAM,GAAG,eAAe,CAAC;CAC3C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,oCAAoC,CAC9C,yBAAyB,SAAS,mCAAmC,IACnE,0BAA0B,CAC5B,OAAO,cAAc,EACrB,yBAAyB,CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,CACpC,yBAAyB,SAAS,mCAAmC,IACnE,oCAAoC,CAAC,yBAAyB,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,MAAM,gCAAgC,CAC1C,yBAAyB,SAAS,mCAAmC,IAErE,yBAAyB,SAAS,MAAM,CACtC,MAAM,cAAc,SAAS,MAAM,EACnC,MAAM,eAAe,CACtB,GACG,eAAe,SAAS,eAAe,GACrC,0BAA0B,CAAC,cAAc,EAAE,eAAe,CAAC,GAC3D,KAAK,GACP,KAAK,CAAC;AAEZ;;;;GAIG;AACH,MAAM,MAAM,aAAa,CACvB,yBAAyB,SAAS,mCAAmC,IACnE,gCAAgC,CAAC,yBAAyB,CAAC,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,CACvC,yBAAyB,SAAS,mCAAmC,IACnE,mBAAmB,CACrB,OAAO,cAAc,EACrB,KAAK,EACH,0BAA0B,CAAC,yBAAyB,CAAC,GACrD,aAAa,CAAC,yBAAyB,CAAC,EAC1C,KAAK,EACL,aAAa,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,CACjD,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,oBAAoB,CAC/B,yBAAyB,SAAS,mCAAmC,EACrE,mBAAmB,SAAS,MAAM,CAChC,MAAM,yBAAyB,EAC/B,kBAAkB,CACnB,CACD,SAAQ,cAAc,CACtB,OAAO,cAAc,EACrB,yBAAyB,EACzB,6BAA6B,CAAC,yBAAyB,CAAC,CACzD;;IACC;;;;;;OAMG;gBACS,EACV,WAAW,EACX,SAAS,GACV,EAAE;QACD,WAAW,EAAE,mBAAmB,CAAC;QACjC,SAAS,EAAE,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;KACrE;CAuEF;AAED,eAAe,oBAAoB,CAAC"}
|
@@ -4,9 +4,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
5
5
|
};
|
6
6
|
var _ComposableController_instances, _ComposableController_updateChildController;
|
7
|
-
import { BaseController, isBaseController
|
7
|
+
import { BaseController, isBaseController } from "@metamask/base-controller";
|
8
8
|
export const controllerName = 'ComposableController';
|
9
|
-
export const INVALID_CONTROLLER_ERROR = 'Invalid controller: controller must have a `messagingSystem`
|
9
|
+
export const INVALID_CONTROLLER_ERROR = 'Invalid controller: controller must have a `messagingSystem` and inherit from `BaseController`.';
|
10
10
|
/**
|
11
11
|
* Controller that composes multiple child controllers and maintains up-to-date composed state.
|
12
12
|
*
|
@@ -52,7 +52,7 @@ export class ComposableController extends BaseController {
|
|
52
52
|
}
|
53
53
|
_ComposableController_instances = new WeakSet(), _ComposableController_updateChildController = function _ComposableController_updateChildController(controller) {
|
54
54
|
const { name } = controller;
|
55
|
-
if (!isBaseController(controller)
|
55
|
+
if (!isBaseController(controller)) {
|
56
56
|
try {
|
57
57
|
delete this.metadata[name];
|
58
58
|
delete this.state[name];
|
@@ -70,6 +70,7 @@ _ComposableController_instances = new WeakSet(), _ComposableController_updateChi
|
|
70
70
|
`${name}:stateChange`, (childState) => {
|
71
71
|
this.update((state) => {
|
72
72
|
// Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.
|
73
|
+
// @ts-expect-error "Type instantiation is excessively deep"
|
73
74
|
state[name] = childState;
|
74
75
|
});
|
75
76
|
});
|
@@ -79,14 +80,6 @@ _ComposableController_instances = new WeakSet(), _ComposableController_updateChi
|
|
79
80
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
80
81
|
console.error(`${name} - ${String(error)}`);
|
81
82
|
}
|
82
|
-
if (isBaseControllerV1(controller)) {
|
83
|
-
controller.subscribe((childState) => {
|
84
|
-
this.update((state) => {
|
85
|
-
// Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.
|
86
|
-
state[name] = childState;
|
87
|
-
});
|
88
|
-
});
|
89
|
-
}
|
90
83
|
};
|
91
84
|
export default ComposableController;
|
92
85
|
//# sourceMappingURL=ComposableController.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ComposableController.mjs","sourceRoot":"","sources":["../src/ComposableController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n RestrictedMessenger,\n StateConstraint,\n StateConstraintV1,\n StateMetadata,\n StateMetadataConstraint,\n ControllerStateChangeEvent,\n LegacyControllerStateConstraint,\n ControllerInstance,\n} from '@metamask/base-controller';\nimport {\n BaseController,\n isBaseController,\n isBaseControllerV1,\n} from '@metamask/base-controller';\nimport type { Patch } from 'immer';\n\nexport const controllerName = 'ComposableController';\n\nexport const INVALID_CONTROLLER_ERROR =\n 'Invalid controller: controller must have a `messagingSystem` or be a class inheriting from `BaseControllerV1`.';\n\n/**\n * A universal supertype for the composable controller state object.\n *\n * 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.\n * Note that it is unsuitable for general use as a type constraint.\n */\n// TODO: Replace with `ComposableControllerStateConstraint` once BaseControllerV2 migrations are completed for all controllers.\ntype LegacyComposableControllerStateConstraint = {\n // `any` is used here to disable the generic constraint on the `ControllerState` type argument in the `BaseController` type,\n // enabling composable controller state types with BaseControllerV1 state objects to be.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [name: string]: Record<string, any>;\n};\n\n/**\n * The narrowest supertype for the composable controller state object.\n * This is also a widest subtype of the 'LegacyComposableControllerStateConstraint' type.\n */\n// TODO: Replace with `{ [name: string]: StateConstraint }` once BaseControllerV2 migrations are completed for all controllers.\nexport type ComposableControllerStateConstraint = {\n [name: string]: LegacyControllerStateConstraint;\n};\n\n/**\n * A `stateChange` event for any controller instance that extends from either `BaseControllerV1` or `BaseControllerV2`.\n */\n// TODO: Replace all instances with `ControllerStateChangeEvent` once `BaseControllerV2` migrations are completed for all controllers.\ntype LegacyControllerStateChangeEvent<\n ControllerName extends string,\n ControllerState extends StateConstraintV1,\n> = {\n type: `${ControllerName}:stateChange`;\n payload: [ControllerState, Patch[]];\n};\n\n/**\n * The `stateChange` event type for the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerStateChangeEvent<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = LegacyControllerStateChangeEvent<\n typeof controllerName,\n ComposableControllerState\n>;\n\n/**\n * A union type of internal event types available to the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ComposableControllerStateChangeEvent<ComposableControllerState>;\n\n/**\n * A utility type that extracts controllers from the {@link ComposableControllerState} type,\n * and derives a union type of all of their corresponding `stateChange` events.\n *\n * This type can handle both `BaseController` and `BaseControllerV1` controller instances.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ChildControllerStateChangeEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> =\n ComposableControllerState extends Record<\n infer ControllerName extends string,\n infer ControllerState\n >\n ? ControllerState extends StateConstraint\n ? ControllerStateChangeEvent<ControllerName, ControllerState>\n : // TODO: Remove this conditional branch once `BaseControllerV2` migrations are completed for all controllers.\n ControllerState extends StateConstraintV1\n ? LegacyControllerStateChangeEvent<ControllerName, ControllerState>\n : never\n : never;\n\n/**\n * A union type of external event types available to the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type AllowedEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ChildControllerStateChangeEvents<ComposableControllerState>;\n\n/**\n * The messenger of the {@link ComposableController}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerMessenger<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = RestrictedMessenger<\n typeof controllerName,\n never,\n | ComposableControllerEvents<ComposableControllerState>\n | AllowedEvents<ComposableControllerState>,\n never,\n AllowedEvents<ComposableControllerState>['type']\n>;\n\n/**\n * Controller that composes multiple child controllers and maintains up-to-date composed state.\n *\n * @template ComposableControllerState - A type object containing the names and state types of the child controllers.\n * @template ChildControllersMap - A type object that specifies the child controllers which are used to instantiate the {@link ComposableController}.\n */\nexport class ComposableController<\n ComposableControllerState extends LegacyComposableControllerStateConstraint,\n ChildControllersMap extends Record<\n keyof ComposableControllerState,\n ControllerInstance\n >,\n> extends BaseController<\n typeof controllerName,\n ComposableControllerState,\n ComposableControllerMessenger<ComposableControllerState>\n> {\n /**\n * Creates a ComposableController instance.\n *\n * @param options - Initial options used to configure this controller\n * @param options.controllers - An object that contains child controllers keyed by their names.\n * @param options.messenger - A restricted messenger.\n */\n constructor({\n controllers,\n messenger,\n }: {\n controllers: ChildControllersMap;\n messenger: ComposableControllerMessenger<ComposableControllerState>;\n }) {\n if (messenger === undefined) {\n throw new Error(`Messaging system is required`);\n }\n\n super({\n name: controllerName,\n // This reduce operation intentionally reuses its output object. This provides a significant performance benefit over returning a new object on each iteration.\n metadata: Object.keys(controllers).reduce<\n StateMetadata<ComposableControllerState>\n >((metadata, name) => {\n (metadata as StateMetadataConstraint)[name] = {\n persist: true,\n anonymous: true,\n };\n return metadata;\n }, {} as never),\n // This reduce operation intentionally reuses its output object. This provides a significant performance benefit over returning a new object on each iteration.\n state: Object.values(controllers).reduce<ComposableControllerState>(\n (state, controller) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n (state as ComposableControllerStateConstraint)[controller.name] =\n controller.state;\n return state;\n },\n {} as never,\n ),\n messenger,\n });\n\n Object.values(controllers).forEach((controller) => {\n this.#updateChildController(controller);\n });\n }\n\n /**\n * Constructor helper that subscribes to child controller state changes.\n *\n * @param controller - Controller instance to update\n */\n #updateChildController(controller: ControllerInstance): void {\n const { name } = controller;\n if (!isBaseController(controller) && !isBaseControllerV1(controller)) {\n try {\n delete this.metadata[name];\n delete this.state[name];\n // eslint-disable-next-line no-empty\n } catch (_) {}\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`${name} - ${INVALID_CONTROLLER_ERROR}`);\n }\n try {\n this.messagingSystem.subscribe(\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${name}:stateChange`,\n (childState: LegacyControllerStateConstraint) => {\n this.update((state) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n (state as ComposableControllerStateConstraint)[name] = childState;\n });\n },\n );\n } catch (error: unknown) {\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n console.error(`${name} - ${String(error)}`);\n }\n if (isBaseControllerV1(controller)) {\n controller.subscribe((childState: StateConstraintV1) => {\n this.update((state) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n (state as ComposableControllerStateConstraint)[name] = childState;\n });\n });\n }\n }\n}\n\nexport default ComposableController;\n"]}
|
1
|
+
{"version":3,"file":"ComposableController.mjs","sourceRoot":"","sources":["../src/ComposableController.ts"],"names":[],"mappings":";;;;;;AAQA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kCAAkC;AAE7E,MAAM,CAAC,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAErD,MAAM,CAAC,MAAM,wBAAwB,GACnC,iGAAiG,CAAC;AAyEpG;;;;;GAKG;AACH,MAAM,OAAO,oBAMX,SAAQ,cAIT;IACC;;;;;;OAMG;IACH,YAAY,EACV,WAAW,EACX,SAAS,GAIV;QACC,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;QAED,KAAK,CAAC;YACJ,IAAI,EAAE,cAAc;YACpB,+JAA+J;YAC/J,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAEvC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;gBAClB,QAAoC,CAAC,IAAI,CAAC,GAAG;oBAC5C,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI;iBAChB,CAAC;gBACF,OAAO,QAAQ,CAAC;YAClB,CAAC,EAAE,EAAW,CAAC;YACf,+JAA+J;YAC/J,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CACtC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBACpB,2IAA2I;gBAC1I,KAA6C,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC7D,UAAU,CAAC,KAAK,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC,EACD,EAAW,CACZ;YACD,SAAS;SACV,CAAC,CAAC;;QAEH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAChD,uBAAA,IAAI,oFAAuB,MAA3B,IAAI,EAAwB,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;CAsCF;oJA/BwB,UAA8B;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;IAC5B,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;QACjC,IAAI;YACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,oCAAoC;SACrC;QAAC,OAAO,CAAC,EAAE,GAAE;QACd,2CAA2C;QAC3C,4EAA4E;QAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,MAAM,wBAAwB,EAAE,CAAC,CAAC;KAC1D;IACD,IAAI;QACF,IAAI,CAAC,eAAe,CAAC,SAAS;QAC5B,2CAA2C;QAC3C,4EAA4E;QAC5E,GAAG,IAAI,cAAc,EACrB,CAAC,UAA2B,EAAE,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;gBACpB,2IAA2I;gBAC3I,4DAA4D;gBAC3D,KAA6C,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;KACH;IAAC,OAAO,KAAc,EAAE;QACvB,2CAA2C;QAC3C,4EAA4E;QAC5E,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KAC7C;AACH,CAAC;AAGH,eAAe,oBAAoB,CAAC","sourcesContent":["import type {\n RestrictedMessenger,\n StateConstraint,\n StateMetadata,\n StateMetadataConstraint,\n ControllerStateChangeEvent,\n BaseControllerInstance as ControllerInstance,\n} from '@metamask/base-controller';\nimport { BaseController, isBaseController } from '@metamask/base-controller';\n\nexport const controllerName = 'ComposableController';\n\nexport const INVALID_CONTROLLER_ERROR =\n 'Invalid controller: controller must have a `messagingSystem` and inherit from `BaseController`.';\n\n/**\n * The narrowest supertype for the composable controller state object.\n */\nexport type ComposableControllerStateConstraint = {\n [controllerName: string]: StateConstraint;\n};\n\n/**\n * The `stateChange` event type for the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerStateChangeEvent<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ControllerStateChangeEvent<\n typeof controllerName,\n ComposableControllerState\n>;\n\n/**\n * A union type of internal event types available to the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ComposableControllerStateChangeEvent<ComposableControllerState>;\n\n/**\n * A utility type that extracts controllers from the {@link ComposableControllerState} type,\n * and derives a union type of all of their corresponding `stateChange` events.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ChildControllerStateChangeEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> =\n ComposableControllerState extends Record<\n infer ControllerName extends string,\n infer ControllerState\n >\n ? ControllerState extends StateConstraint\n ? ControllerStateChangeEvent<ControllerName, ControllerState>\n : never\n : never;\n\n/**\n * A union type of external event types available to the {@link ComposableControllerMessenger}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type AllowedEvents<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = ChildControllerStateChangeEvents<ComposableControllerState>;\n\n/**\n * The messenger of the {@link ComposableController}.\n *\n * @template ComposableControllerState - A type object that maps controller names to their state types.\n */\nexport type ComposableControllerMessenger<\n ComposableControllerState extends ComposableControllerStateConstraint,\n> = RestrictedMessenger<\n typeof controllerName,\n never,\n | ComposableControllerEvents<ComposableControllerState>\n | AllowedEvents<ComposableControllerState>,\n never,\n AllowedEvents<ComposableControllerState>['type']\n>;\n\n/**\n * Controller that composes multiple child controllers and maintains up-to-date composed state.\n *\n * @template ComposableControllerState - A type object containing the names and state types of the child controllers.\n * @template ChildControllersMap - A type object that specifies the child controllers which are used to instantiate the {@link ComposableController}.\n */\nexport class ComposableController<\n ComposableControllerState extends ComposableControllerStateConstraint,\n ChildControllersMap extends Record<\n keyof ComposableControllerState,\n ControllerInstance\n >,\n> extends BaseController<\n typeof controllerName,\n ComposableControllerState,\n ComposableControllerMessenger<ComposableControllerState>\n> {\n /**\n * Creates a ComposableController instance.\n *\n * @param options - Initial options used to configure this controller\n * @param options.controllers - An object that contains child controllers keyed by their names.\n * @param options.messenger - A restricted messenger.\n */\n constructor({\n controllers,\n messenger,\n }: {\n controllers: ChildControllersMap;\n messenger: ComposableControllerMessenger<ComposableControllerState>;\n }) {\n if (messenger === undefined) {\n throw new Error(`Messaging system is required`);\n }\n\n super({\n name: controllerName,\n // This reduce operation intentionally reuses its output object. This provides a significant performance benefit over returning a new object on each iteration.\n metadata: Object.keys(controllers).reduce<\n StateMetadata<ComposableControllerState>\n >((metadata, name) => {\n (metadata as StateMetadataConstraint)[name] = {\n persist: true,\n anonymous: true,\n };\n return metadata;\n }, {} as never),\n // This reduce operation intentionally reuses its output object. This provides a significant performance benefit over returning a new object on each iteration.\n state: Object.values(controllers).reduce<ComposableControllerState>(\n (state, controller) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n (state as ComposableControllerStateConstraint)[controller.name] =\n controller.state;\n return state;\n },\n {} as never,\n ),\n messenger,\n });\n\n Object.values(controllers).forEach((controller) => {\n this.#updateChildController(controller);\n });\n }\n\n /**\n * Constructor helper that subscribes to child controller state changes.\n *\n * @param controller - Controller instance to update\n */\n #updateChildController(controller: ControllerInstance): void {\n const { name } = controller;\n if (!isBaseController(controller)) {\n try {\n delete this.metadata[name];\n delete this.state[name];\n // eslint-disable-next-line no-empty\n } catch (_) {}\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`${name} - ${INVALID_CONTROLLER_ERROR}`);\n }\n try {\n this.messagingSystem.subscribe(\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${name}:stateChange`,\n (childState: StateConstraint) => {\n this.update((state) => {\n // Type assertion is necessary for property assignment to a generic type. This does not pollute or widen the type of the asserted variable.\n // @ts-expect-error \"Type instantiation is excessively deep\"\n (state as ComposableControllerStateConstraint)[name] = childState;\n });\n },\n );\n } catch (error: unknown) {\n // False negative. `name` is a string type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n console.error(`${name} - ${String(error)}`);\n }\n }\n}\n\nexport default ComposableController;\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@metamask-previews/composable-controller",
|
3
|
-
"version": "
|
3
|
+
"version": "11.0.0-preview-1a21f764",
|
4
4
|
"description": "Consolidates the state from multiple controllers into one",
|
5
5
|
"keywords": [
|
6
6
|
"MetaMask",
|
@@ -47,11 +47,11 @@
|
|
47
47
|
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
|
48
48
|
},
|
49
49
|
"dependencies": {
|
50
|
-
"@metamask/base-controller": "^
|
50
|
+
"@metamask/base-controller": "^8.0.0"
|
51
51
|
},
|
52
52
|
"devDependencies": {
|
53
53
|
"@metamask/auto-changelog": "^3.4.4",
|
54
|
-
"@metamask/json-rpc-engine": "^10.0.
|
54
|
+
"@metamask/json-rpc-engine": "^10.0.3",
|
55
55
|
"@types/jest": "^27.4.1",
|
56
56
|
"deepmerge": "^4.2.2",
|
57
57
|
"immer": "^9.0.6",
|