@@ -13,7 +13,6 @@ import {
13
13
isBaseController ,
14
14
} from './BaseControllerV2' ;
15
15
import { Messenger } from './Messenger' ;
16
- import type { RestrictedMessenger } from './RestrictedMessenger' ;
17
16
import { JsonRpcEngine } from '../../json-rpc-engine/src' ;
18
17
19
18
export const countControllerName = 'CountController' ;
@@ -39,31 +38,19 @@ export const countControllerStateMetadata = {
39
38
} ,
40
39
} ;
41
40
42
- type CountMessenger = RestrictedMessenger <
43
- typeof countControllerName ,
41
+ type CountMessenger = Messenger <
44
42
CountControllerAction ,
45
43
CountControllerEvent ,
46
- never ,
47
- never
44
+ typeof countControllerName
48
45
> ;
49
46
50
47
/**
51
- * Constructs a restricted messenger for the Count controller.
48
+ * Construct the Count controller messenger .
52
49
*
53
- * @param messenger - The messenger.
54
- * @returns A restricted messenger for the Count controller.
50
+ * @returns The Count controller messenger.
55
51
*/
56
- export function getCountMessenger (
57
- messenger ?: Messenger < CountControllerAction , CountControllerEvent > ,
58
- ) : CountMessenger {
59
- if ( ! messenger ) {
60
- messenger = new Messenger < CountControllerAction , CountControllerEvent > ( ) ;
61
- }
62
- return messenger . getRestricted ( {
63
- name : countControllerName ,
64
- allowedActions : [ ] ,
65
- allowedEvents : [ ] ,
66
- } ) ;
52
+ export function getCountMessenger ( ) : CountMessenger {
53
+ return new Messenger ( { namespace : countControllerName } ) ;
67
54
}
68
55
69
56
export class CountController extends BaseController <
@@ -118,34 +105,19 @@ const messagesControllerStateMetadata = {
118
105
} ,
119
106
} ;
120
107
121
- type MessagesMessenger = RestrictedMessenger <
122
- typeof messagesControllerName ,
108
+ type MessagesMessenger = Messenger <
123
109
MessagesControllerAction ,
124
110
MessagesControllerEvent ,
125
- never ,
126
- never
111
+ typeof messagesControllerName
127
112
> ;
128
113
129
114
/**
130
- * Constructs a restricted messenger for the Messages controller.
115
+ * Construct the Messages controller messenger .
131
116
*
132
- * @param messenger - The messenger.
133
- * @returns A restricted messenger for the Messages controller.
117
+ * @returns The Messages controller messenger.
134
118
*/
135
- function getMessagesMessenger (
136
- messenger ?: Messenger < MessagesControllerAction , MessagesControllerEvent > ,
137
- ) : MessagesMessenger {
138
- if ( ! messenger ) {
139
- messenger = new Messenger <
140
- MessagesControllerAction ,
141
- MessagesControllerEvent
142
- > ( ) ;
143
- }
144
- return messenger . getRestricted ( {
145
- name : messagesControllerName ,
146
- allowedActions : [ ] ,
147
- allowedEvents : [ ] ,
148
- } ) ;
119
+ function getMessagesMessenger ( ) : MessagesMessenger {
120
+ return new Messenger ( { namespace : messagesControllerName } ) ;
149
121
}
150
122
151
123
class MessagesController extends BaseController <
@@ -173,12 +145,8 @@ class MessagesController extends BaseController<
173
145
174
146
describe ( 'isBaseController' , ( ) => {
175
147
it ( 'should return true if passed a V2 controller' , ( ) => {
176
- const messenger = new Messenger <
177
- CountControllerAction ,
178
- CountControllerEvent
179
- > ( ) ;
180
148
const controller = new CountController ( {
181
- messenger : getCountMessenger ( messenger ) ,
149
+ messenger : getCountMessenger ( ) ,
182
150
name : countControllerName ,
183
151
state : { count : 0 } ,
184
152
metadata : countControllerStateMetadata ,
@@ -209,12 +177,9 @@ describe('BaseController', () => {
209
177
} ) ;
210
178
211
179
it ( 'should allow getting state via the getState action' , ( ) => {
212
- const messenger = new Messenger <
213
- CountControllerAction ,
214
- CountControllerEvent
215
- > ( ) ;
180
+ const messenger = getCountMessenger ( ) ;
216
181
new CountController ( {
217
- messenger : getCountMessenger ( messenger ) ,
182
+ messenger,
218
183
name : countControllerName ,
219
184
state : { count : 0 } ,
220
185
metadata : countControllerStateMetadata ,
@@ -409,9 +374,9 @@ describe('BaseController', () => {
409
374
} ) ;
410
375
411
376
it ( 'should inform subscribers of state changes as a result of applying patches' , ( ) => {
412
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
377
+ const messenger = getCountMessenger ( ) ;
413
378
const controller = new CountController ( {
414
- messenger : getCountMessenger ( messenger ) ,
379
+ messenger,
415
380
name : 'CountController' ,
416
381
state : { count : 0 } ,
417
382
metadata : countControllerStateMetadata ,
@@ -438,9 +403,9 @@ describe('BaseController', () => {
438
403
} ) ;
439
404
440
405
it ( 'should inform subscribers of state changes' , ( ) => {
441
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
406
+ const messenger = getCountMessenger ( ) ;
442
407
const controller = new CountController ( {
443
- messenger : getCountMessenger ( messenger ) ,
408
+ messenger,
444
409
name : 'CountController' ,
445
410
state : { count : 0 } ,
446
411
metadata : countControllerStateMetadata ,
@@ -467,9 +432,9 @@ describe('BaseController', () => {
467
432
} ) ;
468
433
469
434
it ( 'should notify a subscriber with a selector of state changes' , ( ) => {
470
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
435
+ const messenger = getCountMessenger ( ) ;
471
436
const controller = new CountController ( {
472
- messenger : getCountMessenger ( messenger ) ,
437
+ messenger,
473
438
name : 'CountController' ,
474
439
state : { count : 0 } ,
475
440
metadata : countControllerStateMetadata ,
@@ -493,9 +458,9 @@ describe('BaseController', () => {
493
458
} ) ;
494
459
495
460
it ( 'should not inform a subscriber of state changes if the selected value is unchanged' , ( ) => {
496
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
461
+ const messenger = getCountMessenger ( ) ;
497
462
const controller = new CountController ( {
498
- messenger : getCountMessenger ( messenger ) ,
463
+ messenger,
499
464
name : 'CountController' ,
500
465
state : { count : 0 } ,
501
466
metadata : countControllerStateMetadata ,
@@ -519,9 +484,9 @@ describe('BaseController', () => {
519
484
} ) ;
520
485
521
486
it ( 'should inform a subscriber of each state change once even after multiple subscriptions' , ( ) => {
522
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
487
+ const messenger = getCountMessenger ( ) ;
523
488
const controller = new CountController ( {
524
- messenger : getCountMessenger ( messenger ) ,
489
+ messenger,
525
490
name : 'CountController' ,
526
491
state : { count : 0 } ,
527
492
metadata : countControllerStateMetadata ,
@@ -543,9 +508,9 @@ describe('BaseController', () => {
543
508
} ) ;
544
509
545
510
it ( 'should no longer inform a subscriber about state changes after unsubscribing' , ( ) => {
546
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
511
+ const messenger = getCountMessenger ( ) ;
547
512
const controller = new CountController ( {
548
- messenger : getCountMessenger ( messenger ) ,
513
+ messenger,
549
514
name : 'CountController' ,
550
515
state : { count : 0 } ,
551
516
metadata : countControllerStateMetadata ,
@@ -562,9 +527,9 @@ describe('BaseController', () => {
562
527
} ) ;
563
528
564
529
it ( 'should no longer inform a subscriber about state changes after unsubscribing once, even if they subscribed many times' , ( ) => {
565
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
530
+ const messenger = getCountMessenger ( ) ;
566
531
const controller = new CountController ( {
567
- messenger : getCountMessenger ( messenger ) ,
532
+ messenger,
568
533
name : 'CountController' ,
569
534
state : { count : 0 } ,
570
535
metadata : countControllerStateMetadata ,
@@ -582,9 +547,9 @@ describe('BaseController', () => {
582
547
} ) ;
583
548
584
549
it ( 'should throw when unsubscribing listener who was never subscribed' , ( ) => {
585
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
550
+ const messenger = getCountMessenger ( ) ;
586
551
new CountController ( {
587
- messenger : getCountMessenger ( messenger ) ,
552
+ messenger,
588
553
name : 'CountController' ,
589
554
state : { count : 0 } ,
590
555
metadata : countControllerStateMetadata ,
@@ -597,9 +562,9 @@ describe('BaseController', () => {
597
562
} ) ;
598
563
599
564
it ( 'should no longer update subscribers after being destroyed' , ( ) => {
600
- const messenger = new Messenger < never , CountControllerEvent > ( ) ;
565
+ const messenger = getCountMessenger ( ) ;
601
566
const controller = new CountController ( {
602
- messenger : getCountMessenger ( messenger ) ,
567
+ messenger,
603
568
name : 'CountController' ,
604
569
state : { count : 0 } ,
605
570
metadata : countControllerStateMetadata ,
@@ -985,14 +950,16 @@ describe('getPersistentState', () => {
985
950
type VisitorControllerState = {
986
951
visitors : string [ ] ;
987
952
} ;
988
- type VisitorControllerAction = {
953
+ type VisitorControllerClear = {
989
954
type : `${typeof visitorName } :clear`;
990
955
handler : ( ) => void ;
991
956
} ;
992
- type VisitorControllerEvent = {
957
+ type VisitorControllerStateChange = {
993
958
type : `${typeof visitorName } :stateChange`;
994
959
payload : [ VisitorControllerState , Patch [ ] ] ;
995
960
} ;
961
+ type VisitorControllerActions = VisitorControllerClear ;
962
+ type VisitorControllerEvents = VisitorControllerStateChange ;
996
963
997
964
const visitorControllerStateMetadata = {
998
965
visitors : {
@@ -1001,12 +968,10 @@ describe('getPersistentState', () => {
1001
968
} ,
1002
969
} ;
1003
970
1004
- type VisitorMessenger = RestrictedMessenger <
1005
- typeof visitorName ,
1006
- VisitorControllerAction | VisitorOverflowControllerAction ,
1007
- VisitorControllerEvent | VisitorOverflowControllerEvent ,
1008
- never ,
1009
- never
971
+ type VisitorMessenger = Messenger <
972
+ VisitorControllerActions ,
973
+ VisitorControllerEvents ,
974
+ typeof visitorName
1010
975
> ;
1011
976
class VisitorController extends BaseController <
1012
977
typeof visitorName ,
@@ -1049,14 +1014,20 @@ describe('getPersistentState', () => {
1049
1014
type VisitorOverflowControllerState = {
1050
1015
maxVisitors : number ;
1051
1016
} ;
1052
- type VisitorOverflowControllerAction = {
1017
+ type VisitorOverflowControllerUpdateMax = {
1053
1018
type : `${typeof visitorOverflowName } :updateMax`;
1054
1019
handler : ( max : number ) => void ;
1055
1020
} ;
1056
- type VisitorOverflowControllerEvent = {
1021
+ type VisitorOverflowControllerStateChange = {
1057
1022
type : `${typeof visitorOverflowName } :stateChange`;
1058
1023
payload : [ VisitorOverflowControllerState , Patch [ ] ] ;
1059
1024
} ;
1025
+ type VisitorOverflowControllerActions = VisitorOverflowControllerUpdateMax ;
1026
+ type VisitorOverflowControllerEvents = VisitorOverflowControllerStateChange ;
1027
+
1028
+ type VisitorOverflowControllerDelegatedActions = VisitorControllerClear ;
1029
+ type VisitorOverflowControllerDelegatedEvents =
1030
+ VisitorControllerStateChange ;
1060
1031
1061
1032
const visitorOverflowControllerMetadata = {
1062
1033
maxVisitors : {
@@ -1065,12 +1036,12 @@ describe('getPersistentState', () => {
1065
1036
} ,
1066
1037
} ;
1067
1038
1068
- type VisitorOverflowMessenger = RestrictedMessenger <
1069
- typeof visitorOverflowName ,
1070
- VisitorControllerAction | VisitorOverflowControllerAction ,
1071
- VisitorControllerEvent | VisitorOverflowControllerEvent ,
1072
- `${ typeof visitorName } :clear` ,
1073
- `${ typeof visitorName } :stateChange`
1039
+ type VisitorOverflowMessenger = Messenger <
1040
+ | VisitorOverflowControllerActions
1041
+ | VisitorOverflowControllerDelegatedActions ,
1042
+ | VisitorOverflowControllerEvents
1043
+ | VisitorOverflowControllerDelegatedEvents ,
1044
+ typeof visitorOverflowName
1074
1045
> ;
1075
1046
1076
1047
class VisitorOverflowController extends BaseController <
@@ -1116,21 +1087,43 @@ describe('getPersistentState', () => {
1116
1087
1117
1088
it ( 'should allow messaging between controllers' , ( ) => {
1118
1089
const messenger = new Messenger <
1119
- VisitorControllerAction | VisitorOverflowControllerAction ,
1120
- VisitorControllerEvent | VisitorOverflowControllerEvent
1121
- > ( ) ;
1122
- const visitorControllerMessenger = messenger . getRestricted ( {
1123
- name : visitorName ,
1124
- allowedActions : [ ] ,
1125
- allowedEvents : [ ] ,
1090
+ VisitorControllerActions | VisitorOverflowControllerActions ,
1091
+ VisitorControllerEvents | VisitorOverflowControllerEvents ,
1092
+ 'Global'
1093
+ > ( { namespace : 'Global' } ) ;
1094
+ const visitorControllerMessenger = new Messenger <
1095
+ VisitorControllerActions ,
1096
+ VisitorControllerEvents ,
1097
+ typeof visitorName
1098
+ > ( {
1099
+ namespace : visitorName ,
1100
+ } ) ;
1101
+ visitorControllerMessenger . delegate ( {
1102
+ actions : [ 'VisitorController:clear' ] ,
1103
+ events : [ 'VisitorController:stateChange' ] ,
1104
+ messenger,
1126
1105
} ) ;
1127
1106
const visitorController = new VisitorController (
1128
1107
visitorControllerMessenger ,
1129
1108
) ;
1130
- const visitorOverflowControllerMessenger = messenger . getRestricted ( {
1131
- name : visitorOverflowName ,
1132
- allowedActions : [ 'VisitorController:clear' ] ,
1133
- allowedEvents : [ 'VisitorController:stateChange' ] ,
1109
+ const visitorOverflowControllerMessenger = new Messenger <
1110
+ | VisitorOverflowControllerActions
1111
+ | VisitorOverflowControllerDelegatedActions ,
1112
+ | VisitorOverflowControllerEvents
1113
+ | VisitorOverflowControllerDelegatedEvents ,
1114
+ typeof visitorOverflowName
1115
+ > ( {
1116
+ namespace : visitorOverflowName ,
1117
+ } ) ;
1118
+ visitorOverflowControllerMessenger . delegate ( {
1119
+ actions : [ 'VisitorOverflowController:updateMax' ] ,
1120
+ events : [ 'VisitorOverflowController:stateChange' ] ,
1121
+ messenger,
1122
+ } ) ;
1123
+ messenger . delegate ( {
1124
+ actions : [ 'VisitorController:clear' ] ,
1125
+ events : [ 'VisitorController:stateChange' ] ,
1126
+ messenger : visitorOverflowControllerMessenger ,
1134
1127
} ) ;
1135
1128
const visitorOverflowController = new VisitorOverflowController (
1136
1129
visitorOverflowControllerMessenger ,
0 commit comments