From ec9dbd7ad65447ee4e2ab8ea58b47f259b03d1cc Mon Sep 17 00:00:00 2001 From: Saad Jutt Date: Mon, 13 Sep 2021 07:30:26 +0500 Subject: [PATCH] chore(imprvements): code changes for fileUploader --- src/FileUploader.ts | 40 +++++++++++------------------ src/SASjs.ts | 24 +++++------------ src/job-execution/JobExecutor.ts | 4 +-- src/job-execution/WebJobExecutor.ts | 4 +-- src/request/RequestClient.ts | 4 +-- src/test/FileUploader.spec.ts | 13 +++++----- 6 files changed, 33 insertions(+), 56 deletions(-) diff --git a/src/FileUploader.ts b/src/FileUploader.ts index ec56983..5523929 100644 --- a/src/FileUploader.ts +++ b/src/FileUploader.ts @@ -3,21 +3,17 @@ import { UploadFile } from './types/UploadFile' import { ErrorResponse, LoginRequiredError } from './types/errors' import { RequestClient } from './request/RequestClient' import { ServerType } from '@sasjs/utils/types' -import SASjs from './SASjs' -import { Server } from 'https' import { SASjsConfig } from './types' -import { config } from 'process' export class FileUploader { - constructor( - private sasjsConfig: SASjsConfig, - private jobsPath: string, - private requestClient: RequestClient - ) { - if (this.sasjsConfig.serverUrl) isUrl(this.sasjsConfig.serverUrl) - } + constructor(private jobsPath: string, private requestClient: RequestClient) {} - public uploadFile(sasJob: string, files: UploadFile[], params: any) { + public async uploadFile( + sasJob: string, + files: UploadFile[], + params: any, + config: SASjsConfig + ) { if (files?.length < 1) return Promise.reject( new ErrorResponse('At least one file must be provided.') @@ -33,8 +29,8 @@ export class FileUploader { } } - const program = this.sasjsConfig.appLoc - ? this.sasjsConfig.appLoc.replace(/\/?$/, '/') + sasJob.replace(/^\//, '') + const program = config.appLoc + ? config.appLoc.replace(/\/?$/, '/') + sasJob.replace(/^\//, '') : sasJob const uploadUrl = `${this.jobsPath}/?${ '_program=' + program @@ -48,12 +44,9 @@ export class FileUploader { const csrfToken = this.requestClient.getCsrfToken('file') if (csrfToken) formData.append('_csrf', csrfToken.value) - if (this.sasjsConfig.debug) formData.append('_debug', '131') - if ( - this.sasjsConfig.serverType === ServerType.SasViya && - this.sasjsConfig.contextName - ) - formData.append('_contextname', this.sasjsConfig.contextName) + if (config.debug) formData.append('_debug', '131') + if (config.serverType === ServerType.SasViya && config.contextName) + formData.append('_contextname', config.contextName) const headers = { 'cache-control': 'no-cache', @@ -66,15 +59,12 @@ export class FileUploader { return this.requestClient .post(uploadUrl, formData, undefined, 'application/json', headers) .then(async (res) => { - this.requestClient!.appendRequest(res, sasJob, this.sasjsConfig.debug) - if ( - this.sasjsConfig.serverType === ServerType.SasViya && - this.sasjsConfig.debug - ) { + this.requestClient.appendRequest(res, sasJob, config.debug) + if (config.serverType === ServerType.SasViya && config.debug) { const jsonResponse = await parseSasViyaDebugResponse( res.result as string, this.requestClient, - this.sasjsConfig.serverUrl + config.serverUrl ) return jsonResponse } diff --git a/src/SASjs.ts b/src/SASjs.ts index 45313b6..b7d3e0b 100644 --- a/src/SASjs.ts +++ b/src/SASjs.ts @@ -507,7 +507,7 @@ export default class SASjs { ...this.sasjsConfig, ...config } - await this.setupConfiguration() + this.setupConfiguration() } /** @@ -573,22 +573,16 @@ export default class SASjs { * @param params - request URL parameters. * @param overrideSasjsConfig - object to override existing config (optional) */ - public uploadFile( + public async uploadFile( sasJob: string, files: UploadFile[], params: any, overrideSasjsConfig?: any ) { - const fileUploader = overrideSasjsConfig - ? new FileUploader( - { ...this.sasjsConfig, ...overrideSasjsConfig }, - this.jobsPath, - this.requestClient! - ) - : this.fileUploader || - new FileUploader(this.sasjsConfig, this.jobsPath, this.requestClient!) - - return fileUploader.uploadFile(sasJob, files, params) + return await this.fileUploader!.uploadFile(sasJob, files, params, { + ...this.sasjsConfig, + ...overrideSasjsConfig + }) } /** @@ -990,11 +984,7 @@ export default class SASjs { ) } - this.fileUploader = new FileUploader( - this.sasjsConfig, - this.jobsPath, - this.requestClient - ) + this.fileUploader = new FileUploader(this.jobsPath, this.requestClient) this.webJobExecutor = new WebJobExecutor( this.sasjsConfig.serverUrl, diff --git a/src/job-execution/JobExecutor.ts b/src/job-execution/JobExecutor.ts index 426bf59..19288bb 100644 --- a/src/job-execution/JobExecutor.ts +++ b/src/job-execution/JobExecutor.ts @@ -1,7 +1,6 @@ import { AuthConfig, ServerType } from '@sasjs/utils/types' -import { SASjsRequest } from '../types' import { ExtraResponseAttributes } from '@sasjs/utils/types' -import { asyncForEach, parseGeneratedCode, parseSourceCode } from '../utils' +import { asyncForEach } from '../utils' export type ExecuteFunction = () => Promise @@ -21,7 +20,6 @@ export abstract class BaseJobExecutor implements JobExecutor { constructor(protected serverUrl: string, protected serverType: ServerType) {} private waitingRequests: ExecuteFunction[] = [] - private requests: SASjsRequest[] = [] abstract execute( sasJob: string, diff --git a/src/job-execution/WebJobExecutor.ts b/src/job-execution/WebJobExecutor.ts index c0e569b..1476a35 100644 --- a/src/job-execution/WebJobExecutor.ts +++ b/src/job-execution/WebJobExecutor.ts @@ -90,7 +90,7 @@ export class WebJobExecutor extends BaseJobExecutor { // file upload approach try { formData = generateFileUploadForm(formData, data) - } catch (e) { + } catch (e: any) { return Promise.reject(new ErrorResponse(e?.message, e)) } } else { @@ -100,7 +100,7 @@ export class WebJobExecutor extends BaseJobExecutor { generateTableUploadForm(formData, data) formData = newFormData requestParams = { ...requestParams, ...params } - } catch (e) { + } catch (e: any) { return Promise.reject(new ErrorResponse(e?.message, e)) } } diff --git a/src/request/RequestClient.ts b/src/request/RequestClient.ts index b6fc90a..ec7d268 100644 --- a/src/request/RequestClient.ts +++ b/src/request/RequestClient.ts @@ -182,7 +182,7 @@ export class RequestClient implements HttpClient { }) } - public post( + public async post( url: string, data: any, accessToken: string | undefined, @@ -286,7 +286,7 @@ export class RequestClient implements HttpClient { result: response.data, etag: response.headers['etag'] as string } - } catch (e) { + } catch (e: any) { const response = e.response as AxiosResponse if (response?.status === 403 || response?.status === 449) { this.parseAndSetFileUploadCsrfToken(response) diff --git a/src/test/FileUploader.spec.ts b/src/test/FileUploader.spec.ts index 5968ad2..452ddfa 100644 --- a/src/test/FileUploader.spec.ts +++ b/src/test/FileUploader.spec.ts @@ -39,7 +39,6 @@ describe('FileUploader', () => { } const fileUploader = new FileUploader( - config, '/jobs/path', new RequestClient('https://sample.server.com') ) @@ -51,7 +50,7 @@ describe('FileUploader', () => { Promise.resolve({ data: sampleResponse }) ) - const res = await fileUploader.uploadFile(sasJob, files, params) + const res = await fileUploader.uploadFile(sasJob, files, params, config) expect(res).toEqual(JSON.parse(sampleResponse)) }) @@ -62,7 +61,7 @@ describe('FileUploader', () => { const params = { table: 'libtable' } const err = await fileUploader - .uploadFile(sasJob, files, params) + .uploadFile(sasJob, files, params, config) .catch((err: any) => err) expect(err.error.message).toEqual('At least one file must be provided.') }) @@ -72,7 +71,7 @@ describe('FileUploader', () => { const { files, params } = prepareFilesAndParams() const err = await fileUploader - .uploadFile(sasJob, files, params) + .uploadFile(sasJob, files, params, config) .catch((err: any) => err) expect(err.error.message).toEqual('sasJob must be provided.') }) @@ -86,7 +85,7 @@ describe('FileUploader', () => { const { files, params } = prepareFilesAndParams() const err = await fileUploader - .uploadFile(sasJob, files, params) + .uploadFile(sasJob, files, params, config) .catch((err: any) => err) expect(err.error.message).toEqual('You must be logged in to upload a file.') }) @@ -100,7 +99,7 @@ describe('FileUploader', () => { const { files, params } = prepareFilesAndParams() const err = await fileUploader - .uploadFile(sasJob, files, params) + .uploadFile(sasJob, files, params, config) .catch((err: any) => err) expect(err.error.message).toEqual('File upload request failed.') }) @@ -114,7 +113,7 @@ describe('FileUploader', () => { const { files, params } = prepareFilesAndParams() const err = await fileUploader - .uploadFile(sasJob, files, params) + .uploadFile(sasJob, files, params, config) .catch((err: any) => err) expect(err.error.message).toEqual('File upload request failed.') })