@finsemble/finsemble-core 6.1.4 → 6.1.5

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.
Files changed (107) hide show
  1. package/.mocharc.js +12 -12
  2. package/.nycrc.json +7 -7
  3. package/README.md +24 -24
  4. package/assets/fonts/LICENSE.txt +202 -202
  5. package/configs/core/config.json +214 -214
  6. package/configs/core/securityPolicies.json +24 -24
  7. package/configs/core/services.json +233 -233
  8. package/configs/schemas/README.md +1 -1
  9. package/configs/schemas/fileBasedSchemas/appdConfigFile.schema.json +5 -5
  10. package/configs/schemas/fileBasedSchemas/applicationConfigFile.schema.json +5 -5
  11. package/configs/schemas/fileBasedSchemas/componentsFile.schema.json +5 -5
  12. package/configs/schemas/fileBasedSchemas/coreConfigFile.schema.json +5 -5
  13. package/configs/schemas/fileBasedSchemas/dashbarFile.schema.json +5 -5
  14. package/configs/schemas/fileBasedSchemas/manifestFile.schema.json +5 -5
  15. package/configs/schemas/fileBasedSchemas/securityPoliciesFile.schema.json +5 -5
  16. package/configs/schemas/fileBasedSchemas/servicesFile.schema.json +5 -5
  17. package/configs/schemas/fileBasedSchemas/uiComponentsFile.schema.json +5 -5
  18. package/configs/schemas/fileBasedSchemas/workspacesFile.schema.json +5 -5
  19. package/configs/schemas/finsemble.schema.json +4006 -4006
  20. package/dist/FSBL.js +1 -1
  21. package/dist/clients/Interop/FinsembleDesktopAgent.md +154 -154
  22. package/dist/clients/Interop/tsconfig.json +7 -7
  23. package/dist/clients/Startup/README.md +28 -28
  24. package/dist/clients/dragAndDropAssets/dragAndDropScrim.css +54 -54
  25. package/dist/clients/dragAndDropAssets/ff-delete-circle.svg +10 -10
  26. package/dist/clients/dragAndDropAssets/ff-share.svg +13 -13
  27. package/dist/components/system/notification/ff-close.svg +14 -14
  28. package/dist/components/system/notification/finsemble_logo_white.svg +15 -15
  29. package/dist/components/system/notification/notification.html +155 -155
  30. package/dist/configs/core/config.json +214 -214
  31. package/dist/configs/core/securityPolicies.json +24 -24
  32. package/dist/configs/core/services.json +233 -233
  33. package/dist/configs/schemas/README.md +1 -1
  34. package/dist/configs/schemas/fileBasedSchemas/appdConfigFile.schema.json +5 -5
  35. package/dist/configs/schemas/fileBasedSchemas/applicationConfigFile.schema.json +5 -5
  36. package/dist/configs/schemas/fileBasedSchemas/componentsFile.schema.json +5 -5
  37. package/dist/configs/schemas/fileBasedSchemas/coreConfigFile.schema.json +5 -5
  38. package/dist/configs/schemas/fileBasedSchemas/dashbarFile.schema.json +5 -5
  39. package/dist/configs/schemas/fileBasedSchemas/manifestFile.schema.json +5 -5
  40. package/dist/configs/schemas/fileBasedSchemas/securityPoliciesFile.schema.json +5 -5
  41. package/dist/configs/schemas/fileBasedSchemas/servicesFile.schema.json +5 -5
  42. package/dist/configs/schemas/fileBasedSchemas/uiComponentsFile.schema.json +5 -5
  43. package/dist/configs/schemas/fileBasedSchemas/workspacesFile.schema.json +5 -5
  44. package/dist/configs/schemas/finsemble.schema.json +4006 -4006
  45. package/dist/finsemble-javascript-adapter.js +1 -1
  46. package/dist/index.js +1 -1
  47. package/dist/javascript-adapter-example-app.html +37 -37
  48. package/dist/services/Interop/DevTools.tsx +71 -71
  49. package/dist/services/Interop/Interop.html +15 -15
  50. package/dist/services/Interop/InteropService.js +1 -1
  51. package/dist/services/Interop/InteropService.md +148 -148
  52. package/dist/services/Interop/InteropServiceUI.css +12 -12
  53. package/dist/services/Interop/InteropServiceUI.js +1 -1
  54. package/dist/services/Interop/InteropServiceUI.tsx +39 -39
  55. package/dist/services/Interop/devtoolsEnhancer.tsx +63 -63
  56. package/dist/services/Interop/tsconfig.json +7 -7
  57. package/dist/services/ServiceTemplate.md +39 -39
  58. package/dist/services/assimilation/assimilation.html +18 -18
  59. package/dist/services/assimilation/assimilationService.js +1 -1
  60. package/dist/services/authentication/authentication.html +17 -17
  61. package/dist/services/authentication/authenticationService.js +1 -1
  62. package/dist/services/authentication/dialogSignOn.html +199 -199
  63. package/dist/services/config/config.html +17 -17
  64. package/dist/services/config/configService.js +1 -1
  65. package/dist/services/dataStore/dataStore.html +18 -18
  66. package/dist/services/dataStore/dataStoreService.js +1 -1
  67. package/dist/services/hotkeys/hotkeys.html +18 -18
  68. package/dist/services/hotkeys/hotkeysService.js +1 -1
  69. package/dist/services/linker/linker.html +18 -18
  70. package/dist/services/linker/linkerService.js +1 -1
  71. package/dist/services/logger/logger.html +18 -18
  72. package/dist/services/logger/loggerService.js +1 -1
  73. package/dist/services/logger/loggerUI.js +1 -1
  74. package/dist/services/logger/src/app.css +860 -860
  75. package/dist/services/logger/src/components/Views/Logs/rightPanel/consoleView.css +379 -379
  76. package/dist/services/logger/src/components/objectInspector/README.md +1 -1
  77. package/dist/services/notification/notification.html +11 -11
  78. package/dist/services/notification/notificationService.js +1 -1
  79. package/dist/services/preferences/preferencesService.js +1 -1
  80. package/dist/services/router/router.html +18 -18
  81. package/dist/services/router/routerService.js +1 -1
  82. package/dist/services/search/search.html +17 -17
  83. package/dist/services/search/searchService.js +1 -1
  84. package/dist/services/storage/adapters/instrumentedIndexedDBAdapter.js +1 -1
  85. package/dist/services/storage/storage.html +17 -17
  86. package/dist/services/storage/storageService.js +1 -1
  87. package/dist/services/systemManager/bootTasks/testTasks/_aReadMe.md +119 -119
  88. package/dist/services/systemManager/systemManager.html +24 -24
  89. package/dist/services/systemManager/systemManager.js +1 -1
  90. package/dist/services/window/Docking/GroupRequirements.md +18 -18
  91. package/dist/services/window/Splintering/SplinterAgentSlave.html +13 -13
  92. package/dist/services/window/Splintering/SplinterAgentSlave.js +1 -1
  93. package/dist/services/window/Splintering/Splintering.md +118 -118
  94. package/dist/services/window/StackedWindowManager/StackRequirements.md +23 -23
  95. package/dist/services/window/WindowBehaviorRequirements.md +25 -25
  96. package/dist/services/window/windowService.html +10 -10
  97. package/dist/services/window/windowService.js +1 -1
  98. package/dist/services/workspace/dev-docs/importExportFormat.md +51 -51
  99. package/dist/services/workspace/dev-docs/remotelyPersistedWorkspaces.md +62 -62
  100. package/dist/services/workspace/workspace.html +18 -18
  101. package/dist/services/workspace/workspace.schema.json +48 -48
  102. package/dist/services/workspace/workspaceService.js +1 -1
  103. package/package.json +1 -1
  104. package/tsconfig.json +23 -23
  105. package/types/index.d.ts +40 -55
  106. package/types/index.tsbuildinfo +1 -1
  107. package/types.tsconfig.json +15 -15
