mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-07 20:40:05 +00:00
fix(baseSAS): removed sasjs/server logic
This commit is contained in:
@@ -1,105 +1,35 @@
|
|||||||
import {
|
import { FolderMember, ServiceMember, ExecutionQuery } from './types'
|
||||||
MemberType,
|
import { RequestClient } from './request/RequestClient'
|
||||||
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)
|
|
||||||
|
|
||||||
export class SASBaseApiClient {
|
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]) {
|
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) {
|
return Promise.resolve(result)
|
||||||
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
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -834,8 +834,8 @@ export default class SASjs {
|
|||||||
return await this.sasBaseApiClient?.deploy(members)
|
return await this.sasBaseApiClient?.deploy(members)
|
||||||
}
|
}
|
||||||
|
|
||||||
public async executeScriptSASBase(query: ExecutionQuery) {
|
public async executeJobSASBase(query: ExecutionQuery) {
|
||||||
return await this.sasBaseApiClient?.executeScript(query)
|
return await this.sasBaseApiClient?.executeJob(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1018,10 +1018,11 @@ export default class SASjs {
|
|||||||
|
|
||||||
if (this.sasjsConfig.serverType === ServerType.Sasjs) {
|
if (this.sasjsConfig.serverType === ServerType.Sasjs) {
|
||||||
if (this.sasBaseApiClient) {
|
if (this.sasBaseApiClient) {
|
||||||
this.sasBaseApiClient.setConfig(this.sasjsConfig.pathSASBase)
|
this.sasBaseApiClient.setConfig(this.sasjsConfig.serverUrl)
|
||||||
} else {
|
} else {
|
||||||
this.sasBaseApiClient = new SASBaseApiClient(
|
this.sasBaseApiClient = new SASBaseApiClient(
|
||||||
this.sasjsConfig.pathSASBase
|
this.sasjsConfig.serverUrl,
|
||||||
|
this.requestClient
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user