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

feat: select extra attributes in JES response

This commit is contained in:
2021-06-08 13:25:08 +02:00
parent e4f23334d3
commit 2fa3a353fa
4 changed files with 43 additions and 8 deletions

View File

@@ -14,6 +14,7 @@ import {
Sas9JobExecutor
} from './job-execution'
import { ErrorResponse } from './types/errors'
import { ExtraResponseAttributes } from './types/ExtraResponseAttributes'
const defaultConfig: SASjsConfig = {
serverUrl: '',
@@ -540,13 +541,17 @@ export default class SASjs {
* `await request(sasJobPath, data, config, () => setIsLoggedIn(false))`
* If you are not passing in any data and configuration, it will look like so:
* `await request(sasJobPath, {}, {}, () => setIsLoggedIn(false))`
* @param extraResponseAttributes - a array of predefined values that are used
* to provide extra attributes (same names as those values) to be added in response
* Supported values: 'file' | 'output' | 'data'
*/
public async request(
sasJob: string,
data: { [key: string]: any },
config: { [key: string]: any } = {},
loginRequiredCallback?: () => any,
accessToken?: string
accessToken?: string,
extraResponseAttributes: ExtraResponseAttributes[] = []
) {
config = {
...this.sasjsConfig,
@@ -568,7 +573,8 @@ export default class SASjs {
data,
config,
loginRequiredCallback,
accessToken
accessToken,
extraResponseAttributes
)
}
} else if (

View File

@@ -5,6 +5,7 @@ import {
JobExecutionError,
LoginRequiredError
} from '../types/errors'
import { ExtraResponseAttributes } from '../types/ExtraResponseAttributes'
import { BaseJobExecutor } from './JobExecutor'
export class JesJobExecutor extends BaseJobExecutor {
@@ -17,7 +18,8 @@ export class JesJobExecutor extends BaseJobExecutor {
data: any,
config: any,
loginRequiredCallback?: any,
accessToken?: string
accessToken?: string,
extraResponseAttributes: ExtraResponseAttributes[] = []
) {
const loginCallback = loginRequiredCallback || (() => Promise.resolve())
@@ -30,10 +32,26 @@ export class JesJobExecutor extends BaseJobExecutor {
data,
accessToken
)
.then((response) => {
.then((response: any) => {
this.appendRequest(response, sasJob, config.debug)
resolve(response)
let responseObject = {}
if (extraResponseAttributes && extraResponseAttributes.length > 0) {
const extraAttributes = extraResponseAttributes.reduce(
(map: any, obj: any) => ((map[obj] = response[obj]), map),
{}
)
responseObject = {
result: response.result,
...extraAttributes
}
} else {
responseObject = response.result
}
resolve(responseObject)
})
.catch(async (e: Error) => {
if (e instanceof JobExecutionError) {
@@ -50,7 +68,9 @@ export class JesJobExecutor extends BaseJobExecutor {
sasJob,
data,
config,
loginRequiredCallback
loginRequiredCallback,
accessToken,
extraResponseAttributes
).then(
(res: any) => {
resolve(res)

View File

@@ -1,5 +1,6 @@
import { ServerType } from '@sasjs/utils/types'
import { SASjsRequest } from '../types'
import { ExtraResponseAttributes } from '../types/ExtraResponseAttributes'
import { asyncForEach, parseGeneratedCode, parseSourceCode } from '../utils'
export type ExecuteFunction = () => Promise<any>
@@ -10,7 +11,8 @@ export interface JobExecutor {
data: any,
config: any,
loginRequiredCallback?: any,
accessToken?: string
accessToken?: string,
extraResponseAttributes?: ExtraResponseAttributes[]
) => Promise<any>
resendWaitingRequests: () => Promise<void>
getRequests: () => SASjsRequest[]
@@ -28,7 +30,8 @@ export abstract class BaseJobExecutor implements JobExecutor {
data: any,
config: any,
loginRequiredCallback?: any,
accessToken?: string | undefined
accessToken?: string | undefined,
extraResponseAttributes?: ExtraResponseAttributes[]
): Promise<any>
resendWaitingRequests = async () => {

View File

@@ -0,0 +1,6 @@
/**
* Represents a SASjs request parameter that will select which attributes are wanted in
* response object on top of default `webout` object.
*
*/
export type ExtraResponseAttributes = 'file' | 'data' | 'output' | null