mirror of
https://github.com/sasjs/server.git
synced 2025-12-10 19:34:34 +00:00
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
import { PreProgramVars, Session } from '../../types'
|
|
import { generateFileUploadSasCode, getMacrosFolder } from '../../utils'
|
|
import { ExecutionVars } from './'
|
|
|
|
export const createSASProgram = async (
|
|
program: string,
|
|
preProgramVariables: PreProgramVars,
|
|
vars: ExecutionVars,
|
|
session: Session,
|
|
weboutPath: string,
|
|
headersPath: string,
|
|
tokenFile: string,
|
|
otherArgs?: any
|
|
) => {
|
|
const varStatments = Object.keys(vars).reduce(
|
|
(computed: string, key: string) => `${computed}%let ${key}=${vars[key]};\n`,
|
|
''
|
|
)
|
|
|
|
const preProgramVarStatments = `
|
|
%let _sasjs_tokenfile=${tokenFile};
|
|
%let _sasjs_username=${preProgramVariables?.username};
|
|
%let _sasjs_userid=${preProgramVariables?.userId};
|
|
%let _sasjs_displayname=${preProgramVariables?.displayName};
|
|
%let _sasjs_apiserverurl=${preProgramVariables?.serverUrl};
|
|
%let _sasjs_apipath=/SASjsApi/stp/execute;
|
|
%let _sasjs_webout_headers=${headersPath};
|
|
%let _metaperson=&_sasjs_displayname;
|
|
%let _metauser=&_sasjs_username;
|
|
|
|
/* the below is here for compatibility and will be removed in a future release */
|
|
%let sasjs_stpsrv_header_loc=&_sasjs_webout_headers;
|
|
|
|
%let sasjsprocessmode=Stored Program;
|
|
|
|
%global SYSPROCESSMODE SYSTCPIPHOSTNAME SYSHOSTINFOLONG;
|
|
%macro _sasjs_server_init();
|
|
%if "&SYSPROCESSMODE"="" %then %let SYSPROCESSMODE=&sasjsprocessmode;
|
|
%if "&SYSTCPIPHOSTNAME"="" %then %let SYSTCPIPHOSTNAME=&_sasjs_apiserverurl;
|
|
%mend;
|
|
%_sasjs_server_init()
|
|
|
|
`
|
|
|
|
program = `
|
|
options insert=(SASAUTOS="${getMacrosFolder()}");
|
|
|
|
/* runtime vars */
|
|
${varStatments}
|
|
filename _webout "${weboutPath}" mod;
|
|
|
|
/* dynamic user-provided vars */
|
|
${preProgramVarStatments}
|
|
|
|
/* user autoexec starts */
|
|
${otherArgs?.userAutoExec ?? ''}
|
|
/* user autoexec ends */
|
|
|
|
/* actual job code */
|
|
${program}`
|
|
|
|
// if no files are uploaded filesNamesMap will be undefined
|
|
if (otherArgs?.filesNamesMap) {
|
|
const uploadSasCode = await generateFileUploadSasCode(
|
|
otherArgs.filesNamesMap,
|
|
session.path
|
|
)
|
|
|
|
// If any files are uploaded, the program needs to be updated with some
|
|
// dynamically generated variables (pointers) for ease of ingestion
|
|
if (uploadSasCode.length > 0) {
|
|
program = `${uploadSasCode}` + program
|
|
}
|
|
}
|
|
return program
|
|
}
|