( jobId: string, argv: CliArguments, spinner: Spinner, logger: Logger, downloadFile: typeof downloadExportFile, cancellationSignal?: AbortSignal )
| 150 | } |
| 151 | |
| 152 | async function waitForCompletion( |
| 153 | jobId: string, |
| 154 | argv: CliArguments, |
| 155 | spinner: Spinner, |
| 156 | logger: Logger, |
| 157 | downloadFile: typeof downloadExportFile, |
| 158 | cancellationSignal?: AbortSignal |
| 159 | ): Promise<Job> { |
| 160 | const cloudconvert = argv.cloudconvert; |
| 161 | |
| 162 | return await new Promise<Job>((resolve, reject) => { |
| 163 | let settled = false; |
| 164 | const isSettled = (): boolean => settled; |
| 165 | const isCancelled = (): boolean => cancellationSignal?.aborted ?? false; |
| 166 | |
| 167 | const stopWaiting = (): void => { |
| 168 | if (settled) { |
| 169 | return; |
| 170 | } |
| 171 | |
| 172 | settled = true; |
| 173 | stopPolling(); |
| 174 | cancellationSignal?.removeEventListener('abort', stopWaiting); |
| 175 | }; |
| 176 | |
| 177 | const finishJob = (finishedJob: Job): void => { |
| 178 | if (isSettled() || isCancelled()) { |
| 179 | return; |
| 180 | } |
| 181 | |
| 182 | stopWaiting(); |
| 183 | void finishCompletedJob(finishedJob, argv, spinner, logger, downloadFile).then(resolve, reject); |
| 184 | }; |
| 185 | |
| 186 | const failJob = (failedJob?: Job): void => { |
| 187 | if (isSettled() || isCancelled()) { |
| 188 | return; |
| 189 | } |
| 190 | |
| 191 | stopWaiting(); |
| 192 | closeCloudConvertSocket(cloudconvert); |
| 193 | if (failedJob) { |
| 194 | printFailedTaskMessages(failedJob.tasks, logger); |
| 195 | printCommandTaskOutputs(failedJob.tasks, logger); |
| 196 | } |
| 197 | spinner.fail('Job failed!'); |
| 198 | reject(new Error('Job failed!')); |
| 199 | }; |
| 200 | |
| 201 | const callbacks: JobCompletionCallbacks = { |
| 202 | isSettled, |
| 203 | isCancelled, |
| 204 | finishJob, |
| 205 | failJob |
| 206 | }; |
| 207 | const stopPolling = startJobStatusPolling(jobId, cloudconvert, logger, callbacks); |
| 208 | |
| 209 | cancellationSignal?.addEventListener('abort', stopWaiting, { once: true }); |
no test coverage detected