1
0
mirror of https://github.com/sasjs/server.git synced 2025-12-10 19:34:34 +00:00

fix(stp): return json for webout

This commit is contained in:
Saad Jutt
2022-02-21 04:13:04 +05:00
parent 232a73fd17
commit 5005f203b8
5 changed files with 34 additions and 25 deletions

View File

@@ -92,6 +92,10 @@ components:
- clientSecret
type: object
additionalProperties: false
IRecordOfAny:
properties: {}
type: object
additionalProperties: {}
LogLine:
properties:
line:
@@ -110,7 +114,11 @@ components:
status:
type: string
_webout:
type: string
anyOf:
-
type: string
-
$ref: '#/components/schemas/IRecordOfAny'
log:
items:
$ref: '#/components/schemas/LogLine'
@@ -539,9 +547,7 @@ paths:
content:
application/json:
schema:
anyOf:
- {$ref: '#/components/schemas/ExecuteReturnJsonResponse'}
- {type: string, format: byte}
$ref: '#/components/schemas/ExecuteReturnJsonResponse'
description: 'Execute SAS code.'
summary: 'Run SAS Code and returns log'
tags:
@@ -630,6 +636,7 @@ paths:
bearerAuth: []
parameters:
-
description: 'Location of SAS program'
in: query
name: filePath
required: true
@@ -1068,6 +1075,7 @@ paths:
bearerAuth: []
parameters:
-
description: 'Location of SAS program'
in: query
name: _program
required: true
@@ -1082,9 +1090,7 @@ paths:
content:
application/json:
schema:
anyOf:
- {$ref: '#/components/schemas/ExecuteReturnJsonResponse'}
- {type: string, format: byte}
$ref: '#/components/schemas/ExecuteReturnJsonResponse'
examples:
'Example 1':
value: {status: success, _webout: 'webout content', log: [], httpHeaders: {Content-type: application/zip, Cache-Control: 'public, max-age=1000'}}
@@ -1097,6 +1103,7 @@ paths:
bearerAuth: []
parameters:
-
description: 'Location of SAS program'
in: query
name: _program
required: false

View File

@@ -25,7 +25,7 @@ export class CodeController {
public async executeSASCode(
@Request() request: express.Request,
@Body() body: ExecuteSASCodePayload
): Promise<ExecuteReturnJsonResponse | Buffer> {
): Promise<ExecuteReturnJsonResponse> {
return executeSASCode(request, body)
}
}
@@ -41,14 +41,9 @@ const executeSASCode = async (req: any, { code }: ExecuteSASCodePayload) => {
true
)) as ExecuteReturnJson
if (webout instanceof Buffer) {
;(req as any).sasHeaders = httpHeaders
return webout
}
return {
status: 'success',
_webout: webout,
_webout: webout as string,
log: parseLogToArray(log),
httpHeaders
}

View File

@@ -90,7 +90,7 @@ export class DriveController {
/**
* @summary Get file from SASjs Drive
* @query filePath Location of SAS program
* @param filePath Location of SAS program
* @example filePath "/Public/somefolder/some.file"
*/
@Example<GetFileResponse>({

View File

@@ -148,7 +148,8 @@ ${program}`
? await readFile(headersPath)
: ''
const httpHeaders: HTTPHeaders = extractHeaders(headersContent)
const fileResponse: boolean = httpHeaders.hasOwnProperty('content-type')
const fileResponse: boolean =
httpHeaders.hasOwnProperty('content-type') && !returnJson
const webout = (await fileExists(weboutPath))
? fileResponse

View File

@@ -33,9 +33,13 @@ interface ExecuteReturnJsonPayload {
*/
_program?: string
}
interface IRecordOfAny {
[key: string]: any
}
export interface ExecuteReturnJsonResponse {
status: string
_webout: string
_webout: string | IRecordOfAny
log: LogLine[]
message?: string
httpHeaders: HTTPHeaders
@@ -52,7 +56,7 @@ export class STPController {
* Any files provided are placed into the session and
* corresponding _WEBIN_XXX variables are created.
* @summary Execute Stored Program, return raw content
* @query _program Location of SAS program
* @param _program Location of SAS program
* @example _program "/Public/somefolder/some.file"
*/
@Get('/execute')
@@ -70,7 +74,7 @@ export class STPController {
* Any files provided are placed into the session and
* corresponding _WEBIN_XXX variables are created.
* @summary Execute Stored Program, return JSON
* @query _program Location of SAS program
* @param _program Location of SAS program
* @example _program "/Public/somefolder/some.file"
*/
@Example<ExecuteReturnJsonResponse>({
@@ -87,7 +91,7 @@ export class STPController {
@Request() request: express.Request,
@Body() body?: ExecuteReturnJsonPayload,
@Query() _program?: string
): Promise<ExecuteReturnJsonResponse | Buffer> {
): Promise<ExecuteReturnJsonResponse> {
const program = _program ?? body?._program
return executeReturnJson(request, program!)
}
@@ -131,7 +135,7 @@ const executeReturnRaw = async (
const executeReturnJson = async (
req: any,
_program: string
): Promise<ExecuteReturnJsonResponse | Buffer> => {
): Promise<ExecuteReturnJsonResponse> => {
const sasCodePath =
path
.join(getTmpFilesFolderPath(), _program)
@@ -149,14 +153,16 @@ const executeReturnJson = async (
true
)) as ExecuteReturnJson
if (webout instanceof Buffer) {
;(req as any).sasHeaders = httpHeaders
return webout
let weboutRes: string | IRecordOfAny = webout
if (httpHeaders['content-type']?.toLowerCase() === 'application/json') {
try {
weboutRes = JSON.parse(webout as string)
} catch (_) {}
}
return {
status: 'success',
_webout: webout,
_webout: weboutRes,
log: parseLogToArray(log),
httpHeaders
}