mirror of
https://github.com/sasjs/server.git
synced 2025-12-10 19:34:34 +00:00
65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import { PreProgramVars, Session } from '../../types'
|
|
import { generateFileUploadJSCode } from '../../utils'
|
|
import { ExecutionVars } from './'
|
|
|
|
export const createJSProgram = async (
|
|
program: string,
|
|
preProgramVariables: PreProgramVars,
|
|
vars: ExecutionVars,
|
|
session: Session,
|
|
weboutPath: string,
|
|
tokenFile: string,
|
|
otherArgs?: any
|
|
) => {
|
|
const varStatments = Object.keys(vars).reduce(
|
|
(computed: string, key: string) =>
|
|
`${computed}const ${key} = '${vars[key]}';\n`,
|
|
''
|
|
)
|
|
|
|
const preProgramVarStatments = `
|
|
let _webout = '';
|
|
const weboutPath = '${weboutPath}';
|
|
const _sasjs_tokenfile = '${tokenFile}';
|
|
const _sasjs_username = '${preProgramVariables?.username}';
|
|
const _sasjs_userid = '${preProgramVariables?.userId}';
|
|
const _sasjs_displayname = '${preProgramVariables?.displayName}';
|
|
const _metaperson = _sasjs_displayname;
|
|
const _metauser = _sasjs_username;
|
|
const sasjsprocessmode = 'Stored Program';
|
|
`
|
|
|
|
const requiredModules = `const fs = require('fs')`
|
|
|
|
program = `
|
|
/* runtime vars */
|
|
${varStatments}
|
|
|
|
/* dynamic user-provided vars */
|
|
${preProgramVarStatments}
|
|
|
|
/* actual job code */
|
|
${program}
|
|
|
|
/* write webout file only if webout exists*/
|
|
if (_webout) {
|
|
fs.writeFile(weboutPath, _webout, function (err) {
|
|
if (err) throw err;
|
|
})
|
|
}
|
|
`
|
|
// if no files are uploaded filesNamesMap will be undefined
|
|
if (otherArgs?.filesNamesMap) {
|
|
const uploadJSCode = await generateFileUploadJSCode(
|
|
otherArgs.filesNamesMap,
|
|
session.path
|
|
)
|
|
|
|
//If js code for the file is generated it will be appended to the top of jsCode
|
|
if (uploadJSCode.length > 0) {
|
|
program = `${uploadJSCode}\n` + program
|
|
}
|
|
}
|
|
return requiredModules + program
|
|
}
|