@sap-ux/odata-service-inquirer 0.3.10 → 0.4.1
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/dist/error-handler/error-handler.js +108 -109
- package/dist/i18n.js +12 -23
- package/dist/index.js +20 -33
- package/dist/prompts/datasources/cap-project/cap-helpers.js +87 -127
- package/dist/prompts/datasources/cap-project/questions.js +29 -42
- package/dist/prompts/datasources/cap-project/validators.js +9 -20
- package/dist/prompts/datasources/metadata-file/index.js +3 -12
- package/dist/prompts/datasources/metadata-file/validators.js +4 -13
- package/dist/prompts/datasources/service-url/connectionValidator.js +93 -111
- package/dist/prompts/datasources/service-url/questions.js +18 -27
- package/dist/prompts/datasources/service-url/validators.js +48 -60
- package/dist/prompts/logger-helper.js +1 -1
- package/dist/prompts/prompts.js +14 -29
- package/dist/types.js +3 -0
- package/dist/utils/prompt-state.js +2 -2
- package/package.json +9 -9
|
@@ -89,6 +89,105 @@ exports.ERROR_MAP = {
|
|
|
89
89
|
* This class will also log errors and provide help links for validation errors in some limited use cases.
|
|
90
90
|
*/
|
|
91
91
|
class ErrorHandler {
|
|
92
|
+
/** The last error message generated */
|
|
93
|
+
currentErrorMsg;
|
|
94
|
+
/** The last error message type generated if determined */
|
|
95
|
+
currentErrorType;
|
|
96
|
+
static _guidedAnswersEnabled;
|
|
97
|
+
static _logger;
|
|
98
|
+
// Get the required localized parameterized error message
|
|
99
|
+
// Note that these are general fallback end-user error messages.
|
|
100
|
+
// More specific error messages can be used at the point of error generation.
|
|
101
|
+
static _errorMsg = (error) => ({
|
|
102
|
+
[ERROR_TYPE.CERT]: (0, i18n_1.t)('errors.certificateError', { error }),
|
|
103
|
+
[ERROR_TYPE.CERT_EXPIRED]: (0, i18n_1.t)('errors.urlCertValidationError', { certErrorReason: (0, i18n_1.t)('texts.anExpiredCert') }),
|
|
104
|
+
[ERROR_TYPE.CERT_SELF_SIGNED]: (0, i18n_1.t)('errors.urlCertValidationError', {
|
|
105
|
+
certErrorReason: (0, i18n_1.t)('texts.aSelfSignedCert')
|
|
106
|
+
}),
|
|
107
|
+
[ERROR_TYPE.CERT_UKNOWN_OR_INVALID]: (0, i18n_1.t)('errors.urlCertValidationError', {
|
|
108
|
+
certErrorReason: (0, i18n_1.t)('texts.anUnknownOrInvalidCert')
|
|
109
|
+
}),
|
|
110
|
+
[ERROR_TYPE.CERT_SELF_SIGNED_CERT_IN_CHAIN]: (0, i18n_1.t)('errors.urlCertValidationError', {
|
|
111
|
+
certErrorReason: (0, i18n_1.t)('texts.anUntrustedRootCert')
|
|
112
|
+
}),
|
|
113
|
+
[ERROR_TYPE.AUTH]: (0, i18n_1.t)('errors.authenticationFailed', { error }),
|
|
114
|
+
[ERROR_TYPE.AUTH_TIMEOUT]: (0, i18n_1.t)('errors.authenticationTimeout'),
|
|
115
|
+
[ERROR_TYPE.INVALID_URL]: (0, i18n_1.t)('errors.invalidUrl'),
|
|
116
|
+
[ERROR_TYPE.CONNECTION]: (0, i18n_1.t)('errors.connectionError', {
|
|
117
|
+
error: error?.message || JSON.stringify(error)
|
|
118
|
+
}),
|
|
119
|
+
[ERROR_TYPE.UNKNOWN]: (0, i18n_1.t)('errors.unknownError', {
|
|
120
|
+
error: error?.message || JSON.stringify(error)
|
|
121
|
+
}),
|
|
122
|
+
[ERROR_TYPE.SERVICES_UNAVAILABLE]: (0, i18n_1.t)('errors.servicesUnavailable'),
|
|
123
|
+
[ERROR_TYPE.SERVICE_UNAVAILABLE]: (0, i18n_1.t)('errors.serviceUnavailable'),
|
|
124
|
+
[ERROR_TYPE.CATALOG_SERVICE_NOT_ACTIVE]: (0, i18n_1.t)('errors.catalogServiceNotActive'),
|
|
125
|
+
[ERROR_TYPE.INTERNAL_SERVER_ERROR]: (0, i18n_1.t)('errors.internalServerError', { error: error?.message }),
|
|
126
|
+
[ERROR_TYPE.NOT_FOUND]: (0, i18n_1.t)('errors.urlNotFound'),
|
|
127
|
+
[ERROR_TYPE.ODATA_URL_NOT_FOUND]: (0, i18n_1.t)('errors.odataServiceUrlNotFound'),
|
|
128
|
+
[ERROR_TYPE.BAD_GATEWAY]: (0, i18n_1.t)('errors.badGateway'),
|
|
129
|
+
[ERROR_TYPE.DESTINATION_UNAVAILABLE]: (0, i18n_1.t)('errors.destinationUnavailable'),
|
|
130
|
+
[ERROR_TYPE.DESTINATION_NOT_FOUND]: (0, i18n_1.t)('errors.destinationNotFound'),
|
|
131
|
+
[ERROR_TYPE.DESTINATION_MISCONFIGURED]: (0, i18n_1.t)('errors.destinationMisconfigured'),
|
|
132
|
+
[ERROR_TYPE.NO_V2_SERVICES]: (0, i18n_1.t)('errors.noServicesAvailable', { version: '2' }),
|
|
133
|
+
[ERROR_TYPE.NO_V4_SERVICES]: (0, i18n_1.t)('errors.noServicesAvailable', { version: '4' }),
|
|
134
|
+
[ERROR_TYPE.DESTINATION_BAD_GATEWAY_503]: (0, i18n_1.t)('errors.destinationUnavailable'),
|
|
135
|
+
[ERROR_TYPE.REDIRECT]: (0, i18n_1.t)('errors.redirectError'),
|
|
136
|
+
[ERROR_TYPE.NO_SUCH_HOST]: (0, i18n_1.t)('errors.noSuchHostError'),
|
|
137
|
+
[ERROR_TYPE.NO_ABAP_ENVS]: (0, i18n_1.t)('error.abapEnvsUnavailable')
|
|
138
|
+
});
|
|
139
|
+
/**
|
|
140
|
+
* Get the Guided Answers (help) node for the specified error type.
|
|
141
|
+
*
|
|
142
|
+
* @param errorType The error type for which a help node (help content id) may be returned
|
|
143
|
+
* @returns The Guided Answers node for the specified error type
|
|
144
|
+
*/
|
|
145
|
+
static getHelpNode = (errorType) => {
|
|
146
|
+
const errorToHelp = {
|
|
147
|
+
[ERROR_TYPE.SERVICES_UNAVAILABLE]: (0, btp_utils_1.isAppStudio)()
|
|
148
|
+
? help_topics_1.HELP_NODES.BAS_CATALOG_SERVICES_REQUEST_FAILED
|
|
149
|
+
: undefined,
|
|
150
|
+
[ERROR_TYPE.CERT]: help_topics_1.HELP_NODES.CERTIFICATE_ERROR,
|
|
151
|
+
[ERROR_TYPE.CERT_SELF_SIGNED]: help_topics_1.HELP_NODES.CERTIFICATE_ERROR,
|
|
152
|
+
[ERROR_TYPE.CERT_UKNOWN_OR_INVALID]: help_topics_1.HELP_NODES.CERTIFICATE_ERROR,
|
|
153
|
+
[ERROR_TYPE.CERT_SELF_SIGNED_CERT_IN_CHAIN]: help_topics_1.HELP_NODES.CERTIFICATE_ERROR,
|
|
154
|
+
[ERROR_TYPE.DESTINATION_MISCONFIGURED]: help_topics_1.HELP_NODES.DESTINATION_MISCONFIGURED,
|
|
155
|
+
[ERROR_TYPE.DESTINATION_UNAVAILABLE]: help_topics_1.HELP_NODES.DESTINATION_UNAVAILABLE,
|
|
156
|
+
[ERROR_TYPE.DESTINATION_NOT_FOUND]: help_topics_1.HELP_NODES.DESTINATION_NOT_FOUND,
|
|
157
|
+
[ERROR_TYPE.BAD_GATEWAY]: help_topics_1.HELP_NODES.BAD_GATEWAY,
|
|
158
|
+
[ERROR_TYPE.DESTINATION_BAD_GATEWAY_503]: help_topics_1.HELP_NODES.DESTINATION_BAD_GATEWAY_503,
|
|
159
|
+
[ERROR_TYPE.NO_V4_SERVICES]: help_topics_1.HELP_NODES.NO_V4_SERVICES,
|
|
160
|
+
[ERROR_TYPE.AUTH]: undefined,
|
|
161
|
+
[ERROR_TYPE.AUTH_TIMEOUT]: undefined,
|
|
162
|
+
[ERROR_TYPE.REDIRECT]: undefined,
|
|
163
|
+
[ERROR_TYPE.CERT_EXPIRED]: undefined,
|
|
164
|
+
[ERROR_TYPE.UNKNOWN]: undefined,
|
|
165
|
+
[ERROR_TYPE.INVALID_URL]: undefined,
|
|
166
|
+
[ERROR_TYPE.CONNECTION]: undefined,
|
|
167
|
+
[ERROR_TYPE.SERVICE_UNAVAILABLE]: undefined,
|
|
168
|
+
[ERROR_TYPE.NO_ABAP_ENVS]: undefined,
|
|
169
|
+
[ERROR_TYPE.CATALOG_SERVICE_NOT_ACTIVE]: undefined,
|
|
170
|
+
[ERROR_TYPE.NO_SUCH_HOST]: undefined,
|
|
171
|
+
[ERROR_TYPE.NOT_FOUND]: undefined,
|
|
172
|
+
[ERROR_TYPE.ODATA_URL_NOT_FOUND]: undefined,
|
|
173
|
+
[ERROR_TYPE.INTERNAL_SERVER_ERROR]: undefined,
|
|
174
|
+
[ERROR_TYPE.NO_V2_SERVICES]: undefined
|
|
175
|
+
};
|
|
176
|
+
return errorToHelp[errorType];
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Find an error property for mapping to a general error type from most to least significant.
|
|
180
|
+
*
|
|
181
|
+
* @param error any type of error or object that has an error code, status, name or message
|
|
182
|
+
* @returns a value that can be used to look up a general error type
|
|
183
|
+
*/
|
|
184
|
+
static findErrorValueForMapping = (error) => error.response?.data?.error?.code ||
|
|
185
|
+
error.response?.status ||
|
|
186
|
+
error.response?.data ||
|
|
187
|
+
error.code ||
|
|
188
|
+
(['TypeError', 'Error'].includes(error.name) ? error.message : error.name) || // For generic error types use the message otherwise the name is more relevant
|
|
189
|
+
error.message ||
|
|
190
|
+
error;
|
|
92
191
|
/**
|
|
93
192
|
* Create an instance of the ErrorHandler.
|
|
94
193
|
*
|
|
@@ -96,7 +195,7 @@ class ErrorHandler {
|
|
|
96
195
|
* @param enableGuidedAnswers if true, the end user validation errors will include guided answers to provide help
|
|
97
196
|
*/
|
|
98
197
|
constructor(logger, enableGuidedAnswers = false) {
|
|
99
|
-
ErrorHandler._logger = logger
|
|
198
|
+
ErrorHandler._logger = logger ?? new logger_1.ToolsLogger({ logPrefix: '@sap-ux/odata-service-inquirer' });
|
|
100
199
|
ErrorHandler.guidedAnswersEnabled = enableGuidedAnswers;
|
|
101
200
|
}
|
|
102
201
|
/**
|
|
@@ -169,7 +268,6 @@ class ErrorHandler {
|
|
|
169
268
|
* @returns A user-friendly message for display in-line
|
|
170
269
|
*/
|
|
171
270
|
logErrorMsgs(error, userMsg, retainError = true) {
|
|
172
|
-
var _a;
|
|
173
271
|
let resolvedError = {
|
|
174
272
|
errorMsg: '',
|
|
175
273
|
errorType: ERROR_TYPE.UNKNOWN
|
|
@@ -177,7 +275,7 @@ class ErrorHandler {
|
|
|
177
275
|
// Overloaded to allow ERROR_TYPE for convenience
|
|
178
276
|
if (Object.values(ERROR_TYPE).includes(error)) {
|
|
179
277
|
const errorType = error;
|
|
180
|
-
resolvedError.errorMsg =
|
|
278
|
+
resolvedError.errorMsg = ErrorHandler.getErrorMsgFromType(errorType) ?? errorType.toString();
|
|
181
279
|
resolvedError.errorType = errorType;
|
|
182
280
|
}
|
|
183
281
|
else if (typeof error === 'string') {
|
|
@@ -188,7 +286,7 @@ class ErrorHandler {
|
|
|
188
286
|
}
|
|
189
287
|
ErrorHandler._logger.error(userMsg ? `${userMsg} ${resolvedError.errorMsg}` : resolvedError.errorMsg);
|
|
190
288
|
if (retainError) {
|
|
191
|
-
this.currentErrorMsg = userMsg
|
|
289
|
+
this.currentErrorMsg = userMsg ?? resolvedError.errorMsg;
|
|
192
290
|
this.currentErrorType = resolvedError.errorType;
|
|
193
291
|
}
|
|
194
292
|
return resolvedError.errorMsg;
|
|
@@ -200,14 +298,13 @@ class ErrorHandler {
|
|
|
200
298
|
* @returns The mapped error message and error type
|
|
201
299
|
*/
|
|
202
300
|
static mapErrorToMsg(error) {
|
|
203
|
-
var _a;
|
|
204
301
|
let errorType;
|
|
205
302
|
if (Object.values(ERROR_TYPE).includes(error)) {
|
|
206
303
|
errorType = error;
|
|
207
304
|
}
|
|
208
305
|
else {
|
|
209
306
|
// Map error type using more to less specific information if available
|
|
210
|
-
errorType =
|
|
307
|
+
errorType = ErrorHandler.getErrorType(this.findErrorValueForMapping(error)) ?? ERROR_TYPE.UNKNOWN;
|
|
211
308
|
}
|
|
212
309
|
return {
|
|
213
310
|
errorMsg: ErrorHandler._errorMsg(error)[errorType],
|
|
@@ -224,14 +321,13 @@ class ErrorHandler {
|
|
|
224
321
|
* @returns The error message
|
|
225
322
|
*/
|
|
226
323
|
getErrorMsg(error, reset, fallback) {
|
|
227
|
-
var _a;
|
|
228
324
|
let errorMsg;
|
|
229
325
|
if (error) {
|
|
230
326
|
errorMsg = ErrorHandler.mapErrorToMsg(error).errorMsg;
|
|
231
327
|
}
|
|
232
328
|
// Get previous error message
|
|
233
329
|
if (!errorMsg) {
|
|
234
|
-
errorMsg =
|
|
330
|
+
errorMsg = this.currentErrorMsg ?? (fallback ? ErrorHandler.getErrorMsgFromType(fallback) : undefined);
|
|
235
331
|
}
|
|
236
332
|
if (reset) {
|
|
237
333
|
this.currentErrorMsg = null;
|
|
@@ -249,7 +345,6 @@ class ErrorHandler {
|
|
|
249
345
|
* @returns An instance of @see {ValidationLink}
|
|
250
346
|
*/
|
|
251
347
|
getValidationErrorHelp(error, reset = false) {
|
|
252
|
-
var _a;
|
|
253
348
|
let errorHelp;
|
|
254
349
|
let errorMsg;
|
|
255
350
|
if (error) {
|
|
@@ -259,7 +354,7 @@ class ErrorHandler {
|
|
|
259
354
|
}
|
|
260
355
|
}
|
|
261
356
|
else if (!error) {
|
|
262
|
-
errorMsg =
|
|
357
|
+
errorMsg = this.currentErrorMsg ?? '';
|
|
263
358
|
if (this.currentErrorType) {
|
|
264
359
|
errorHelp = ErrorHandler.getHelpForError(this.currentErrorType, errorMsg);
|
|
265
360
|
}
|
|
@@ -268,7 +363,7 @@ class ErrorHandler {
|
|
|
268
363
|
this.currentErrorMsg = null;
|
|
269
364
|
this.currentErrorType = null;
|
|
270
365
|
}
|
|
271
|
-
return errorHelp
|
|
366
|
+
return errorHelp ?? errorMsg;
|
|
272
367
|
}
|
|
273
368
|
/**
|
|
274
369
|
* Get the error message for the specified error type.
|
|
@@ -332,10 +427,10 @@ class ErrorHandler {
|
|
|
332
427
|
*/
|
|
333
428
|
static getHelpForError(errorType, errorMsg) {
|
|
334
429
|
const helpNode = ErrorHandler.getHelpNode(errorType);
|
|
335
|
-
const mappedErrorMsg = errorMsg
|
|
430
|
+
const mappedErrorMsg = errorMsg ?? ErrorHandler.getErrorMsgFromType(errorType);
|
|
336
431
|
if (helpNode) {
|
|
337
432
|
const valLink = {
|
|
338
|
-
message: mappedErrorMsg
|
|
433
|
+
message: mappedErrorMsg ?? '',
|
|
339
434
|
link: {
|
|
340
435
|
text: (0, i18n_1.t)('guidedAnswers.validationErrorHelpText'),
|
|
341
436
|
icon: images_1.GUIDED_ANSWERS_ICON,
|
|
@@ -364,100 +459,4 @@ class ErrorHandler {
|
|
|
364
459
|
}
|
|
365
460
|
}
|
|
366
461
|
exports.ErrorHandler = ErrorHandler;
|
|
367
|
-
// Get the required localized parameterized error message
|
|
368
|
-
// Note that these are general fallback end-user error messages.
|
|
369
|
-
// More specific error messages can be used at the point of error generation.
|
|
370
|
-
ErrorHandler._errorMsg = (error) => ({
|
|
371
|
-
[ERROR_TYPE.CERT]: (0, i18n_1.t)('errors.certificateError', { error }),
|
|
372
|
-
[ERROR_TYPE.CERT_EXPIRED]: (0, i18n_1.t)('errors.urlCertValidationError', { certErrorReason: (0, i18n_1.t)('texts.anExpiredCert') }),
|
|
373
|
-
[ERROR_TYPE.CERT_SELF_SIGNED]: (0, i18n_1.t)('errors.urlCertValidationError', {
|
|
374
|
-
certErrorReason: (0, i18n_1.t)('texts.aSelfSignedCert')
|
|
375
|
-
}),
|
|
376
|
-
[ERROR_TYPE.CERT_UKNOWN_OR_INVALID]: (0, i18n_1.t)('errors.urlCertValidationError', {
|
|
377
|
-
certErrorReason: (0, i18n_1.t)('texts.anUnknownOrInvalidCert')
|
|
378
|
-
}),
|
|
379
|
-
[ERROR_TYPE.CERT_SELF_SIGNED_CERT_IN_CHAIN]: (0, i18n_1.t)('errors.urlCertValidationError', {
|
|
380
|
-
certErrorReason: (0, i18n_1.t)('texts.anUntrustedRootCert')
|
|
381
|
-
}),
|
|
382
|
-
[ERROR_TYPE.AUTH]: (0, i18n_1.t)('errors.authenticationFailed', { error }),
|
|
383
|
-
[ERROR_TYPE.AUTH_TIMEOUT]: (0, i18n_1.t)('errors.authenticationTimeout'),
|
|
384
|
-
[ERROR_TYPE.INVALID_URL]: (0, i18n_1.t)('errors.invalidUrl'),
|
|
385
|
-
[ERROR_TYPE.CONNECTION]: (0, i18n_1.t)('errors.connectionError', {
|
|
386
|
-
error: (error === null || error === void 0 ? void 0 : error.message) || JSON.stringify(error)
|
|
387
|
-
}),
|
|
388
|
-
[ERROR_TYPE.UNKNOWN]: (0, i18n_1.t)('errors.unknownError', {
|
|
389
|
-
error: (error === null || error === void 0 ? void 0 : error.message) || JSON.stringify(error)
|
|
390
|
-
}),
|
|
391
|
-
[ERROR_TYPE.SERVICES_UNAVAILABLE]: (0, i18n_1.t)('errors.servicesUnavailable'),
|
|
392
|
-
[ERROR_TYPE.SERVICE_UNAVAILABLE]: (0, i18n_1.t)('errors.serviceUnavailable'),
|
|
393
|
-
[ERROR_TYPE.CATALOG_SERVICE_NOT_ACTIVE]: (0, i18n_1.t)('errors.catalogServiceNotActive'),
|
|
394
|
-
[ERROR_TYPE.INTERNAL_SERVER_ERROR]: (0, i18n_1.t)('errors.internalServerError', { error: error === null || error === void 0 ? void 0 : error.message }),
|
|
395
|
-
[ERROR_TYPE.NOT_FOUND]: (0, i18n_1.t)('errors.urlNotFound'),
|
|
396
|
-
[ERROR_TYPE.ODATA_URL_NOT_FOUND]: (0, i18n_1.t)('errors.odataServiceUrlNotFound'),
|
|
397
|
-
[ERROR_TYPE.BAD_GATEWAY]: (0, i18n_1.t)('errors.badGateway'),
|
|
398
|
-
[ERROR_TYPE.DESTINATION_UNAVAILABLE]: (0, i18n_1.t)('errors.destinationUnavailable'),
|
|
399
|
-
[ERROR_TYPE.DESTINATION_NOT_FOUND]: (0, i18n_1.t)('errors.destinationNotFound'),
|
|
400
|
-
[ERROR_TYPE.DESTINATION_MISCONFIGURED]: (0, i18n_1.t)('errors.destinationMisconfigured'),
|
|
401
|
-
[ERROR_TYPE.NO_V2_SERVICES]: (0, i18n_1.t)('errors.noServicesAvailable', { version: '2' }),
|
|
402
|
-
[ERROR_TYPE.NO_V4_SERVICES]: (0, i18n_1.t)('errors.noServicesAvailable', { version: '4' }),
|
|
403
|
-
[ERROR_TYPE.DESTINATION_BAD_GATEWAY_503]: (0, i18n_1.t)('errors.destinationUnavailable'),
|
|
404
|
-
[ERROR_TYPE.REDIRECT]: (0, i18n_1.t)('errors.redirectError'),
|
|
405
|
-
[ERROR_TYPE.NO_SUCH_HOST]: (0, i18n_1.t)('errors.noSuchHostError'),
|
|
406
|
-
[ERROR_TYPE.NO_ABAP_ENVS]: (0, i18n_1.t)('error.abapEnvsUnavailable')
|
|
407
|
-
});
|
|
408
|
-
/**
|
|
409
|
-
* Get the Guided Answers (help) node for the specified error type.
|
|
410
|
-
*
|
|
411
|
-
* @param errorType The error type for which a help node (help content id) may be returned
|
|
412
|
-
* @returns The Guided Answers node for the specified error type
|
|
413
|
-
*/
|
|
414
|
-
ErrorHandler.getHelpNode = (errorType) => {
|
|
415
|
-
const errorToHelp = {
|
|
416
|
-
[ERROR_TYPE.SERVICES_UNAVAILABLE]: (0, btp_utils_1.isAppStudio)()
|
|
417
|
-
? help_topics_1.HELP_NODES.BAS_CATALOG_SERVICES_REQUEST_FAILED
|
|
418
|
-
: undefined,
|
|
419
|
-
[ERROR_TYPE.CERT]: help_topics_1.HELP_NODES.CERTIFICATE_ERROR,
|
|
420
|
-
[ERROR_TYPE.CERT_SELF_SIGNED]: help_topics_1.HELP_NODES.CERTIFICATE_ERROR,
|
|
421
|
-
[ERROR_TYPE.CERT_UKNOWN_OR_INVALID]: help_topics_1.HELP_NODES.CERTIFICATE_ERROR,
|
|
422
|
-
[ERROR_TYPE.CERT_SELF_SIGNED_CERT_IN_CHAIN]: help_topics_1.HELP_NODES.CERTIFICATE_ERROR,
|
|
423
|
-
[ERROR_TYPE.DESTINATION_MISCONFIGURED]: help_topics_1.HELP_NODES.DESTINATION_MISCONFIGURED,
|
|
424
|
-
[ERROR_TYPE.DESTINATION_UNAVAILABLE]: help_topics_1.HELP_NODES.DESTINATION_UNAVAILABLE,
|
|
425
|
-
[ERROR_TYPE.DESTINATION_NOT_FOUND]: help_topics_1.HELP_NODES.DESTINATION_NOT_FOUND,
|
|
426
|
-
[ERROR_TYPE.BAD_GATEWAY]: help_topics_1.HELP_NODES.BAD_GATEWAY,
|
|
427
|
-
[ERROR_TYPE.DESTINATION_BAD_GATEWAY_503]: help_topics_1.HELP_NODES.DESTINATION_BAD_GATEWAY_503,
|
|
428
|
-
[ERROR_TYPE.NO_V4_SERVICES]: help_topics_1.HELP_NODES.NO_V4_SERVICES,
|
|
429
|
-
[ERROR_TYPE.AUTH]: undefined,
|
|
430
|
-
[ERROR_TYPE.AUTH_TIMEOUT]: undefined,
|
|
431
|
-
[ERROR_TYPE.REDIRECT]: undefined,
|
|
432
|
-
[ERROR_TYPE.CERT_EXPIRED]: undefined,
|
|
433
|
-
[ERROR_TYPE.UNKNOWN]: undefined,
|
|
434
|
-
[ERROR_TYPE.INVALID_URL]: undefined,
|
|
435
|
-
[ERROR_TYPE.CONNECTION]: undefined,
|
|
436
|
-
[ERROR_TYPE.SERVICE_UNAVAILABLE]: undefined,
|
|
437
|
-
[ERROR_TYPE.NO_ABAP_ENVS]: undefined,
|
|
438
|
-
[ERROR_TYPE.CATALOG_SERVICE_NOT_ACTIVE]: undefined,
|
|
439
|
-
[ERROR_TYPE.NO_SUCH_HOST]: undefined,
|
|
440
|
-
[ERROR_TYPE.NOT_FOUND]: undefined,
|
|
441
|
-
[ERROR_TYPE.ODATA_URL_NOT_FOUND]: undefined,
|
|
442
|
-
[ERROR_TYPE.INTERNAL_SERVER_ERROR]: undefined,
|
|
443
|
-
[ERROR_TYPE.NO_V2_SERVICES]: undefined
|
|
444
|
-
};
|
|
445
|
-
return errorToHelp[errorType];
|
|
446
|
-
};
|
|
447
|
-
/**
|
|
448
|
-
* Find an error property for mapping to a general error type from most to least significant.
|
|
449
|
-
*
|
|
450
|
-
* @param error any type of error or object that has an error code, status, name or message
|
|
451
|
-
* @returns a value that can be used to look up a general error type
|
|
452
|
-
*/
|
|
453
|
-
ErrorHandler.findErrorValueForMapping = (error) => {
|
|
454
|
-
var _a, _b, _c, _d, _e;
|
|
455
|
-
return ((_c = (_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c.code) ||
|
|
456
|
-
((_d = error.response) === null || _d === void 0 ? void 0 : _d.status) ||
|
|
457
|
-
((_e = error.response) === null || _e === void 0 ? void 0 : _e.data) ||
|
|
458
|
-
error.code ||
|
|
459
|
-
(['TypeError', 'Error'].includes(error.name) ? error.message : error.name) || // For generic error types use the message otherwise the name is more relevant
|
|
460
|
-
error.message ||
|
|
461
|
-
error;
|
|
462
|
-
};
|
|
463
462
|
//# sourceMappingURL=error-handler.js.map
|
package/dist/i18n.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -20,19 +11,17 @@ exports.defaultProjectNumber = 1;
|
|
|
20
11
|
/**
|
|
21
12
|
* Initialize i18next with the translations for this module.
|
|
22
13
|
*/
|
|
23
|
-
function initI18nOdataServiceInquirer() {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return odataVersion ? ` V${odataVersion}` : '';
|
|
32
|
-
}
|
|
14
|
+
async function initI18nOdataServiceInquirer() {
|
|
15
|
+
await i18next_1.default.init({
|
|
16
|
+
lng: 'en',
|
|
17
|
+
fallbackLng: 'en',
|
|
18
|
+
missingInterpolationHandler: () => '',
|
|
19
|
+
interpolation: {
|
|
20
|
+
format: function odataVersionFormatter(odataVersion) {
|
|
21
|
+
return odataVersion ? ` V${odataVersion}` : '';
|
|
33
22
|
}
|
|
34
|
-
}
|
|
35
|
-
});
|
|
23
|
+
}
|
|
24
|
+
}, () => i18next_1.default.addResourceBundle('en', odataServiceInquirerNamespace, odata_service_inquirer_i18n_json_1.default));
|
|
36
25
|
}
|
|
37
26
|
exports.initI18nOdataServiceInquirer = initI18nOdataServiceInquirer;
|
|
38
27
|
/**
|
|
@@ -43,8 +32,8 @@ exports.initI18nOdataServiceInquirer = initI18nOdataServiceInquirer;
|
|
|
43
32
|
* @returns {string} localized string stored for the given key
|
|
44
33
|
*/
|
|
45
34
|
function t(key, options) {
|
|
46
|
-
if (!
|
|
47
|
-
options = Object.assign(options
|
|
35
|
+
if (!options?.ns) {
|
|
36
|
+
options = Object.assign(options ?? {}, { ns: odataServiceInquirerNamespace });
|
|
48
37
|
}
|
|
49
38
|
return i18next_1.default.t(key, options);
|
|
50
39
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -36,21 +27,19 @@ const i18n_1 = require("./i18n");
|
|
|
36
27
|
* @param isYUI - if true, the prompt is being called from the Yeoman UI extension host
|
|
37
28
|
* @returns the prompts used to provide input for odata service generation and a reference to the answers object which will be populated with the user's responses once `inquirer.prompt` returns
|
|
38
29
|
*/
|
|
39
|
-
function getPrompts(promptOptions, logger, enableGuidedAnswers = false, telemetryClient, isYUI = false) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
};
|
|
53
|
-
});
|
|
30
|
+
async function getPrompts(promptOptions, logger, enableGuidedAnswers = false, telemetryClient, isYUI = false) {
|
|
31
|
+
// prompt texts must be loaded before the prompts are created, wait for the i18n bundle to be initialized
|
|
32
|
+
await (0, i18n_1.initI18nOdataServiceInquirer)();
|
|
33
|
+
logger_helper_1.default.logger = logger ?? new logger_1.ToolsLogger({ logPrefix: '@sap-ux/odata-service-inquirer' });
|
|
34
|
+
error_handler_1.ErrorHandler.logger = logger_helper_1.default.logger;
|
|
35
|
+
error_handler_1.ErrorHandler.guidedAnswersEnabled = enableGuidedAnswers;
|
|
36
|
+
utils_1.PromptState.isYUI = isYUI;
|
|
37
|
+
(0, utils_1.setTelemetryClient)(telemetryClient);
|
|
38
|
+
return {
|
|
39
|
+
prompts: await (0, prompts_1.getQuestions)(promptOptions),
|
|
40
|
+
// Return reference to derived answers object that will be populated with user responses (after prompting is complete)
|
|
41
|
+
answers: utils_1.PromptState.odataService
|
|
42
|
+
};
|
|
54
43
|
}
|
|
55
44
|
exports.getPrompts = getPrompts;
|
|
56
45
|
/**
|
|
@@ -64,15 +53,13 @@ exports.getPrompts = getPrompts;
|
|
|
64
53
|
* @param isYUI - if true, the prompt is being called from the Yeoman UI extension host
|
|
65
54
|
* @returns the prompt answers
|
|
66
55
|
*/
|
|
67
|
-
function prompt(adapter, promptOptions, logger, enableGuidedAnswers, telemetryClient, isYUI = false) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return answers;
|
|
75
|
-
});
|
|
56
|
+
async function prompt(adapter, promptOptions, logger, enableGuidedAnswers, telemetryClient, isYUI = false) {
|
|
57
|
+
const odataServicePrompts = (await getPrompts(promptOptions, logger, enableGuidedAnswers, telemetryClient, isYUI))
|
|
58
|
+
.prompts;
|
|
59
|
+
const answers = await adapter.prompt(odataServicePrompts);
|
|
60
|
+
// Add dervied service answers to the answers object
|
|
61
|
+
Object.assign(answers, utils_1.PromptState.odataService);
|
|
62
|
+
return answers;
|
|
76
63
|
}
|
|
77
64
|
exports.prompt = prompt;
|
|
78
65
|
//# sourceMappingURL=index.js.map
|