@zendesk/zcli-themes
Version:
zcli theme commands live here
50 lines (49 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@oclif/core");
const errors_1 = require("@oclif/core/lib/errors");
const zcli_core_1 = require("@zendesk/zcli-core");
const chalk = require("chalk");
const validationErrorsToString_1 = require("./validationErrorsToString");
async function pollJobStatus(themePath, jobId, interval = 1000, retries = 20) {
core_1.CliUx.ux.action.start('Polling job status');
while (retries) {
// Delay issuing a retry
await new Promise(resolve => setTimeout(resolve, interval));
const response = await zcli_core_1.request.requestAPI(`/api/v2/guide/theming/jobs/${jobId}`);
const job = response.data.job;
switch (job.status) {
case 'pending':
retries -= 1;
break;
case 'completed': {
core_1.CliUx.ux.action.stop('Ok');
return;
}
case 'failed': {
// Although `data.job.errors` is an array, it usually contains
// only one error at a time. Hence, we only need to handle the
// first error in the array.
const [error] = job.errors;
handleJobError(themePath, error);
}
}
}
(0, errors_1.error)('Import job timed out');
}
exports.default = pollJobStatus;
function handleJobError(themePath, jobError) {
const { code, message, meta } = jobError;
const title = `${chalk.bold(code)} - ${message}`;
let details = '';
switch (code) {
case 'InvalidTemplates':
case 'InvalidManifest':
case 'InvalidTranslationFile':
details = (0, validationErrorsToString_1.default)(themePath, meta);
break;
default:
details = JSON.stringify(meta);
}
(0, errors_1.error)(`${title}\n${details}`);
}