@@ -1,148 +1,148 @@
1
- This is placeholder for documentation to come. These are notes from early discussions.
2
-
3
- /\*\*
4
-
5
- - Straw Man : How does SelectConnect work?
6
- -
7
- - Every incoming InteropMessage converts to a redux action.
8
- -
9
- - Non-broadcast actions (e.g. getSystemChannels, findIntent, joinChannel etc) are processed by reducers which update state and deliver (thunk) replies to the client
10
- -
11
- - Broadcast actions run the SelectConnect algorithm. The algorithm results in an array of:
12
- - (1) destinations uuids
13
- - (2) the message (context and/or intent) for each destination, possibly transformed
14
- -
15
- - The algorithm is a loop.
16
- - On start:
17
- - (1) The list of prospective destinations is initialized from the store (e.g. which uuids are listening for this message)
18
- -
19
- - Each iteration:
20
- - Begins with the following data:
21
- - (a) the original message and meta data (e.g. intent type, context type, origination)
22
- - (b) a list of all rules that have not yet been triggered
23
- - (c) the current list of prospective destinations
24
- -
25
- - Logic:
26
- - (i) Process each rule (in array order from config)
27
- - Possibilities are:
28
- - (A) `filter`: Eliminate or add destinations (e.g. from=* filter=#Linker)
29
- - (B) `fork` : add destinations (e.g. to=#Chat fork=#Salesforce.Activity)
30
- - (C) `selectConnect` : replace destinations (e.g. to=#Chat selectConnect=#Symphony)
31
- - (ii) Eliminate the rule (to avoid recursion and loops)
32
- - (iii) Exit loop when no rules are triggered during an iteration
33
- -
34
- - When complete:
35
- - (a) Eliminate any destinations that don't have a valid handler (dead ends)
36
- - (b) Run auto-translation algorithm
37
- - (c) Update the store to reflect new client state
38
- - (d) Deliver messages using asynchronous thunks
39
- -
40
- - TBD:
41
- - Do rules need to make a destinction between "from":"to" and "origination":"destination"?
42
- - e.g. to prevent skirting filters by redirection
43
- - How to prevent broadcast storms?
44
- - Not just internal to the resolver, but if receipt of a message by a destination triggers a broadcast, and vice versa
45
- - Stitchview ran into this pretty quickly and implemented a timeout, to silently drop any messages of the same contextType if received within x milliseconds
46
- - Translation
47
- - What do rules look like? How do apps or system channels register translations?
48
- \*/
49
-
50
- /\*\*
51
-
52
- - System channels:
53
- -
54
- - By convention, system channels begin with #. Some system channels like #Linker are built in.
55
- - Other system channels, such as #Symphony, would be registered via config. Registering via config prevents
56
- - other apps from hijacking those channel names.
57
- -
58
- - System channels are not "peer" based. When a message is sent to a system channel, only the system channel
59
- - handler receives that message (not any other listeners).
60
- -
61
- - System channels may support a syntax, such as #Symphony@tradebot or #Excel@G6F4.
62
- -
63
- - TBD: how to communicate that syntax to the system app with a given FDC3 message
64
- - TBD: how the system channel can communicate back to a specific app
65
- - ? implicitly create a channel for every uuid
66
- - ? how would the system channel be informed
67
- - ? how would the system channel know when to remove uuid references
68
- - ? is it even necessary for system channels to communicate back? Maybe data-driven intents is good enough
69
- -
70
- - Private channels:
71
- -
72
- - Apps can specify private channels via config. A private channel essentially establishes a #Fence (see below) around
73
- - a well known channel. For instance, a suite of related apps might need a way to communicate amongst themselves
74
- - without eavesdropped or imposters.
75
- - ? Could this be accomplished just as easily with a #Fence rule?
76
- -
77
- - Rules Examples:
78
- -
79
- - When an app (e.g. telephony) receives a call, launch an app called "Screenpop" (context is passed automatically)
80
- - intent=call selectConnect=#Launch@Screenpop
81
- -
82
- - When any intent is sent to the #Chat channel, also send it to a Salesforce driver that creates Activity records, and if possible transform the data into a SalesforceRecord
83
- - intent=\* to=#Chat fork=#Salesforce.Activity #transform=#Salesforce.Record
84
- -
85
- - Possible plugins/system channels:
86
- -
87
- - #Linker - Adds or removes destinations based on linkage (probably a filter, maybe a type of #Fence)
88
- - `from=* filter=#Linker`
89
- -
90
- - #DragNDrop - Removes destinations but stores the data so that it can be emitted when the user drags between windows
91
- - `from=Chart contextType=Symbol fork=#DragNDrop`
92
- -
93
- - #Launch@Chart - Launches apps, passing the contextType/intent to the launched app
94
- - `intent=Screenpop selectConnect=#Launch@Chart@SalesforceActivity`
95
- -
96
- - #Logger@info - Sends the info to a log (probably a fork)
97
- - `from=ProjectEditor intent=Error fork=#Logger@error`
98
- -
99
- - #Workspace - Saves info in a workspace, and then when the workspace is relaunched, emits that info back to the app
100
- - `contextType=symbol fork=#Workspace`
101
- -
102
- - #Fence - Prevents messages from going to apps that aren't in the fence (like a composite but maybe other logical groupings)
103
- - `from=Chart contextType=symbol selectConnect=#Fence` - Keeps a symbol broadcast from escaping the fence (but still lets symbol into the fence from outside)
104
- - `to=Chart contextType=date filter=#Fence` - Prevents a date broadcast from entering the fence
105
- -
106
- - #Trash - /dev/null for messages
107
- - `from=Chart to=Grid selectConnect=#Trash`
108
- -
109
- - #ODAC - Open Data Access Control. Filter messages throuh an access control list (ACL)
110
- - `from=CRD filter=#ODAC` - Prevents delivery to any destination not in the ACL
111
- -
112
- - #Notification - Could be used for sending notifications, or to set rules for data that is delivered by a notification.
113
- - Notifications should probably be genericized to publish intent/context when the user clicks on them. So in a sense
114
- - a notification is like #DragNDrop, where broadcast is deferred until the user clicks on something
115
- - `intent=Trade contextType=FixedIncome selectConnect=#Notification#Bob`
116
- - `intent=Trade from=#Notification selectConnect=#Launch@FixedIncomeApp`
117
- -
118
- - #Search - Most useful with a data-driven intent, could take the place of our search providers
119
- - Also, search results should be intents/contextTypes so that clicking on a result either triggers an action or a context switch
120
- - `from=#Search contextType=Link #Launch@Browser`
121
- -
122
- - #Chat@slackbot - Routes messages to and from a chat network. We might build plugins that work with symphony, slack and teams
123
- - `intent=Trade selectConnect=#Chat#tradechannel`
124
- -
125
- - #ChatCreator - Our own pop-up app that allows a user to create a chat message to be sent to #Chat (like our sales demo)
126
- - Maybe this just listens for a specific intent...
127
- - `intent=Trade selectConnect=#Intent@CreateChat`
128
- -
129
- - #CRM@activity - Send data to the CRM system. We could build plugins that work with Salesforce or other systems
130
- - `to=#Chat contextType=Trade fork=#CRM@activity` - Log an activity record every time we send a trade via chat
131
- -
132
- - #Symphony, #Salesforce - Maybe instead of generic #Chat, #CRM we would have specific channels for specific 3rd parties
133
- -
134
- - #Bloomberg@SRCH - Runs a bloomberg command
135
- - `contextType=Symbol to=#Search fork=#Bloomberg@SRCH` - Sends all searches also to Bloomberg
136
- -
137
- - #Excel@MySheet!A1\*10 - Sends data to a specific cell in Excel
138
- - `contextType=Symbol fork=#Excel@MySheet!A1*10`
139
- -
140
- - #Intent@Share - Convert a context broadcast into an intent
141
- - `from=Chart contextType=Symbol selectConnect=#Intent:Quote` - Whenever the chart changes symbols, ensure that an app is available that shows a Quote for that same symbol
142
- - `intent=Trade selectConnect=#Intent@Chat` - If there's a chat tool that only accepts intents we can use conversion. Might require an automatic translation (e.g. stringify into a Chat envelope) \*/
143
-
144
- Obscure errors as the result of misuse of Immer
145
-
146
- Always call `current` if you need to pass a piece of store state outside of your reducer.
147
-
148
- TypeError: Cannot perform 'get' on a proxy that has been revoked TypeError: Cannot perform 'isExtensible' on a proxy that has been revoked TypeError: Cannot read property 'Symbol(nodejs.util.inspect.custom)' of null
1
+ This is placeholder for documentation to come. These are notes from early discussions.
2
+
3
+ /\*\*
4
+
5
+ - Straw Man : How does SelectConnect work?
6
+ -
7
+ - Every incoming InteropMessage converts to a redux action.
8
+ -
9
+ - Non-broadcast actions (e.g. getSystemChannels, findIntent, joinChannel etc) are processed by reducers which update state and deliver (thunk) replies to the client
10
+ -
11
+ - Broadcast actions run the SelectConnect algorithm. The algorithm results in an array of:
12
+ - (1) destinations uuids
13
+ - (2) the message (context and/or intent) for each destination, possibly transformed
14
+ -
15
+ - The algorithm is a loop.
16
+ - On start:
17
+ - (1) The list of prospective destinations is initialized from the store (e.g. which uuids are listening for this message)
18
+ -
19
+ - Each iteration:
20
+ - Begins with the following data:
21
+ - (a) the original message and meta data (e.g. intent type, context type, origination)
22
+ - (b) a list of all rules that have not yet been triggered
23
+ - (c) the current list of prospective destinations
24
+ -
25
+ - Logic:
26
+ - (i) Process each rule (in array order from config)
27
+ - Possibilities are:
28
+ - (A) `filter`: Eliminate or add destinations (e.g. from=* filter=#Linker)
29
+ - (B) `fork` : add destinations (e.g. to=#Chat fork=#Salesforce.Activity)
30
+ - (C) `selectConnect` : replace destinations (e.g. to=#Chat selectConnect=#Symphony)
31
+ - (ii) Eliminate the rule (to avoid recursion and loops)
32
+ - (iii) Exit loop when no rules are triggered during an iteration
33
+ -
34
+ - When complete:
35
+ - (a) Eliminate any destinations that don't have a valid handler (dead ends)
36
+ - (b) Run auto-translation algorithm
37
+ - (c) Update the store to reflect new client state
38
+ - (d) Deliver messages using asynchronous thunks
39
+ -
40
+ - TBD:
41
+ - Do rules need to make a destinction between "from":"to" and "origination":"destination"?
42
+ - e.g. to prevent skirting filters by redirection
43
+ - How to prevent broadcast storms?
44
+ - Not just internal to the resolver, but if receipt of a message by a destination triggers a broadcast, and vice versa
45
+ - Stitchview ran into this pretty quickly and implemented a timeout, to silently drop any messages of the same contextType if received within x milliseconds
46
+ - Translation
47
+ - What do rules look like? How do apps or system channels register translations?
48
+ \*/
49
+
50
+ /\*\*
51
+
52
+ - System channels:
53
+ -
54
+ - By convention, system channels begin with #. Some system channels like #Linker are built in.
55
+ - Other system channels, such as #Symphony, would be registered via config. Registering via config prevents
56
+ - other apps from hijacking those channel names.
57
+ -
58
+ - System channels are not "peer" based. When a message is sent to a system channel, only the system channel
59
+ - handler receives that message (not any other listeners).
60
+ -
61
+ - System channels may support a syntax, such as #Symphony@tradebot or #Excel@G6F4.
62
+ -
63
+ - TBD: how to communicate that syntax to the system app with a given FDC3 message
64
+ - TBD: how the system channel can communicate back to a specific app
65
+ - ? implicitly create a channel for every uuid
66
+ - ? how would the system channel be informed
67
+ - ? how would the system channel know when to remove uuid references
68
+ - ? is it even necessary for system channels to communicate back? Maybe data-driven intents is good enough
69
+ -
70
+ - Private channels:
71
+ -
72
+ - Apps can specify private channels via config. A private channel essentially establishes a #Fence (see below) around
73
+ - a well known channel. For instance, a suite of related apps might need a way to communicate amongst themselves
74
+ - without eavesdropped or imposters.
75
+ - ? Could this be accomplished just as easily with a #Fence rule?
76
+ -
77
+ - Rules Examples:
78
+ -
79
+ - When an app (e.g. telephony) receives a call, launch an app called "Screenpop" (context is passed automatically)
80
+ - intent=call selectConnect=#Launch@Screenpop
81
+ -
82
+ - When any intent is sent to the #Chat channel, also send it to a Salesforce driver that creates Activity records, and if possible transform the data into a SalesforceRecord
83
+ - intent=\* to=#Chat fork=#Salesforce.Activity #transform=#Salesforce.Record
84
+ -
85
+ - Possible plugins/system channels:
86
+ -
87
+ - #Linker - Adds or removes destinations based on linkage (probably a filter, maybe a type of #Fence)
88
+ - `from=* filter=#Linker`
89
+ -
90
+ - #DragNDrop - Removes destinations but stores the data so that it can be emitted when the user drags between windows
91
+ - `from=Chart contextType=Symbol fork=#DragNDrop`
92
+ -
93
+ - #Launch@Chart - Launches apps, passing the contextType/intent to the launched app
94
+ - `intent=Screenpop selectConnect=#Launch@Chart@SalesforceActivity`
95
+ -
96
+ - #Logger@info - Sends the info to a log (probably a fork)
97
+ - `from=ProjectEditor intent=Error fork=#Logger@error`
98
+ -
99
+ - #Workspace - Saves info in a workspace, and then when the workspace is relaunched, emits that info back to the app
100
+ - `contextType=symbol fork=#Workspace`
101
+ -
102
+ - #Fence - Prevents messages from going to apps that aren't in the fence (like a composite but maybe other logical groupings)
103
+ - `from=Chart contextType=symbol selectConnect=#Fence` - Keeps a symbol broadcast from escaping the fence (but still lets symbol into the fence from outside)
104
+ - `to=Chart contextType=date filter=#Fence` - Prevents a date broadcast from entering the fence
105
+ -
106
+ - #Trash - /dev/null for messages
107
+ - `from=Chart to=Grid selectConnect=#Trash`
108
+ -
109
+ - #ODAC - Open Data Access Control. Filter messages throuh an access control list (ACL)
110
+ - `from=CRD filter=#ODAC` - Prevents delivery to any destination not in the ACL
111
+ -
112
+ - #Notification - Could be used for sending notifications, or to set rules for data that is delivered by a notification.
113
+ - Notifications should probably be genericized to publish intent/context when the user clicks on them. So in a sense
114
+ - a notification is like #DragNDrop, where broadcast is deferred until the user clicks on something
115
+ - `intent=Trade contextType=FixedIncome selectConnect=#Notification#Bob`
116
+ - `intent=Trade from=#Notification selectConnect=#Launch@FixedIncomeApp`
117
+ -
118
+ - #Search - Most useful with a data-driven intent, could take the place of our search providers
119
+ - Also, search results should be intents/contextTypes so that clicking on a result either triggers an action or a context switch
120
+ - `from=#Search contextType=Link #Launch@Browser`
121
+ -
122
+ - #Chat@slackbot - Routes messages to and from a chat network. We might build plugins that work with symphony, slack and teams
123
+ - `intent=Trade selectConnect=#Chat#tradechannel`
124
+ -
125
+ - #ChatCreator - Our own pop-up app that allows a user to create a chat message to be sent to #Chat (like our sales demo)
126
+ - Maybe this just listens for a specific intent...
127
+ - `intent=Trade selectConnect=#Intent@CreateChat`
128
+ -
129
+ - #CRM@activity - Send data to the CRM system. We could build plugins that work with Salesforce or other systems
130
+ - `to=#Chat contextType=Trade fork=#CRM@activity` - Log an activity record every time we send a trade via chat
131
+ -
132
+ - #Symphony, #Salesforce - Maybe instead of generic #Chat, #CRM we would have specific channels for specific 3rd parties
133
+ -
134
+ - #Bloomberg@SRCH - Runs a bloomberg command
135
+ - `contextType=Symbol to=#Search fork=#Bloomberg@SRCH` - Sends all searches also to Bloomberg
136
+ -
137
+ - #Excel@MySheet!A1\*10 - Sends data to a specific cell in Excel
138
+ - `contextType=Symbol fork=#Excel@MySheet!A1*10`
139
+ -
140
+ - #Intent@Share - Convert a context broadcast into an intent
141
+ - `from=Chart contextType=Symbol selectConnect=#Intent:Quote` - Whenever the chart changes symbols, ensure that an app is available that shows a Quote for that same symbol
142
+ - `intent=Trade selectConnect=#Intent@Chat` - If there's a chat tool that only accepts intents we can use conversion. Might require an automatic translation (e.g. stringify into a Chat envelope) \*/
143
+
144
+ Obscure errors as the result of misuse of Immer
145
+
146
+ Always call `current` if you need to pass a piece of store state outside of your reducer.
147
+
148
+ TypeError: Cannot perform 'get' on a proxy that has been revoked TypeError: Cannot perform 'isExtensible' on a proxy that has been revoked TypeError: Cannot read property 'Symbol(nodejs.util.inspect.custom)' of null
@@ -1,12 +1,12 @@
1
- html,
2
- body,
3
- #InteropServiceUI-tsx {
4
- height: 100%;
5
- background-color: white;
6
- color: black;
7
- }
8
-
9
- .devTools {
10
- width: 100%;
11
- height: 99%;
12
- }
1
+ html,
2
+ body,
3
+ #InteropServiceUI-tsx {
4
+ height: 100%;
5
+ background-color: white;
6
+ color: black;
7
+ }
8
+
9
+ .devTools {
10
+ width: 100%;
11
+ height: 99%;
12
+ }