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

fix(baseSAS): removed sasjs/server logic

This commit is contained in:
Yury Shkoda
2021-09-30 14:31:54 +03:00
parent 7638595523
commit a5b5052a5f
2 changed files with 32 additions and 101 deletions

View File

@@ -1,105 +1,35 @@
import {
MemberType,
FolderMember,
ServiceMember,
ExecutionQuery,
ExecutionResult
} from './types'
import {
createFolder,
createFile,
fileExists,
readFile,
asyncForEach,
generateTimestamp
} from '@sasjs/utils'
import { getTmpFilesFolderPath, getTmpLogFolderPath } from './utils'
import * as path from 'path'
import { promisify } from 'util'
import { execFile } from 'child_process'
const execFilePromise = promisify(execFile)
import { FolderMember, ServiceMember, ExecutionQuery } from './types'
import { RequestClient } from './request/RequestClient'
export class SASBaseApiClient {
constructor(
private serverUrl: string,
private requestClient: RequestClient
) {}
public setConfig(serverUrl: string) {
if (serverUrl) this.serverUrl = serverUrl
}
public async deploy(members: [FolderMember, ServiceMember]) {
await this.createFileTree(members)
const { result } = await this.requestClient.post<{
status: string
message: string
example?: {}
}>('/deploy', members, undefined)
return Promise.resolve(result)
}
constructor(private pathSASBase: string) {}
public async executeJob(query: ExecutionQuery) {
const { result } = await this.requestClient.post<{
status: string
message: string
log?: string
logPath?: string
error?: {}
}>('/execute', query, undefined)
public setConfig(pathSASBase: string) {
if (pathSASBase) this.pathSASBase = pathSASBase
}
// TODO: make public
private async createFileTree(
members: [FolderMember, ServiceMember],
parentFolders: string[] = []
) {
const destinationPath = path.join(
await getTmpFilesFolderPath(),
path.join(...parentFolders)
)
await asyncForEach(
members,
async (member: FolderMember | ServiceMember) => {
const name = member.name
if (member.type === MemberType.folder) {
await createFolder(path.join(destinationPath, name)).catch((err) =>
Promise.reject({ error: err, failedToCreate: name })
)
await this.createFileTree(member.members, [
...parentFolders,
name
]).catch((err) =>
Promise.reject({ error: err, failedToCreate: name })
)
} else {
await createFile(path.join(destinationPath, name), member.code).catch(
(err) => Promise.reject({ error: err, failedToCreate: name })
)
}
}
)
return Promise.resolve(true)
}
public async executeScript(
query: ExecutionQuery
): Promise<ExecutionResult | undefined> {
let sasCodePath = path.join(await getTmpFilesFolderPath(), query._program)
sasCodePath = sasCodePath.replace(new RegExp('/', 'g'), path.sep)
if (!(await fileExists(sasCodePath))) {
return Promise.reject(`${query._program} does not exist.`)
}
const sasFile: string = sasCodePath.split(path.sep).pop() || 'default'
const sasLogPath = path.join(
await getTmpLogFolderPath(),
[sasFile.replace(/\.sas/g, ''), '-', generateTimestamp(), '.log'].join('')
)
const { stdout, stderr } = await execFilePromise(this.pathSASBase, [
'-SYSIN',
sasCodePath,
'-log',
sasLogPath,
'-nosplash'
])
if (stderr) return Promise.reject(stderr)
if (await fileExists(sasLogPath)) {
return Promise.resolve({
log: await readFile(sasLogPath),
logPath: sasLogPath
})
}
return Promise.resolve(result)
}
}

View File

@@ -834,8 +834,8 @@ export default class SASjs {
return await this.sasBaseApiClient?.deploy(members)
}
public async executeScriptSASBase(query: ExecutionQuery) {
return await this.sasBaseApiClient?.executeScript(query)
public async executeJobSASBase(query: ExecutionQuery) {
return await this.sasBaseApiClient?.executeJob(query)
}
/**
@@ -1018,10 +1018,11 @@ export default class SASjs {
if (this.sasjsConfig.serverType === ServerType.Sasjs) {
if (this.sasBaseApiClient) {
this.sasBaseApiClient.setConfig(this.sasjsConfig.pathSASBase)
this.sasBaseApiClient.setConfig(this.sasjsConfig.serverUrl)
} else {
this.sasBaseApiClient = new SASBaseApiClient(
this.sasjsConfig.pathSASBase
this.sasjsConfig.serverUrl,
this.requestClient
)
}
}