1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-16 16:40:06 +00:00

chore(lint): fixed linting issues

This commit is contained in:
Yury Shkoda
2022-06-20 19:26:29 +03:00
parent 1596173dda
commit 489947bcae
59 changed files with 243 additions and 236 deletions

View File

@@ -3,7 +3,7 @@ const username = Cypress.env('username')
const password = Cypress.env('password') const password = Cypress.env('password')
const testingFinishTimeout = Cypress.env('testingFinishTimeout') const testingFinishTimeout = Cypress.env('testingFinishTimeout')
context('sasjs-tests', function () { context('sasjs-tests', function() {
this.beforeAll(() => { this.beforeAll(() => {
cy.visit(sasjsTestsUrl) cy.visit(sasjsTestsUrl)
}) })
@@ -12,8 +12,8 @@ context('sasjs-tests', function () {
cy.reload() cy.reload()
}) })
it('Should have all tests successfull', (done) => { it('Should have all tests successfull', done => {
cy.get('body').then(($body) => { cy.get('body').then($body => {
if ($body.find('input[placeholder="User Name"]').length > 0) { if ($body.find('input[placeholder="User Name"]').length > 0) {
cy.get('input[placeholder="User Name"]').type(username) cy.get('input[placeholder="User Name"]').type(username)
cy.get('input[placeholder="Password"]').type(password) cy.get('input[placeholder="Password"]').type(password)
@@ -42,8 +42,8 @@ context('sasjs-tests', function () {
}) })
}) })
it('Should have all tests successfull with debug on', (done) => { it('Should have all tests successfull with debug on', done => {
cy.get('body').then(($body) => { cy.get('body').then($body => {
if ($body.find('input[placeholder="User Name"]').length > 0) { if ($body.find('input[placeholder="User Name"]').length > 0) {
cy.get('input[placeholder="User Name"]').type(username) cy.get('input[placeholder="User Name"]').type(username)
cy.get('input[placeholder="Password"]').type(password) cy.get('input[placeholder="Password"]').type(password)

View File

@@ -9,9 +9,9 @@ const Login = (): ReactElement<{}> => {
const appContext = useContext(AppContext) const appContext = useContext(AppContext)
const handleSubmit = useCallback( const handleSubmit = useCallback(
(e) => { e => {
e.preventDefault() e.preventDefault()
appContext.adapter.logIn(username, password).then((res) => { appContext.adapter.logIn(username, password).then(res => {
appContext.setIsLoggedIn(res.isLoggedIn) appContext.setIsLoggedIn(res.isLoggedIn)
}) })
}, },
@@ -28,7 +28,7 @@ const Login = (): ReactElement<{}> => {
placeholder="User Name" placeholder="User Name"
value={username} value={username}
required required
onChange={(e) => setUsername(e.target.value)} onChange={e => setUsername(e.target.value)}
/> />
</div> </div>
<div className="row"> <div className="row">
@@ -38,7 +38,7 @@ const Login = (): ReactElement<{}> => {
type="password" type="password"
value={password} value={password}
required required
onChange={(e) => setPassword(e.target.value)} onChange={e => setPassword(e.target.value)}
/> />
</div> </div>
<button type="submit" className="submit-button"> <button type="submit" className="submit-button">

View File

@@ -57,7 +57,7 @@ export function register(config) {
function registerValidSW(swUrl, config) { function registerValidSW(swUrl, config) {
navigator.serviceWorker navigator.serviceWorker
.register(swUrl) .register(swUrl)
.then((registration) => { .then(registration => {
registration.onupdatefound = () => { registration.onupdatefound = () => {
const installingWorker = registration.installing const installingWorker = registration.installing
if (installingWorker == null) { if (installingWorker == null) {
@@ -93,7 +93,7 @@ function registerValidSW(swUrl, config) {
} }
} }
}) })
.catch((error) => { .catch(error => {
console.error('Error during service worker registration:', error) console.error('Error during service worker registration:', error)
}) })
} }
@@ -103,7 +103,7 @@ function checkValidServiceWorker(swUrl, config) {
fetch(swUrl, { fetch(swUrl, {
headers: { 'Service-Worker': 'script' } headers: { 'Service-Worker': 'script' }
}) })
.then((response) => { .then(response => {
// Ensure service worker exists, and that we really are getting a JS file. // Ensure service worker exists, and that we really are getting a JS file.
const contentType = response.headers.get('content-type') const contentType = response.headers.get('content-type')
if ( if (
@@ -111,7 +111,7 @@ function checkValidServiceWorker(swUrl, config) {
(contentType != null && contentType.indexOf('javascript') === -1) (contentType != null && contentType.indexOf('javascript') === -1)
) { ) {
// No service worker found. Probably a different app. Reload the page. // No service worker found. Probably a different app. Reload the page.
navigator.serviceWorker.ready.then((registration) => { navigator.serviceWorker.ready.then(registration => {
registration.unregister().then(() => { registration.unregister().then(() => {
window.location.reload() window.location.reload()
}) })
@@ -131,10 +131,10 @@ function checkValidServiceWorker(swUrl, config) {
export function unregister() { export function unregister() {
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready navigator.serviceWorker.ready
.then((registration) => { .then(registration => {
registration.unregister() registration.unregister()
}) })
.catch((error) => { .catch(error => {
console.error(error.message) console.error(error.message)
}) })
} }

View File

@@ -119,7 +119,7 @@ const validateLog = (text: string, log: string): boolean => {
const validate = (expectedProperties: string[], data: any): boolean => { const validate = (expectedProperties: string[], data: any): boolean => {
const actualProperties = Object.keys(data) const actualProperties = Object.keys(data)
const isValid = expectedProperties.every((property) => const isValid = expectedProperties.every(property =>
actualProperties.includes(property) actualProperties.includes(property)
) )
return isValid return isValid

View File

@@ -86,7 +86,7 @@ export const sendArrTests = (adapter: SASjs): TestSuite => ({
'Should error out with long string values over 32765 characters', 'Should error out with long string values over 32765 characters',
test: () => { test: () => {
const data = getLongStringData(32767) const data = getLongStringData(32767)
return adapter.request('common/sendArr', data).catch((e) => e) return adapter.request('common/sendArr', data).catch(e => e)
}, },
assertion: (error: any) => { assertion: (error: any) => {
return !!error && !!error.error && !!error.error.message return !!error && !!error.error && !!error.error.message
@@ -182,7 +182,7 @@ export const sendObjTests = (adapter: SASjs): TestSuite => ({
const invalidData: any = { const invalidData: any = {
'1InvalidTable': [{ col1: 42 }] '1InvalidTable': [{ col1: 42 }]
} }
return adapter.request('common/sendObj', invalidData).catch((e) => e) return adapter.request('common/sendObj', invalidData).catch(e => e)
}, },
assertion: (error: any) => assertion: (error: any) =>
!!error && !!error.error && !!error.error.message !!error && !!error.error && !!error.error.message
@@ -194,7 +194,7 @@ export const sendObjTests = (adapter: SASjs): TestSuite => ({
const invalidData: any = { const invalidData: any = {
'an invalidTable': [{ col1: 42 }] 'an invalidTable': [{ col1: 42 }]
} }
return adapter.request('common/sendObj', invalidData).catch((e) => e) return adapter.request('common/sendObj', invalidData).catch(e => e)
}, },
assertion: (error: any) => assertion: (error: any) =>
!!error && !!error.error && !!error.error.message !!error && !!error.error && !!error.error.message
@@ -206,7 +206,7 @@ export const sendObjTests = (adapter: SASjs): TestSuite => ({
const invalidData: any = { const invalidData: any = {
'anInvalidTable#': [{ col1: 42 }] 'anInvalidTable#': [{ col1: 42 }]
} }
return adapter.request('common/sendObj', invalidData).catch((e) => e) return adapter.request('common/sendObj', invalidData).catch(e => e)
}, },
assertion: (error: any) => assertion: (error: any) =>
!!error && !!error.error && !!error.error.message !!error && !!error.error && !!error.error.message
@@ -219,7 +219,7 @@ export const sendObjTests = (adapter: SASjs): TestSuite => ({
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: [{ col1: 42 }] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: [{ col1: 42 }]
} }
return adapter.request('common/sendObj', invalidData).catch((e) => e) return adapter.request('common/sendObj', invalidData).catch(e => e)
}, },
assertion: (error: any) => assertion: (error: any) =>
!!error && !!error.error && !!error.error.message !!error && !!error.error && !!error.error.message
@@ -231,7 +231,7 @@ export const sendObjTests = (adapter: SASjs): TestSuite => ({
const invalidData: any = { const invalidData: any = {
inData: [[{ data: 'value' }]] inData: [[{ data: 'value' }]]
} }
return adapter.request('common/sendObj', invalidData).catch((e) => e) return adapter.request('common/sendObj', invalidData).catch(e => e)
}, },
assertion: (error: any) => assertion: (error: any) =>
!!error && !!error.error && !!error.error.message !!error && !!error.error && !!error.error.message
@@ -265,7 +265,7 @@ export const sendObjTests = (adapter: SASjs): TestSuite => ({
test: () => { test: () => {
return adapter return adapter
.request('common/sendObj', getLongStringData(32767)) .request('common/sendObj', getLongStringData(32767))
.catch((e) => e) .catch(e => e)
}, },
assertion: (error: any) => { assertion: (error: any) => {
return !!error && !!error.error && !!error.error.message return !!error && !!error.error && !!error.error.message

View File

@@ -31,7 +31,7 @@ export const sasjsRequestTests = (adapter: SASjs): TestSuite => ({
.catch(() => { .catch(() => {
const sasRequests = adapter.getSasRequests() const sasRequests = adapter.getSasRequests()
const makeErrRequest: any = const makeErrRequest: any =
sasRequests.find((req) => req.serviceLink.includes('makeErr')) || sasRequests.find(req => req.serviceLink.includes('makeErr')) ||
null null
if (!makeErrRequest) return false if (!makeErrRequest) return false
@@ -41,7 +41,7 @@ export const sasjsRequestTests = (adapter: SASjs): TestSuite => ({
) )
}) })
}, },
assertion: (response) => { assertion: response => {
return response return response
} }
} }

View File

@@ -42,7 +42,7 @@ export class ContextManager {
`${this.serverUrl}/compute/contexts?limit=10000`, `${this.serverUrl}/compute/contexts?limit=10000`,
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting compute contexts. ') throw prefixMessage(err, 'Error while getting compute contexts. ')
}) })
@@ -63,7 +63,7 @@ export class ContextManager {
`${this.serverUrl}/launcher/contexts?limit=10000`, `${this.serverUrl}/launcher/contexts?limit=10000`,
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting launcher contexts. ') throw prefixMessage(err, 'Error while getting launcher contexts. ')
}) })
@@ -96,9 +96,7 @@ export class ContextManager {
const existingComputeContexts = await this.getComputeContexts(accessToken) const existingComputeContexts = await this.getComputeContexts(accessToken)
if ( if (existingComputeContexts.find(context => context.name === contextName)) {
existingComputeContexts.find((context) => context.name === contextName)
) {
throw new Error(`Compute context '${contextName}' already exists.`) throw new Error(`Compute context '${contextName}' already exists.`)
} }
@@ -107,9 +105,7 @@ export class ContextManager {
const launcherContexts = await this.getLauncherContexts(accessToken) const launcherContexts = await this.getLauncherContexts(accessToken)
if ( if (
!launcherContexts.find( !launcherContexts.find(context => context.name === launchContextName)
(context) => context.name === launchContextName
)
) { ) {
const description = `The launcher context for ${launchContextName}` const description = `The launcher context for ${launchContextName}`
const launchType = 'direct' const launchType = 'direct'
@@ -119,7 +115,7 @@ export class ContextManager {
description, description,
launchType, launchType,
accessToken accessToken
).catch((err) => { ).catch(err => {
throw new Error(`Error while creating launcher context. ${err}`) throw new Error(`Error while creating launcher context. ${err}`)
}) })
@@ -169,7 +165,7 @@ export class ContextManager {
requestBody, requestBody,
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while creating compute context. ') throw prefixMessage(err, 'Error while creating compute context. ')
}) })
@@ -195,7 +191,7 @@ export class ContextManager {
const existingLauncherContexts = await this.getLauncherContexts(accessToken) const existingLauncherContexts = await this.getLauncherContexts(accessToken)
if ( if (
existingLauncherContexts.find((context) => context.name === contextName) existingLauncherContexts.find(context => context.name === contextName)
) { ) {
throw new Error(`Launcher context '${contextName}' already exists.`) throw new Error(`Launcher context '${contextName}' already exists.`)
} }
@@ -220,7 +216,7 @@ export class ContextManager {
requestBody, requestBody,
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while creating launcher context. ') throw prefixMessage(err, 'Error while creating launcher context. ')
}) })
@@ -261,7 +257,7 @@ export class ContextManager {
`${this.serverUrl}/compute/contexts/${originalContext.id}`, `${this.serverUrl}/compute/contexts/${originalContext.id}`,
accessToken accessToken
) )
.catch((err) => { .catch(err => {
if (err && err.status === 404) { if (err && err.status === 404) {
throw new Error( throw new Error(
`The context '${contextName}' was not found on this server.` `The context '${contextName}' was not found on this server.`
@@ -295,7 +291,7 @@ export class ContextManager {
`${this.serverUrl}/compute/contexts?filter=eq(name, "${contextName}")`, `${this.serverUrl}/compute/contexts?filter=eq(name, "${contextName}")`,
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw prefixMessage( throw prefixMessage(
err, err,
'Error while getting compute context by name. ' 'Error while getting compute context by name. '
@@ -320,7 +316,7 @@ export class ContextManager {
`${this.serverUrl}/compute/contexts/${contextId}`, `${this.serverUrl}/compute/contexts/${contextId}`,
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting compute context by id. ') throw prefixMessage(err, 'Error while getting compute context by id. ')
}) })
@@ -336,7 +332,7 @@ export class ContextManager {
`${this.serverUrl}/compute/contexts?limit=10000`, `${this.serverUrl}/compute/contexts?limit=10000`,
authConfig?.access_token authConfig?.access_token
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while fetching compute contexts.') throw prefixMessage(err, 'Error while fetching compute contexts.')
}) })

View File

@@ -73,9 +73,9 @@ export class SAS9ApiClient {
'Content-Length': contentLength, 'Content-Length': contentLength,
Connection: 'keep-alive' Connection: 'keep-alive'
} }
const storedProcessUrl = `${this.jobsPath}/?${ const storedProcessUrl = `${this.jobsPath}/?${'_program=' +
'_program=' + codeInjectorPath + '&_debug=log' codeInjectorPath +
}` '&_debug=log'}`
const response = await this.requestClient.post( const response = await this.requestClient.post(
storedProcessUrl, storedProcessUrl,
formData, formData,

View File

@@ -31,7 +31,7 @@ describe('SASViyaApiClient', () => {
.mockImplementation(() => Promise.reject('Not Found')) .mockImplementation(() => Promise.reject('Not Found'))
const error = await sasViyaApiClient const error = await sasViyaApiClient
.createFolder('test', '/foo') .createFolder('test', '/foo')
.catch((e) => e) .catch(e => e)
expect(error).toBeInstanceOf(RootFolderNotFoundError) expect(error).toBeInstanceOf(RootFolderNotFoundError)
}) })
}) })

View File

@@ -313,7 +313,7 @@ export class SASViyaApiClient {
public async getFolder(folderPath: string, accessToken?: string) { public async getFolder(folderPath: string, accessToken?: string) {
return await this.requestClient return await this.requestClient
.get(`/folders/folders/@item?path=${folderPath}`, accessToken) .get(`/folders/folders/@item?path=${folderPath}`, accessToken)
.then((res) => res.result) .then(res => res.result)
} }
/** /**
@@ -427,15 +427,16 @@ export class SASViyaApiClient {
} }
} }
const { result: createFolderResponse } = const { result: createFolderResponse } = await this.requestClient.post<
await this.requestClient.post<Folder>( Folder
`/folders/folders?parentFolderUri=${parentFolderUri}`, >(
{ `/folders/folders?parentFolderUri=${parentFolderUri}`,
name: folderName, {
type: 'folder' name: folderName,
}, type: 'folder'
accessToken },
) accessToken
)
// update folder map with newly created folder. // update folder map with newly created folder.
await this.populateFolderMap( await this.populateFolderMap(
@@ -495,8 +496,8 @@ export class SASViyaApiClient {
const authCode = await this.requestClient const authCode = await this.requestClient
.get<string>(authUrl, undefined, 'text/plain') .get<string>(authUrl, undefined, 'text/plain')
.then((response) => response.result) .then(response => response.result)
.then(async (response) => { .then(async response => {
let code = '' let code = ''
if (isAuthorizeFormRequired(response)) { if (isAuthorizeFormRequired(response)) {
const formResponse: any = await this.requestClient.authorize(response) const formResponse: any = await this.requestClient.authorize(response)
@@ -625,7 +626,7 @@ export class SASViyaApiClient {
? `${this.rootFolderName}/${folderPath}` ? `${this.rootFolderName}/${folderPath}`
: folderPath : folderPath
await this.populateFolderMap(fullFolderPath, access_token).catch((err) => { await this.populateFolderMap(fullFolderPath, access_token).catch(err => {
throw prefixMessage(err, 'Error while populating folder map. ') throw prefixMessage(err, 'Error while populating folder map. ')
}) })
@@ -637,7 +638,7 @@ export class SASViyaApiClient {
) )
} }
const jobToExecute = jobFolder?.find((item) => item.name === jobName) const jobToExecute = jobFolder?.find(item => item.name === jobName)
if (!jobToExecute) { if (!jobToExecute) {
throw new Error(`Job was not found.`) throw new Error(`Job was not found.`)
@@ -647,7 +648,7 @@ export class SASViyaApiClient {
if (!code) { if (!code) {
const jobDefinitionLink = jobToExecute?.links.find( const jobDefinitionLink = jobToExecute?.links.find(
(l) => l.rel === 'getResource' l => l.rel === 'getResource'
) )
if (!jobDefinitionLink) { if (!jobDefinitionLink) {
@@ -659,7 +660,7 @@ export class SASViyaApiClient {
`${this.serverUrl}${jobDefinitionLink.href}`, `${this.serverUrl}${jobDefinitionLink.href}`,
access_token access_token
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting job definition. ') throw prefixMessage(err, 'Error while getting job definition. ')
}) })
@@ -728,7 +729,7 @@ export class SASViyaApiClient {
) )
} }
const jobToExecute = jobFolder?.find((item) => item.name === jobName) const jobToExecute = jobFolder?.find(item => item.name === jobName)
let files: any[] = [] let files: any[] = []
if (data && Object.keys(data).length) { if (data && Object.keys(data).length) {
@@ -739,7 +740,7 @@ export class SASViyaApiClient {
throw new Error(`Job was not found.`) throw new Error(`Job was not found.`)
} }
const jobDefinitionLink = jobToExecute?.links.find( const jobDefinitionLink = jobToExecute?.links.find(
(l) => l.rel === 'getResource' l => l.rel === 'getResource'
)?.href )?.href
const { result: jobDefinition } = await this.requestClient.get<Job>( const { result: jobDefinition } = await this.requestClient.get<Job>(
@@ -783,7 +784,7 @@ export class SASViyaApiClient {
access_token access_token
) )
const jobStatus = await this.pollJobState(postedJob, authConfig).catch( const jobStatus = await this.pollJobState(postedJob, authConfig).catch(
(err) => { err => {
throw prefixMessage(err, 'Error while polling job status. ') throw prefixMessage(err, 'Error while polling job status. ')
} }
) )
@@ -796,7 +797,7 @@ export class SASViyaApiClient {
let log let log
const resultLink = currentJob.results['_webout.json'] const resultLink = currentJob.results['_webout.json']
const logLink = currentJob.links.find((l) => l.rel === 'log') const logLink = currentJob.links.find(l => l.rel === 'log')
if (resultLink) { if (resultLink) {
jobResult = await this.requestClient.get<any>( jobResult = await this.requestClient.get<any>(
`${this.serverUrl}${resultLink}/content`, `${this.serverUrl}${resultLink}/content`,
@@ -830,7 +831,7 @@ export class SASViyaApiClient {
const url = '/folders/folders/@item?path=' + path const url = '/folders/folders/@item?path=' + path
const { result: folder } = await this.requestClient const { result: folder } = await this.requestClient
.get<Folder>(`${url}`, accessToken) .get<Folder>(`${url}`, accessToken)
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting folder. ') throw prefixMessage(err, 'Error while getting folder. ')
}) })
@@ -845,7 +846,7 @@ export class SASViyaApiClient {
}`, // this is a fix for https://github.com/sasjs/adapter/issues/669 }`, // this is a fix for https://github.com/sasjs/adapter/issues/669
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting members. ') throw prefixMessage(err, 'Error while getting members. ')
}) })
@@ -882,7 +883,7 @@ export class SASViyaApiClient {
const { result: folder } = await this.requestClient const { result: folder } = await this.requestClient
.get<Folder>(`${this.serverUrl}${url}`, accessToken) .get<Folder>(`${this.serverUrl}${url}`, accessToken)
.catch((err) => { .catch(err => {
if (err instanceof CertificateError) throw err if (err instanceof CertificateError) throw err
return { result: null } return { result: null }
}) })
@@ -904,7 +905,7 @@ export class SASViyaApiClient {
const { result: folder } = await this.requestClient const { result: folder } = await this.requestClient
.get<Folder>(`${this.serverUrl}${url}`, accessToken) .get<Folder>(`${this.serverUrl}${url}`, accessToken)
.catch((err) => { .catch(err => {
if (err instanceof CertificateError) throw err if (err instanceof CertificateError) throw err
return { result: null } return { result: null }
}) })
@@ -1024,7 +1025,7 @@ export class SASViyaApiClient {
}, },
accessToken accessToken
) )
.catch((err) => { .catch(err => {
if (err.code && err.code === 'ENOTFOUND') { if (err.code && err.code === 'ENOTFOUND') {
const notFoundError = { const notFoundError = {
body: { body: {

View File

@@ -754,7 +754,9 @@ export default class SASjs {
* @param data A json object that contains one or more tables, it can also be null * @param data A json object that contains one or more tables, it can also be null
* @returns An object which contains two attributes: 1) status: boolean, 2) msg: string * @returns An object which contains two attributes: 1) status: boolean, 2) msg: string
*/ */
private validateInput(data: { [key: string]: any } | null): { private validateInput(
data: { [key: string]: any } | null
): {
status: boolean status: boolean
msg: string msg: string
} { } {
@@ -978,7 +980,7 @@ export default class SASjs {
* @param accessToken - an access token for an authorised user. * @param accessToken - an access token for an authorised user.
*/ */
public async fetchLogFileContent(logUrl: string, accessToken?: string) { public async fetchLogFileContent(logUrl: string, accessToken?: string) {
return await this.requestClient!.get(logUrl, accessToken).then((res) => { return await this.requestClient!.get(logUrl, accessToken).then(res => {
if (!res) if (!res)
return Promise.reject( return Promise.reject(
new ErrorResponse( new ErrorResponse(

View File

@@ -87,7 +87,7 @@ export class SASjsApiClient {
.join('\n') .join('\n')
} }
}) })
.catch((err) => { .catch(err => {
parsedSasjsServerLog = err parsedSasjsServerLog = err
}) })

View File

@@ -58,9 +58,9 @@ export class SessionManager {
return await this.requestClient return await this.requestClient
.delete<Session>(`/compute/sessions/${id}`, accessToken) .delete<Session>(`/compute/sessions/${id}`, accessToken)
.then(() => { .then(() => {
this.sessions = this.sessions.filter((s) => s.id !== id) this.sessions = this.sessions.filter(s => s.id !== id)
}) })
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while deleting session. ') throw prefixMessage(err, 'Error while deleting session. ')
}) })
} }
@@ -68,7 +68,7 @@ export class SessionManager {
private async createSessions(accessToken?: string) { private async createSessions(accessToken?: string) {
if (!this.sessions.length) { if (!this.sessions.length) {
if (!this.currentContext) { if (!this.currentContext) {
await this.setCurrentContext(accessToken).catch((err) => { await this.setCurrentContext(accessToken).catch(err => {
throw err throw err
}) })
} }
@@ -76,12 +76,12 @@ export class SessionManager {
await asyncForEach(new Array(MAX_SESSION_COUNT), async () => { await asyncForEach(new Array(MAX_SESSION_COUNT), async () => {
const createdSession = await this.createAndWaitForSession( const createdSession = await this.createAndWaitForSession(
accessToken accessToken
).catch((err) => { ).catch(err => {
throw err throw err
}) })
this.sessions.push(createdSession) this.sessions.push(createdSession)
}).catch((err) => { }).catch(err => {
throw err throw err
}) })
} }
@@ -96,7 +96,7 @@ export class SessionManager {
{}, {},
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw err throw err
}) })
@@ -113,7 +113,7 @@ export class SessionManager {
.get<{ .get<{
items: Context[] items: Context[]
}>(`${this.serverUrl}/compute/contexts?limit=10000`, accessToken) }>(`${this.serverUrl}/compute/contexts?limit=10000`, accessToken)
.catch((err) => { .catch(err => {
throw err throw err
}) })
@@ -173,14 +173,16 @@ export class SessionManager {
this.printedSessionState.printed = true this.printedSessionState.printed = true
} }
const { result: state, responseStatus: responseStatus } = const {
await this.getSessionState( result: state,
`${this.serverUrl}${stateLink.href}?wait=30`, responseStatus: responseStatus
etag!, } = await this.getSessionState(
accessToken `${this.serverUrl}${stateLink.href}?wait=30`,
).catch((err) => { etag!,
throw prefixMessage(err, 'Error while getting session state.') accessToken
}) ).catch(err => {
throw prefixMessage(err, 'Error while getting session state.')
})
sessionState = state.trim() sessionState = state.trim()
@@ -232,11 +234,11 @@ export class SessionManager {
) { ) {
return await this.requestClient return await this.requestClient
.get(url, accessToken, 'text/plain', { 'If-None-Match': etag }) .get(url, accessToken, 'text/plain', { 'If-None-Match': etag })
.then((res) => ({ .then(res => ({
result: res.result as string, result: res.result as string,
responseStatus: res.status responseStatus: res.status
})) }))
.catch((err) => { .catch(err => {
throw err throw err
}) })
} }
@@ -247,7 +249,7 @@ export class SessionManager {
`${this.serverUrl}/compute/sessions/${sessionId}/variables/${variable}`, `${this.serverUrl}/compute/sessions/${sessionId}/variables/${variable}`,
accessToken accessToken
) )
.catch((err) => { .catch(err => {
throw prefixMessage( throw prefixMessage(
err, err,
`Error while fetching session variable '${variable}'.` `Error while fetching session variable '${variable}'.`

View File

@@ -55,24 +55,25 @@ export async function executeScript(
try { try {
let executionSessionId: string let executionSessionId: string
const session = await sessionManager const session = await sessionManager.getSession(access_token).catch(err => {
.getSession(access_token) throw prefixMessage(err, 'Error while getting session. ')
.catch((err) => { })
throw prefixMessage(err, 'Error while getting session. ')
})
executionSessionId = session!.id executionSessionId = session!.id
if (printPid) { if (printPid) {
const { result: jobIdVariable } = await sessionManager const { result: jobIdVariable } = await sessionManager
.getVariable(executionSessionId, 'SYSJOBID', access_token) .getVariable(executionSessionId, 'SYSJOBID', access_token)
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting session variable. ') throw prefixMessage(err, 'Error while getting session variable. ')
}) })
if (jobIdVariable && jobIdVariable.value) { if (jobIdVariable && jobIdVariable.value) {
const relativeJobPath = rootFolderName const relativeJobPath = rootFolderName
? jobPath.split(rootFolderName).join('').replace(/^\//, '') ? jobPath
.split(rootFolderName)
.join('')
.replace(/^\//, '')
: jobPath : jobPath
const logger = process.logger || console const logger = process.logger || console
@@ -126,7 +127,7 @@ export async function executeScript(
if (data) { if (data) {
if (JSON.stringify(data).includes(';')) { if (JSON.stringify(data).includes(';')) {
files = await uploadTables(requestClient, data, access_token).catch( files = await uploadTables(requestClient, data, access_token).catch(
(err) => { err => {
throw prefixMessage(err, 'Error while uploading tables. ') throw prefixMessage(err, 'Error while uploading tables. ')
} }
) )
@@ -159,7 +160,7 @@ export async function executeScript(
jobRequestBody, jobRequestBody,
access_token access_token
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while posting job. ') throw prefixMessage(err, 'Error while posting job. ')
}) })
@@ -180,7 +181,7 @@ export async function executeScript(
debug, debug,
authConfig, authConfig,
pollOptions pollOptions
).catch(async (err) => { ).catch(async err => {
const error = err?.response?.data const error = err?.response?.data
const result = /err=[0-9]*,/.exec(error) const result = /err=[0-9]*,/.exec(error)
@@ -208,14 +209,14 @@ export async function executeScript(
`/compute/sessions/${executionSessionId}/jobs/${postedJob.id}`, `/compute/sessions/${executionSessionId}/jobs/${postedJob.id}`,
access_token access_token
) )
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting job. ') throw prefixMessage(err, 'Error while getting job. ')
}) })
let jobResult let jobResult
let log = '' let log = ''
const logLink = currentJob.links.find((l) => l.rel === 'log') const logLink = currentJob.links.find(l => l.rel === 'log')
if (debug && logLink) { if (debug && logLink) {
const logUrl = `${logLink.href}/content` const logUrl = `${logLink.href}/content`
@@ -240,7 +241,7 @@ export async function executeScript(
jobResult = await requestClient jobResult = await requestClient
.get<any>(resultLink, access_token, 'text/plain') .get<any>(resultLink, access_token, 'text/plain')
.catch(async (e) => { .catch(async e => {
if (e instanceof NotFoundError) { if (e instanceof NotFoundError) {
if (logLink) { if (logLink) {
const logUrl = `${logLink.href}/content` const logUrl = `${logLink.href}/content`
@@ -266,7 +267,7 @@ export async function executeScript(
await sessionManager await sessionManager
.clearSession(executionSessionId, access_token) .clearSession(executionSessionId, access_token)
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while clearing session. ') throw prefixMessage(err, 'Error while clearing session. ')
}) })

View File

@@ -37,7 +37,7 @@ export async function pollJobState(
'', '',
debug, debug,
authConfig authConfig
).catch((err) => { ).catch(err => {
logger.error( logger.error(
`Error fetching job state from ${stateLink.href}. Starting poll, assuming job to be running.`, `Error fetching job state from ${stateLink.href}. Starting poll, assuming job to be running.`,
err err
@@ -139,7 +139,7 @@ const getJobState = async (
{}, {},
debug debug
) )
.catch((err) => { .catch(err => {
throw new JobStatePollError(job.id, err) throw new JobStatePollError(job.id, err)
}) })
@@ -192,7 +192,7 @@ const doPoll = async (
state, state,
debug, debug,
authConfig authConfig
).catch((err) => { ).catch(err => {
errorCount++ errorCount++
if (pollCount >= maxPollCount || errorCount >= maxErrorCount) { if (pollCount >= maxPollCount || errorCount >= maxErrorCount) {
throw err throw err

View File

@@ -36,7 +36,7 @@ export async function saveLog(
} }
const logger = process.logger || console const logger = process.logger || console
const jobLogUrl = job.links.find((l) => l.rel === 'log') const jobLogUrl = job.links.find(l => l.rel === 'log')
if (!jobLogUrl) { if (!jobLogUrl) {
throw new Error(`Log URL for job ${job.id} was not found.`) throw new Error(`Log URL for job ${job.id} was not found.`)

View File

@@ -80,7 +80,7 @@ describe('executeScript', () => {
'test', 'test',
['%put hello'], ['%put hello'],
'test context' 'test context'
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while getting session.') expect(error).toContain('Error while getting session.')
}) })
@@ -128,7 +128,7 @@ describe('executeScript', () => {
false, false,
defaultPollOptions, defaultPollOptions,
true true
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while getting session variable.') expect(error).toContain('Error while getting session variable.')
}) })
@@ -297,7 +297,7 @@ describe('executeScript', () => {
false, false,
defaultPollOptions, defaultPollOptions,
true true
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while posting job') expect(error).toContain('Error while posting job')
}) })
@@ -367,7 +367,7 @@ describe('executeScript', () => {
true, true,
defaultPollOptions, defaultPollOptions,
true true
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while polling job status.') expect(error).toContain('Error while polling job status.')
}) })
@@ -393,12 +393,12 @@ describe('executeScript', () => {
true, true,
defaultPollOptions, defaultPollOptions,
true true
).catch((e) => e) ).catch(e => e)
expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith( expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith(
requestClient, requestClient,
mockAuthConfig.access_token, mockAuthConfig.access_token,
mockJob.links.find((l) => l.rel === 'up')!.href + '/log', mockJob.links.find(l => l.rel === 'up')!.href + '/log',
1000000 1000000
) )
expect(error.log).toEqual('Test Log') expect(error.log).toEqual('Test Log')
@@ -424,7 +424,7 @@ describe('executeScript', () => {
expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith( expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith(
requestClient, requestClient,
mockAuthConfig.access_token, mockAuthConfig.access_token,
mockJob.links.find((l) => l.rel === 'log')!.href + '/content', mockJob.links.find(l => l.rel === 'log')!.href + '/content',
mockJob.logStatistics.lineCount mockJob.logStatistics.lineCount
) )
}) })
@@ -468,12 +468,12 @@ describe('executeScript', () => {
true, true,
defaultPollOptions, defaultPollOptions,
true true
).catch((e) => e) ).catch(e => e)
expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith( expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith(
requestClient, requestClient,
mockAuthConfig.access_token, mockAuthConfig.access_token,
mockJob.links.find((l) => l.rel === 'log')!.href + '/content', mockJob.links.find(l => l.rel === 'log')!.href + '/content',
mockJob.logStatistics.lineCount mockJob.logStatistics.lineCount
) )
@@ -501,12 +501,12 @@ describe('executeScript', () => {
true, true,
defaultPollOptions, defaultPollOptions,
true true
).catch((e) => e) ).catch(e => e)
expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith( expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith(
requestClient, requestClient,
mockAuthConfig.access_token, mockAuthConfig.access_token,
mockJob.links.find((l) => l.rel === 'log')!.href + '/content', mockJob.links.find(l => l.rel === 'log')!.href + '/content',
mockJob.logStatistics.lineCount mockJob.logStatistics.lineCount
) )
@@ -561,7 +561,7 @@ describe('executeScript', () => {
true, true,
defaultPollOptions, defaultPollOptions,
true true
).catch((e) => e) ).catch(e => e)
expect(requestClient.get).toHaveBeenCalledWith( expect(requestClient.get).toHaveBeenCalledWith(
`/compute/sessions/${mockSession.id}/filerefs/_webout/content`, `/compute/sessions/${mockSession.id}/filerefs/_webout/content`,
@@ -572,7 +572,7 @@ describe('executeScript', () => {
expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith( expect(fetchLogsModule.fetchLogByChunks).toHaveBeenCalledWith(
requestClient, requestClient,
mockAuthConfig.access_token, mockAuthConfig.access_token,
mockJob.links.find((l) => l.rel === 'log')!.href + '/content', mockJob.links.find(l => l.rel === 'log')!.href + '/content',
mockJob.logStatistics.lineCount mockJob.logStatistics.lineCount
) )
@@ -622,7 +622,7 @@ describe('executeScript', () => {
true, true,
defaultPollOptions, defaultPollOptions,
true true
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while clearing session.') expect(error).toContain('Error while clearing session.')
}) })

View File

@@ -37,5 +37,5 @@ const setupMocks = () => {
jest.mock('@sasjs/utils/file/file') jest.mock('@sasjs/utils/file/file')
jest jest
.spyOn(fileModule, 'createWriteStream') .spyOn(fileModule, 'createWriteStream')
.mockImplementation(() => Promise.resolve({} as unknown as WriteStream)) .mockImplementation(() => Promise.resolve(({} as unknown) as WriteStream))
} }

View File

@@ -55,11 +55,11 @@ describe('pollJobState', () => {
it('should throw an error if the job does not have a state link', async () => { it('should throw an error if the job does not have a state link', async () => {
const error = await pollJobState( const error = await pollJobState(
requestClient, requestClient,
{ ...mockJob, links: mockJob.links.filter((l) => l.rel !== 'state') }, { ...mockJob, links: mockJob.links.filter(l => l.rel !== 'state') },
false, false,
undefined, undefined,
defaultPollOptions defaultPollOptions
).catch((e) => e) ).catch(e => e)
expect((error as Error).message).toContain('Job state link was not found.') expect((error as Error).message).toContain('Job state link was not found.')
}) })
@@ -238,7 +238,7 @@ describe('pollJobState', () => {
false, false,
undefined, undefined,
defaultPollOptions defaultPollOptions
).catch((e) => e) ).catch(e => e)
expect(error.message).toEqual( expect(error.message).toEqual(
'Error while polling job state for job j0b: Status Error' 'Error while polling job state for job j0b: Status Error'
@@ -267,13 +267,13 @@ const setupMocks = () => {
.mockImplementation(() => Promise.resolve()) .mockImplementation(() => Promise.resolve())
jest jest
.spyOn(getFileStreamModule, 'getFileStream') .spyOn(getFileStreamModule, 'getFileStream')
.mockImplementation(() => Promise.resolve({} as unknown as WriteStream)) .mockImplementation(() => Promise.resolve(({} as unknown) as WriteStream))
jest.spyOn(isNodeModule, 'isNode').mockImplementation(() => true) jest.spyOn(isNodeModule, 'isNode').mockImplementation(() => true)
} }
const mockSimplePoll = (runningCount = 2) => { const mockSimplePoll = (runningCount = 2) => {
let count = 0 let count = 0
jest.spyOn(requestClient, 'get').mockImplementation((url) => { jest.spyOn(requestClient, 'get').mockImplementation(url => {
count++ count++
if (url.includes('job')) { if (url.includes('job')) {
return Promise.resolve({ result: mockJob, etag: '', status: 200 }) return Promise.resolve({ result: mockJob, etag: '', status: 200 })
@@ -293,7 +293,7 @@ const mockSimplePoll = (runningCount = 2) => {
const mockRunningPoll = () => { const mockRunningPoll = () => {
let count = 0 let count = 0
jest.spyOn(requestClient, 'get').mockImplementation((url) => { jest.spyOn(requestClient, 'get').mockImplementation(url => {
count++ count++
if (url.includes('job')) { if (url.includes('job')) {
return Promise.resolve({ result: mockJob, etag: '', status: 200 }) return Promise.resolve({ result: mockJob, etag: '', status: 200 })
@@ -308,7 +308,7 @@ const mockRunningPoll = () => {
const mockLongPoll = () => { const mockLongPoll = () => {
let count = 0 let count = 0
jest.spyOn(requestClient, 'get').mockImplementation((url) => { jest.spyOn(requestClient, 'get').mockImplementation(url => {
count++ count++
if (url.includes('job')) { if (url.includes('job')) {
return Promise.resolve({ result: mockJob, etag: '', status: 200 }) return Promise.resolve({ result: mockJob, etag: '', status: 200 })
@@ -323,7 +323,7 @@ const mockLongPoll = () => {
const mockPollWithSingleError = () => { const mockPollWithSingleError = () => {
let count = 0 let count = 0
jest.spyOn(requestClient, 'get').mockImplementation((url) => { jest.spyOn(requestClient, 'get').mockImplementation(url => {
count++ count++
if (url.includes('job')) { if (url.includes('job')) {
return Promise.resolve({ result: mockJob, etag: '', status: 200 }) return Promise.resolve({ result: mockJob, etag: '', status: 200 })
@@ -340,7 +340,7 @@ const mockPollWithSingleError = () => {
} }
const mockErroredPoll = () => { const mockErroredPoll = () => {
jest.spyOn(requestClient, 'get').mockImplementation((url) => { jest.spyOn(requestClient, 'get').mockImplementation(url => {
if (url.includes('job')) { if (url.includes('job')) {
return Promise.resolve({ result: mockJob, etag: '', status: 200 }) return Promise.resolve({ result: mockJob, etag: '', status: 200 })
} }

View File

@@ -7,7 +7,7 @@ import { mockJob } from './mockResponses'
import { WriteStream } from '../../../types' import { WriteStream } from '../../../types'
const requestClient = new (<jest.Mock<RequestClient>>RequestClient)() const requestClient = new (<jest.Mock<RequestClient>>RequestClient)()
const stream = {} as unknown as WriteStream const stream = ({} as unknown) as WriteStream
describe('saveLog', () => { describe('saveLog', () => {
beforeEach(() => { beforeEach(() => {
@@ -17,7 +17,7 @@ describe('saveLog', () => {
it('should throw an error when a valid access token is not provided', async () => { it('should throw an error when a valid access token is not provided', async () => {
const error = await saveLog(mockJob, requestClient, 0, 100, stream).catch( const error = await saveLog(mockJob, requestClient, 0, 100, stream).catch(
(e) => e e => e
) )
expect(error.message).toContain( expect(error.message).toContain(
@@ -27,13 +27,13 @@ describe('saveLog', () => {
it('should throw an error when the log URL is not available', async () => { it('should throw an error when the log URL is not available', async () => {
const error = await saveLog( const error = await saveLog(
{ ...mockJob, links: mockJob.links.filter((l) => l.rel !== 'log') }, { ...mockJob, links: mockJob.links.filter(l => l.rel !== 'log') },
requestClient, requestClient,
0, 0,
100, 100,
stream, stream,
't0k3n' 't0k3n'
).catch((e) => e) ).catch(e => e)
expect(error.message).toContain( expect(error.message).toContain(
`Log URL for job ${mockJob.id} was not found.` `Log URL for job ${mockJob.id} was not found.`

View File

@@ -29,9 +29,7 @@ describe('uploadTables', () => {
.spyOn(convertToCsvModule, 'convertToCSV') .spyOn(convertToCsvModule, 'convertToCSV')
.mockImplementation(() => 'ERROR: LARGE STRING LENGTH') .mockImplementation(() => 'ERROR: LARGE STRING LENGTH')
const error = await uploadTables(requestClient, data, 't0k3n').catch( const error = await uploadTables(requestClient, data, 't0k3n').catch(e => e)
(e) => e
)
expect(requestClient.uploadFile).not.toHaveBeenCalled() expect(requestClient.uploadFile).not.toHaveBeenCalled()
expect(error.message).toEqual( expect(error.message).toEqual(
@@ -45,9 +43,7 @@ describe('uploadTables', () => {
.spyOn(requestClient, 'uploadFile') .spyOn(requestClient, 'uploadFile')
.mockImplementation(() => Promise.reject('Upload Error')) .mockImplementation(() => Promise.reject('Upload Error'))
const error = await uploadTables(requestClient, data, 't0k3n').catch( const error = await uploadTables(requestClient, data, 't0k3n').catch(e => e)
(e) => e
)
expect(error).toContain('Error while uploading file.') expect(error).toContain('Error while uploading file.')
}) })

View File

@@ -28,7 +28,7 @@ describe('writeStream', () => {
jest jest
.spyOn(stream, 'write') .spyOn(stream, 'write')
.mockImplementation((_, callback) => callback(new Error('Test Error'))) .mockImplementation((_, callback) => callback(new Error('Test Error')))
const error = await writeStream(stream, content).catch((e) => e) const error = await writeStream(stream, content).catch(e => e)
expect(error.message).toEqual('Test Error') expect(error.message).toEqual('Test Error')
}) })

View File

@@ -27,7 +27,7 @@ export async function uploadTables(
const uploadResponse = await requestClient const uploadResponse = await requestClient
.uploadFile(`/files/files#rawUpload`, csv, accessToken) .uploadFile(`/files/files#rawUpload`, csv, accessToken)
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while uploading file. ') throw prefixMessage(err, 'Error while uploading file. ')
}) })

View File

@@ -4,7 +4,7 @@ export const writeStream = async (
stream: WriteStream, stream: WriteStream,
content: string content: string
): Promise<void> => ): Promise<void> =>
stream.write(content + '\n', (e) => { stream.write(content + '\n', e => {
if (e) return Promise.reject(e) if (e) return Promise.reject(e)
return Promise.resolve() return Promise.resolve()

View File

@@ -33,8 +33,10 @@ export class AuthManager {
public async redirectedLogIn({ public async redirectedLogIn({
onLoggedOut onLoggedOut
}: LoginOptions): Promise<LoginResult> { }: LoginOptions): Promise<LoginResult> {
const { isLoggedIn: isLoggedInAlready, userName: currentSessionUsername } = const {
await this.fetchUserName() isLoggedIn: isLoggedInAlready,
userName: currentSessionUsername
} = await this.fetchUserName()
if (isLoggedInAlready) { if (isLoggedInAlready) {
await this.loginCallback() await this.loginCallback()

View File

@@ -20,7 +20,7 @@ export async function getAccessTokenForSasjs(
return await requestClient return await requestClient
.post(url, data, undefined) .post(url, data, undefined)
.then((res) => { .then(res => {
const sasAuth = res.result as { const sasAuth = res.result as {
accessToken: string accessToken: string
refreshToken: string refreshToken: string
@@ -30,7 +30,7 @@ export async function getAccessTokenForSasjs(
refresh_token: sasAuth.refreshToken refresh_token: sasAuth.refreshToken
} }
}) })
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting access token. ') throw prefixMessage(err, 'Error while getting access token. ')
}) })
} }

View File

@@ -35,8 +35,8 @@ export async function getAccessTokenForViya(
const authResponse = await requestClient const authResponse = await requestClient
.post(url, data, undefined, 'application/x-www-form-urlencoded', headers) .post(url, data, undefined, 'application/x-www-form-urlencoded', headers)
.then((res) => res.result as SasAuthResponse) .then(res => res.result as SasAuthResponse)
.catch((err) => { .catch(err => {
if (err instanceof CertificateError) throw err if (err instanceof CertificateError) throw err
throw prefixMessage(err, 'Error while getting access token. ') throw prefixMessage(err, 'Error while getting access token. ')
}) })

View File

@@ -17,7 +17,7 @@ export async function refreshTokensForSasjs(
const authResponse = await requestClient const authResponse = await requestClient
.post(url, undefined, undefined, undefined, headers) .post(url, undefined, undefined, undefined, headers)
.then((res) => { .then(res => {
const sasAuth = res.result as { const sasAuth = res.result as {
accessToken: string accessToken: string
refreshToken: string refreshToken: string
@@ -27,7 +27,7 @@ export async function refreshTokensForSasjs(
refresh_token: sasAuth.refreshToken refresh_token: sasAuth.refreshToken
} }
}) })
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while refreshing tokens') throw prefixMessage(err, 'Error while refreshing tokens')
}) })

View File

@@ -40,8 +40,8 @@ export async function refreshTokensForViya(
'multipart/form-data; boundary=' + (formData as any)._boundary, 'multipart/form-data; boundary=' + (formData as any)._boundary,
headers headers
) )
.then((res) => res.result) .then(res => res.result)
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while refreshing tokens') throw prefixMessage(err, 'Error while refreshing tokens')
}) })

View File

@@ -321,7 +321,7 @@ describe('AuthManager', () => {
jest jest
.spyOn(openWebPageModule, 'openWebPage') .spyOn(openWebPageModule, 'openWebPage')
.mockImplementation(() => .mockImplementation(() =>
Promise.resolve({ close: jest.fn() } as unknown as Window) Promise.resolve(({ close: jest.fn() } as unknown) as Window)
) )
jest.mock('../verifySasViyaLogin') jest.mock('../verifySasViyaLogin')
jest jest

View File

@@ -53,7 +53,7 @@ describe('getAccessTokenForSasjs', () => {
requestClient, requestClient,
authConfig.client, authConfig.client,
authConfig.refresh_token authConfig.refresh_token
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while getting access token') expect(error).toContain('Error while getting access token')
}) })

View File

@@ -64,7 +64,7 @@ describe('getAccessTokenForViya', () => {
authConfig.client, authConfig.client,
authConfig.secret, authConfig.secret,
authConfig.refresh_token authConfig.refresh_token
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while getting access token') expect(error).toContain('Error while getting access token')
}) })

View File

@@ -62,7 +62,7 @@ describe('getTokens', () => {
const expectedError = const expectedError =
'Unable to obtain new access token. Your refresh token has expired.' 'Unable to obtain new access token. Your refresh token has expired.'
const error = await getTokens(requestClient, authConfig).catch((e) => e) const error = await getTokens(requestClient, authConfig).catch(e => e)
expect(error.message).toEqual(expectedError) expect(error.message).toEqual(expectedError)
}) })

View File

@@ -10,7 +10,7 @@ describe('openWebPage', () => {
describe('window.open is not blocked', () => { describe('window.open is not blocked', () => {
const mockedOpen = jest const mockedOpen = jest
.fn() .fn()
.mockImplementation(() => ({} as unknown as Window)) .mockImplementation(() => (({} as unknown) as Window))
const originalOpen = window.open const originalOpen = window.open
beforeAll(() => { beforeAll(() => {

View File

@@ -35,7 +35,7 @@ describe('refreshTokensForSasjs', () => {
const error = await refreshTokensForSasjs( const error = await refreshTokensForSasjs(
requestClient, requestClient,
refresh_token refresh_token
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while refreshing tokens') expect(error).toContain('Error while refreshing tokens')
}) })

View File

@@ -63,7 +63,7 @@ describe('refreshTokensForViya', () => {
authConfig.client, authConfig.client,
authConfig.secret, authConfig.secret,
authConfig.refresh_token authConfig.refresh_token
).catch((e) => e) ).catch(e => e)
expect(error).toContain('Error while refreshing tokens') expect(error).toContain('Error while refreshing tokens')
}) })

View File

@@ -15,12 +15,12 @@ describe('verifySas9Login', () => {
}) })
it('should return isLoggedIn true by checking state of popup', async () => { it('should return isLoggedIn true by checking state of popup', async () => {
const popup = { const popup = ({
window: { window: {
location: { href: serverUrl + `/SASLogon/home` }, location: { href: serverUrl + `/SASLogon/home` },
document: { body: { innerText: '<h3>You have signed in.</h3>' } } document: { body: { innerText: '<h3>You have signed in.</h3>' } }
} }
} as unknown as Window } as unknown) as Window
await expect(verifySas9Login(popup)).resolves.toEqual({ await expect(verifySas9Login(popup)).resolves.toEqual({
isLoggedIn: true isLoggedIn: true
@@ -28,7 +28,7 @@ describe('verifySas9Login', () => {
}) })
it('should return isLoggedIn false if user closed popup, already', async () => { it('should return isLoggedIn false if user closed popup, already', async () => {
const popup: Window = { closed: true } as unknown as Window const popup: Window = ({ closed: true } as unknown) as Window
await expect(verifySas9Login(popup)).resolves.toEqual({ await expect(verifySas9Login(popup)).resolves.toEqual({
isLoggedIn: false isLoggedIn: false

View File

@@ -16,12 +16,12 @@ describe('verifySasViyaLogin', () => {
}) })
it('should return isLoggedIn true by checking state of popup', async () => { it('should return isLoggedIn true by checking state of popup', async () => {
const popup = { const popup = ({
window: { window: {
location: { href: serverUrl + `/SASLogon/home` }, location: { href: serverUrl + `/SASLogon/home` },
document: { body: { innerText: '<h3>You have signed in.</h3>' } } document: { body: { innerText: '<h3>You have signed in.</h3>' } }
} }
} as unknown as Window } as unknown) as Window
await expect(verifySasViyaLogin(popup)).resolves.toEqual({ await expect(verifySasViyaLogin(popup)).resolves.toEqual({
isLoggedIn: true isLoggedIn: true
@@ -29,7 +29,7 @@ describe('verifySasViyaLogin', () => {
}) })
it('should return isLoggedIn false if user closed popup, already', async () => { it('should return isLoggedIn false if user closed popup, already', async () => {
const popup: Window = { closed: true } as unknown as Window const popup: Window = ({ closed: true } as unknown) as Window
await expect(verifySasViyaLogin(popup)).resolves.toEqual({ await expect(verifySasViyaLogin(popup)).resolves.toEqual({
isLoggedIn: false isLoggedIn: false

View File

@@ -1,6 +1,8 @@
import { delay } from '../utils' import { delay } from '../utils'
export async function verifySas9Login(loginPopup: Window): Promise<{ export async function verifySas9Login(
loginPopup: Window
): Promise<{
isLoggedIn: boolean isLoggedIn: boolean
}> { }> {
let isLoggedIn = false let isLoggedIn = false

View File

@@ -1,6 +1,8 @@
import { delay } from '../utils' import { delay } from '../utils'
export async function verifySasViyaLogin(loginPopup: Window): Promise<{ export async function verifySasViyaLogin(
loginPopup: Window
): Promise<{
isLoggedIn: boolean isLoggedIn: boolean
}> { }> {
let isLoggedIn = false let isLoggedIn = false

View File

@@ -28,7 +28,7 @@ export const generateTableUploadForm = (
const csvChunks = splitChunks(csv) const csvChunks = splitChunks(csv)
// append chunks to form data with same key // append chunks to form data with same key
csvChunks.map((chunk) => { csvChunks.map(chunk => {
formData.append(`sasjs${tableCounter}data`, chunk) formData.append(`sasjs${tableCounter}data`, chunk)
}) })
} else { } else {

View File

@@ -7,7 +7,6 @@ describe('generateFileUploadForm', () => {
} }
const BlobMock = jest.fn() const BlobMock = jest.fn()
;(global as any).FormData = FormDataMock ;(global as any).FormData = FormDataMock
;(global as any).Blob = BlobMock ;(global as any).Blob = BlobMock
}) })

View File

@@ -34,7 +34,7 @@ export class ComputeJobExecutor extends BaseJobExecutor {
waitForResult, waitForResult,
expectWebout expectWebout
) )
.then((response) => { .then(response => {
this.sasViyaApiClient.appendRequest(response, sasJob, config.debug) this.sasViyaApiClient.appendRequest(response, sasJob, config.debug)
resolve(response.result) resolve(response.result)
}) })

View File

@@ -52,9 +52,8 @@ export class FileUploader extends BaseJobExecutor {
const program = config.appLoc const program = config.appLoc
? config.appLoc.replace(/\/?$/, '/') + sasJob.replace(/^\//, '') ? config.appLoc.replace(/\/?$/, '/') + sasJob.replace(/^\//, '')
: sasJob : sasJob
const uploadUrl = `${this.jobsPath}/?${ const uploadUrl = `${this.jobsPath}/?${'_program=' +
'_program=' + program program}${paramsString}`
}${paramsString}`
const formData = new FormData() const formData = new FormData()

View File

@@ -50,7 +50,7 @@ export class Sas9JobExecutor extends BaseJobExecutor {
if (data) { if (data) {
try { try {
formData = generateFileUploadForm(formData, data) formData = generateFileUploadForm(formData, data)
} catch (e: any) { } catch (e) {
return Promise.reject(new ErrorResponse(e?.message, e)) return Promise.reject(new ErrorResponse(e?.message, e))
} }
} else { } else {

View File

@@ -59,7 +59,7 @@ export class WebJobExecutor extends BaseJobExecutor {
let jobUri let jobUri
try { try {
jobUri = await this.getJobUri(sasJob) jobUri = await this.getJobUri(sasJob)
} catch (e: any) { } catch (e) {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
if (e instanceof LoginRequiredError) { if (e instanceof LoginRequiredError) {
this.appendWaitingRequest(() => { this.appendWaitingRequest(() => {
@@ -128,17 +128,19 @@ export class WebJobExecutor extends BaseJobExecutor {
// file upload approach // file upload approach
try { try {
formData = generateFileUploadForm(formData, data) formData = generateFileUploadForm(formData, data)
} catch (e: any) { } catch (e) {
return Promise.reject(new ErrorResponse(e?.message, e)) return Promise.reject(new ErrorResponse(e?.message, e))
} }
} else { } else {
// param based approach // param based approach
try { try {
const { formData: newFormData, requestParams: params } = const {
generateTableUploadForm(formData, data) formData: newFormData,
requestParams: params
} = generateTableUploadForm(formData, data)
formData = newFormData formData = newFormData
requestParams = { ...requestParams, ...params } requestParams = { ...requestParams, ...params }
} catch (e: any) { } catch (e) {
return Promise.reject(new ErrorResponse(e?.message, e)) return Promise.reject(new ErrorResponse(e?.message, e))
} }
} }

View File

@@ -202,17 +202,17 @@ export class RequestClient implements HttpClient {
return this.httpClient return this.httpClient
.get<T>(url, requestConfig) .get<T>(url, requestConfig)
.then((response) => { .then(response => {
throwIfError(response) throwIfError(response)
return this.parseResponse<T>(response) return this.parseResponse<T>(response)
}) })
.catch(async (e) => { .catch(async e => {
return await this.handleError( return await this.handleError(
e, e,
() => () =>
this.get<T>(url, accessToken, contentType, overrideHeaders).catch( this.get<T>(url, accessToken, contentType, overrideHeaders).catch(
(err) => { err => {
throw prefixMessage( throw prefixMessage(
err, err,
'Error while executing handle error callback. ' 'Error while executing handle error callback. '
@@ -243,12 +243,12 @@ export class RequestClient implements HttpClient {
withCredentials: true, withCredentials: true,
...additionalSettings ...additionalSettings
}) })
.then((response) => { .then(response => {
throwIfError(response) throwIfError(response)
return this.parseResponse<T>(response) return this.parseResponse<T>(response)
}) })
.catch(async (e) => { .catch(async e => {
return await this.handleError(e, () => return await this.handleError(e, () =>
this.post<T>(url, data, accessToken, contentType, overrideHeaders) this.post<T>(url, data, accessToken, contentType, overrideHeaders)
) )
@@ -268,11 +268,11 @@ export class RequestClient implements HttpClient {
return this.httpClient return this.httpClient
.put<T>(url, data, { headers, withCredentials: true }) .put<T>(url, data, { headers, withCredentials: true })
.then((response) => { .then(response => {
throwIfError(response) throwIfError(response)
return this.parseResponse<T>(response) return this.parseResponse<T>(response)
}) })
.catch(async (e) => { .catch(async e => {
return await this.handleError(e, () => return await this.handleError(e, () =>
this.put<T>(url, data, accessToken, overrideHeaders) this.put<T>(url, data, accessToken, overrideHeaders)
) )
@@ -287,11 +287,11 @@ export class RequestClient implements HttpClient {
return this.httpClient return this.httpClient
.delete<T>(url, { headers, withCredentials: true }) .delete<T>(url, { headers, withCredentials: true })
.then((response) => { .then(response => {
throwIfError(response) throwIfError(response)
return this.parseResponse<T>(response) return this.parseResponse<T>(response)
}) })
.catch(async (e) => { .catch(async e => {
return await this.handleError(e, () => this.delete<T>(url, accessToken)) return await this.handleError(e, () => this.delete<T>(url, accessToken))
}) })
} }
@@ -305,11 +305,11 @@ export class RequestClient implements HttpClient {
return this.httpClient return this.httpClient
.patch<T>(url, data, { headers, withCredentials: true }) .patch<T>(url, data, { headers, withCredentials: true })
.then((response) => { .then(response => {
throwIfError(response) throwIfError(response)
return this.parseResponse<T>(response) return this.parseResponse<T>(response)
}) })
.catch(async (e) => { .catch(async e => {
return await this.handleError(e, () => return await this.handleError(e, () =>
this.patch<T>(url, data, accessToken) this.patch<T>(url, data, accessToken)
) )
@@ -324,21 +324,22 @@ export class RequestClient implements HttpClient {
const headers = this.getHeaders(accessToken, 'application/json') const headers = this.getHeaders(accessToken, 'application/json')
if (this.fileUploadCsrfToken?.value) { if (this.fileUploadCsrfToken?.value) {
headers[this.fileUploadCsrfToken.headerName] = headers[
this.fileUploadCsrfToken.value this.fileUploadCsrfToken.headerName
] = this.fileUploadCsrfToken.value
} }
try { try {
const response = await this.httpClient.post(url, content, { const response = await this.httpClient.post(url, content, {
headers, headers,
transformRequest: (requestBody) => requestBody transformRequest: requestBody => requestBody
}) })
return { return {
result: response.data, result: response.data,
etag: response.headers['etag'] as string etag: response.headers['etag'] as string
} }
} catch (e: any) { } catch (e) {
const response = e.response as AxiosResponse const response = e.response as AxiosResponse
if (response?.status === 403 || response?.status === 449) { if (response?.status === 403 || response?.status === 449) {
this.parseAndSetFileUploadCsrfToken(response) this.parseAndSetFileUploadCsrfToken(response)
@@ -373,7 +374,7 @@ export class RequestClient implements HttpClient {
params[input.name] = input.value params[input.name] = input.value
} }
const csrfTokenKey = Object.keys(params).find((k) => const csrfTokenKey = Object.keys(params).find(k =>
k?.toLowerCase().includes('csrf') k?.toLowerCase().includes('csrf')
) )
if (csrfTokenKey) { if (csrfTokenKey) {
@@ -398,8 +399,8 @@ export class RequestClient implements HttpClient {
responseType: 'text', responseType: 'text',
headers: { Accept: '*/*', 'Content-Type': 'text/plain' } headers: { Accept: '*/*', 'Content-Type': 'text/plain' }
}) })
.then((res) => res.data) .then(res => res.data)
.catch((error) => { .catch(error => {
const logger = process.logger || console const logger = process.logger || console
logger.error(error) logger.error(error)
}) })
@@ -447,9 +448,9 @@ export class RequestClient implements HttpClient {
} }
private parseCsrfToken = (response: AxiosResponse): CsrfToken | undefined => { private parseCsrfToken = (response: AxiosResponse): CsrfToken | undefined => {
const tokenHeader = ( const tokenHeader = (response.headers[
response.headers['x-csrf-header'] as string 'x-csrf-header'
)?.toLowerCase() ] as string)?.toLowerCase()
if (tokenHeader) { if (tokenHeader) {
const token = response.headers[tokenHeader] const token = response.headers[tokenHeader]
@@ -475,12 +476,12 @@ export class RequestClient implements HttpClient {
responseType: 'text', responseType: 'text',
headers: { 'Content-Type': 'text/plain', Accept: '*/*' } headers: { 'Content-Type': 'text/plain', Accept: '*/*' }
}) })
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting error confirmUrl. ') throw prefixMessage(err, 'Error while getting error confirmUrl. ')
}) })
if (isAuthorizeFormRequired(res?.data as string)) { if (isAuthorizeFormRequired(res?.data as string)) {
await this.authorize(res.data as string).catch((err) => { await this.authorize(res.data as string).catch(err => {
throw prefixMessage(err, 'Error while authorizing request. ') throw prefixMessage(err, 'Error while authorizing request. ')
}) })
} }
@@ -505,7 +506,7 @@ export class RequestClient implements HttpClient {
.get('/', { .get('/', {
withCredentials: true withCredentials: true
}) })
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while re-fetching CSRF token.') throw prefixMessage(err, 'Error while re-fetching CSRF token.')
}) })
@@ -594,7 +595,7 @@ export class RequestClient implements HttpClient {
this.httpClient = createAxiosInstance(baseUrl, httpsAgent) this.httpClient = createAxiosInstance(baseUrl, httpsAgent)
this.httpClient.defaults.validateStatus = (status) => { this.httpClient.defaults.validateStatus = status => {
return status >= 200 && status <= 401 return status >= 200 && status <= 401
} }
} }

View File

@@ -13,7 +13,7 @@ export class Sas9RequestClient extends RequestClient {
constructor(baseUrl: string, httpsAgentOptions?: https.AgentOptions) { constructor(baseUrl: string, httpsAgentOptions?: https.AgentOptions) {
super(baseUrl, httpsAgentOptions) super(baseUrl, httpsAgentOptions)
this.httpClient.defaults.maxRedirects = 0 this.httpClient.defaults.maxRedirects = 0
this.httpClient.defaults.validateStatus = (status) => this.httpClient.defaults.validateStatus = status =>
status >= 200 && status < 303 status >= 200 && status < 303
if (axiosCookieJarSupport) { if (axiosCookieJarSupport) {
@@ -57,7 +57,7 @@ export class Sas9RequestClient extends RequestClient {
return this.httpClient return this.httpClient
.get<T>(url, requestConfig) .get<T>(url, requestConfig)
.then((response) => { .then(response => {
if (response.status === 302) { if (response.status === 302) {
return this.get( return this.get(
response.headers['location'], response.headers['location'],
@@ -68,12 +68,12 @@ export class Sas9RequestClient extends RequestClient {
throwIfError(response) throwIfError(response)
return this.parseResponse<T>(response) return this.parseResponse<T>(response)
}) })
.catch(async (e) => { .catch(async e => {
return await this.handleError( return await this.handleError(
e, e,
() => () =>
this.get<T>(url, accessToken, contentType, overrideHeaders).catch( this.get<T>(url, accessToken, contentType, overrideHeaders).catch(
(err) => { err => {
throw prefixMessage( throw prefixMessage(
err, err,
'Error while executing handle error callback. ' 'Error while executing handle error callback. '
@@ -81,7 +81,7 @@ export class Sas9RequestClient extends RequestClient {
} }
), ),
debug debug
).catch((err) => { ).catch(err => {
throw prefixMessage(err, 'Error while handling error. ') throw prefixMessage(err, 'Error while handling error. ')
}) })
}) })
@@ -101,7 +101,7 @@ export class Sas9RequestClient extends RequestClient {
return this.httpClient return this.httpClient
.post<T>(url, data, { headers, withCredentials: true }) .post<T>(url, data, { headers, withCredentials: true })
.then(async (response) => { .then(async response => {
if (response.status === 302) { if (response.status === 302) {
return await this.get( return await this.get(
response.headers['location'], response.headers['location'],
@@ -113,7 +113,7 @@ export class Sas9RequestClient extends RequestClient {
throwIfError(response) throwIfError(response)
return this.parseResponse<T>(response) return this.parseResponse<T>(response)
}) })
.catch(async (e) => { .catch(async e => {
return await this.handleError(e, () => return await this.handleError(e, () =>
this.post<T>(url, data, accessToken, contentType, overrideHeaders) this.post<T>(url, data, accessToken, contentType, overrideHeaders)
) )

View File

@@ -140,7 +140,7 @@ describe('RequestClient', () => {
`Error while executing callback in handleError. ${randomError}` `Error while executing callback in handleError. ${randomError}`
) )
error.response.headers = {} as unknown as { 'x-csrf-header': string } error.response.headers = ({} as unknown) as { 'x-csrf-header': string }
requestClient['csrfToken'].headerName = '' requestClient['csrfToken'].headerName = ''
await expect( await expect(
@@ -262,7 +262,7 @@ const setupSelfSignedServer = async (): Promise<{
httpsServer: https.Server httpsServer: https.Server
keys: pem.CertificateCreationResult keys: pem.CertificateCreationResult
}> => { }> => {
return await new Promise(async (resolve) => { return await new Promise(async resolve => {
const keys = await createCertificate() const keys = await createCertificate()
const httpsServer = https.createServer( const httpsServer = https.createServer(

View File

@@ -12,11 +12,11 @@ export const mockedAuthResponse = {
jti: 'jti' jti: 'jti'
} }
app.get('/', function (req: any, res: any) { app.get('/', function(req: any, res: any) {
res.send('Hello World') res.send('Hello World')
}) })
app.post('/SASLogon/oauth/token', function (req: any, res: any) { app.post('/SASLogon/oauth/token', function(req: any, res: any) {
let valid = true let valid = true
// capture the encoded form data // capture the encoded form data

View File

@@ -28,12 +28,12 @@ describe('urlValidator', () => {
it('should return false when the URL is null', () => { it('should return false when the URL is null', () => {
const url = null const url = null
expect(isUrl(url as unknown as string)).toEqual(false) expect(isUrl((url as unknown) as string)).toEqual(false)
}) })
it('should return false when the URL is undefined', () => { it('should return false when the URL is undefined', () => {
const url = undefined const url = undefined
expect(isUrl(url as unknown as string)).toEqual(false) expect(isUrl((url as unknown) as string)).toEqual(false)
}) })
}) })

View File

@@ -1,9 +1,8 @@
export class JobStatePollError extends Error { export class JobStatePollError extends Error {
constructor(id: string, public originalError: Error) { constructor(id: string, public originalError: Error) {
super( super(
`Error while polling job state for job ${id}: ${ `Error while polling job state for job ${id}: ${originalError.message ||
originalError.message || originalError originalError}`
}`
) )
this.name = 'JobStatePollError' this.name = 'JobStatePollError'
Object.setPrototypeOf(this, JobStatePollError.prototype) Object.setPrototypeOf(this, JobStatePollError.prototype)

View File

@@ -13,7 +13,7 @@ export class RootFolderNotFoundError extends Error {
if (accessToken) { if (accessToken) {
const decodedToken = decodeToken(accessToken) const decodedToken = decodeToken(accessToken)
let scope = decodedToken.scope let scope = decodedToken.scope
scope = scope.map((element) => '* ' + element) scope = scope.map(element => '* ' + element)
message += message +=
`Your access token contains the following scopes:\n` + scope.join('\n') `Your access token contains the following scopes:\n` + scope.join('\n')
} }

View File

@@ -22,12 +22,12 @@ export const convertToCSV = (
let invalidString = false let invalidString = false
if (formats) { if (formats) {
headers = Object.keys(formats).map((key) => `${key}:${formats![key]}`) headers = Object.keys(formats).map(key => `${key}:${formats![key]}`)
} }
const headerFields = Object.keys(table[0]) const headerFields = Object.keys(table[0])
headerFields.forEach((field) => { headerFields.forEach(field => {
if (!formats || !Object.keys(formats).includes(field)) { if (!formats || !Object.keys(formats).includes(field)) {
let hasNullOrNumber = false let hasNullOrNumber = false
let hasSpecialMissingString = false let hasSpecialMissingString = false

View File

@@ -1,2 +1,2 @@
export const delay = (ms: number) => export const delay = (ms: number) =>
new Promise((resolve) => setTimeout(resolve, ms)) new Promise(resolve => setTimeout(resolve, ms))

View File

@@ -41,14 +41,13 @@ export const fetchLog = async (
const loglimit = end < 10000 ? end : 10000 const loglimit = end < 10000 ? end : 10000
do { do {
logger.info( logger.info(
`Fetching logs from line no: ${start + 1} to ${ `Fetching logs from line no: ${start + 1} to ${start +
start + loglimit loglimit} of ${end}.`
} of ${end}.`
) )
const logChunkJson = await requestClient! const logChunkJson = await requestClient!
.get<any>(`${logUrl}?start=${start}&limit=${loglimit}`, accessToken) .get<any>(`${logUrl}?start=${start}&limit=${loglimit}`, accessToken)
.then((res: any) => res.result) .then((res: any) => res.result)
.catch((err) => { .catch(err => {
throw prefixMessage(err, 'Error while getting log. ') throw prefixMessage(err, 'Error while getting log. ')
}) })

View File

@@ -11,7 +11,7 @@ const classes = {
} }
export const openLoginPrompt = (): Promise<boolean> => { export const openLoginPrompt = (): Promise<boolean> => {
return new Promise(async (resolve) => { return new Promise(async resolve => {
const style = document.createElement('style') const style = document.createElement('style')
style.id = domIDs.styles style.id = domIDs.styles
style.innerText = cssContent style.innerText = cssContent
@@ -60,7 +60,7 @@ export const openLoginPrompt = (): Promise<boolean> => {
}) })
} }
const closeLoginPrompt = () => { const closeLoginPrompt = () => {
Object.values(domIDs).forEach((id) => { Object.values(domIDs).forEach(id => {
const elem = document.getElementById(id) const elem = document.getElementById(id)
elem?.parentNode?.removeChild(elem) elem?.parentNode?.removeChild(elem)
}) })

View File

@@ -2,7 +2,7 @@ export const parseSasViyaLog = (logResponse: { items: any[] }) => {
let log let log
try { try {
log = logResponse.items log = logResponse.items
? logResponse.items.map((i) => i.line).join('\n') ? logResponse.items.map(i => i.line).join('\n')
: JSON.stringify(logResponse) : JSON.stringify(logResponse)
} catch (e) { } catch (e) {
console.error('An error has occurred while parsing the log response', e) console.error('An error has occurred while parsing the log response', e)

View File

@@ -1,6 +1,10 @@
export const parseSourceCode = (log: string): string => { export const parseSourceCode = (log: string): string => {
const isSourceCodeLine = (line: string) => const isSourceCodeLine = (line: string) =>
line.trim().substring(0, 10).trimStart().match(/^\d/) line
.trim()
.substring(0, 10)
.trimStart()
.match(/^\d/)
const logLines = log.split('\n').filter(isSourceCodeLine) const logLines = log.split('\n').filter(isSourceCodeLine)
return logLines.join('\r\n') return logLines.join('\r\n')
} }