1- import { Event , JsonRpcServer } from '@theia/core' ;
1+ import { ApplicationError , Event , JsonRpcServer , nls } from '@theia/core' ;
22import {
33 PluggableMonitorSettings ,
44 MonitorSettings ,
@@ -46,7 +46,7 @@ export interface PluggableMonitorSetting {
4646 readonly id : string ;
4747 // A human-readable label of the setting (to be displayed on the GUI)
4848 readonly label : string ;
49- // The setting type (at the moment only "enum" is avaiable )
49+ // The setting type (at the moment only "enum" is available )
5050 readonly type : string ;
5151 // The values allowed on "enum" types
5252 readonly values : string [ ] ;
@@ -72,24 +72,158 @@ export namespace Monitor {
7272 } ;
7373}
7474
75- export interface Status { }
76- export type OK = Status ;
77- export interface ErrorStatus extends Status {
78- readonly message : string ;
75+ export const MonitorErrorCodes = {
76+ ConnectionFailed : 6001 ,
77+ NotConnected : 6002 ,
78+ AlreadyConnected : 6003 ,
79+ MissingConfiguration : 6004 ,
80+ UploadInProgress : 6005 ,
81+ } as const ;
82+
83+ export const ConnectionFailedError = createMonitorError (
84+ MonitorErrorCodes . ConnectionFailed
85+ ) ;
86+ export const NotConnectedError = createMonitorError (
87+ MonitorErrorCodes . NotConnected
88+ ) ;
89+ export const AlreadyConnectedError = createMonitorError (
90+ MonitorErrorCodes . AlreadyConnected
91+ ) ;
92+ export const MissingConfigurationError = createMonitorError (
93+ MonitorErrorCodes . MissingConfiguration
94+ ) ;
95+ export const UploadInProgressError = createMonitorError (
96+ MonitorErrorCodes . UploadInProgress
97+ ) ;
98+
99+ export function createConnectionFailedError (
100+ port : Port ,
101+ details ?: string
102+ ) : ApplicationError < number , PortDescriptor > {
103+ const { protocol, protocolLabel, address, addressLabel } = port ;
104+ return ConnectionFailedError (
105+ connectionFailedErrorLabel ( addressLabel , protocolLabel , details ) ,
106+ { protocol, address }
107+ ) ;
79108}
80- export namespace Status {
81- export function isOK ( status : Status & { message ?: string } ) : status is OK {
82- return ! ! status && typeof status . message !== 'string' ;
83- }
84- export const OK : OK = { } ;
85- export const NOT_CONNECTED : ErrorStatus = { message : 'Not connected.' } ;
86- export const ALREADY_CONNECTED : ErrorStatus = {
87- message : 'Already connected.' ,
88- } ;
89- export const CONFIG_MISSING : ErrorStatus = {
90- message : 'Serial Config missing.' ,
91- } ;
92- export const UPLOAD_IN_PROGRESS : ErrorStatus = {
93- message : 'Upload in progress.' ,
94- } ;
109+
110+ export function createNotConnectedError (
111+ port : Port
112+ ) : ApplicationError < number , PortDescriptor > {
113+ const { protocol, protocolLabel, address, addressLabel } = port ;
114+ return NotConnectedError (
115+ notConnectedErrorLabel ( addressLabel , protocolLabel ) ,
116+ { protocol, address }
117+ ) ;
118+ }
119+
120+ export function createAlreadyConnectedError (
121+ port : Port
122+ ) : ApplicationError < number , PortDescriptor > {
123+ const { protocol, protocolLabel, address, addressLabel } = port ;
124+ return AlreadyConnectedError (
125+ alreadyConnectedErrorLabel ( addressLabel , protocolLabel ) ,
126+ { protocol, address }
127+ ) ;
128+ }
129+
130+ export function createMissingConfigurationError (
131+ port : Port
132+ ) : ApplicationError < number , PortDescriptor > {
133+ const { protocol, protocolLabel, address, addressLabel } = port ;
134+ return MissingConfigurationError (
135+ missingConfigurationErrorLabel ( addressLabel , protocolLabel ) ,
136+ { protocol, address }
137+ ) ;
138+ }
139+
140+ export function createUploadInProgressError (
141+ port : Port
142+ ) : ApplicationError < number , PortDescriptor > {
143+ const { protocol, protocolLabel, address, addressLabel } = port ;
144+ return UploadInProgressError (
145+ uploadInProgressErrorLabel ( addressLabel , protocolLabel ) ,
146+ { protocol, address }
147+ ) ;
148+ }
149+
150+ /**
151+ * Bare minimum representation of a port. Supports neither UI labels nor properties.
152+ */
153+ export interface PortDescriptor {
154+ readonly protocol : string ;
155+ readonly address : string ;
156+ }
157+
158+ export function createPortDescriptor ( port : Port ) : PortDescriptor {
159+ const { protocol, address } = port ;
160+ return { protocol, address } ;
161+ }
162+
163+ function createMonitorError (
164+ code : number
165+ ) : ApplicationError . Constructor < number , PortDescriptor > {
166+ return ApplicationError . declare (
167+ code ,
168+ ( message : string , data : PortDescriptor ) => ( { data, message } )
169+ ) ;
170+ }
171+
172+ export function connectionFailedErrorLabel (
173+ addressLabel : string ,
174+ protocolLabel : string ,
175+ details ?: string
176+ ) : string {
177+ const formattedDetails = details ? `: ${ details } .` : '.' ;
178+ return nls . localize (
179+ 'arduino/monitor/connectionFailedError' ,
180+ 'Could not connect to {0} {1} port{2}' ,
181+ addressLabel ,
182+ protocolLabel ,
183+ formattedDetails
184+ ) ;
185+ }
186+ export function notConnectedErrorLabel (
187+ addressLabel : string ,
188+ protocolLabel : string
189+ ) : string {
190+ return nls . localize (
191+ 'arduino/monitor/notConnectedError' ,
192+ 'Not connected to {0} {1} port.' ,
193+ addressLabel ,
194+ protocolLabel
195+ ) ;
196+ }
197+ export function missingConfigurationErrorLabel (
198+ addressLabel : string ,
199+ protocolLabel : string
200+ ) : string {
201+ return nls . localize (
202+ 'arduino/monitor/missingConfigurationError' ,
203+ 'Could not connect to {0} {1} port. The monitor configuration is missing.' ,
204+ addressLabel ,
205+ protocolLabel
206+ ) ;
207+ }
208+ export function uploadInProgressErrorLabel (
209+ addressLabel : string ,
210+ protocolLabel : string
211+ ) : string {
212+ return nls . localize (
213+ 'arduino/monitor/uploadInProgressError' ,
214+ 'Could not connect to {0} {1} port. An upload is in progress.' ,
215+ addressLabel ,
216+ protocolLabel
217+ ) ;
218+ }
219+ export function alreadyConnectedErrorLabel (
220+ addressLabel : string ,
221+ protocolLabel : string
222+ ) : string {
223+ return nls . localize (
224+ 'arduino/monitor/alreadyConnectedError' ,
225+ 'Could not connect to {0} {1} port. Already connected.' ,
226+ addressLabel ,
227+ protocolLabel
228+ ) ;
95229}
0 commit comments