mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-08 04:50:06 +00:00
feat: create file resource while deploying service pack for viya
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
|||||||
Context,
|
Context,
|
||||||
ContextAllAttributes,
|
ContextAllAttributes,
|
||||||
Folder,
|
Folder,
|
||||||
|
File,
|
||||||
EditContextInput,
|
EditContextInput,
|
||||||
JobDefinition,
|
JobDefinition,
|
||||||
PollOptions
|
PollOptions
|
||||||
@@ -532,6 +533,55 @@ export class SASViyaApiClient {
|
|||||||
.then((res) => res.result)
|
.then((res) => res.result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a file. Path to or URI of the parent folder is required.
|
||||||
|
* @param fileName - the name of the new file.
|
||||||
|
* @param content - the content of the new file.
|
||||||
|
* @param parentFolderPath - the full path to the parent folder. If not
|
||||||
|
* provided, the parentFolderUri must be provided.
|
||||||
|
* @param parentFolderUri - the URI (eg /folders/folders/UUID) of the parent
|
||||||
|
* folder. If not provided, the parentFolderPath must be provided.
|
||||||
|
* @param accessToken - an access token for authorizing the request.
|
||||||
|
*/
|
||||||
|
public async createFile(
|
||||||
|
fileName: string,
|
||||||
|
content: string = '',
|
||||||
|
parentFolderPath?: string,
|
||||||
|
parentFolderUri?: string,
|
||||||
|
accessToken?: string
|
||||||
|
): Promise<File> {
|
||||||
|
if (!parentFolderPath && !parentFolderUri) {
|
||||||
|
throw new Error('Path or URI of the parent folder is required.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!parentFolderUri && parentFolderPath) {
|
||||||
|
parentFolderUri = await this.getFolderUri(parentFolderPath, accessToken)
|
||||||
|
}
|
||||||
|
|
||||||
|
const headers = {
|
||||||
|
Accept: 'application/vnd.sas.file+json',
|
||||||
|
'Content-Disposition': `filename="${fileName}";`
|
||||||
|
}
|
||||||
|
|
||||||
|
const mimeType = /.html$/.test(fileName)
|
||||||
|
? 'text/html'
|
||||||
|
: /.css$/.test(fileName)
|
||||||
|
? 'text/css'
|
||||||
|
: /.js/.test(fileName)
|
||||||
|
? 'text/javascript'
|
||||||
|
: 'text/plain'
|
||||||
|
|
||||||
|
return (
|
||||||
|
await this.requestClient.post<File>(
|
||||||
|
`/files/files?parentFolderUri=${parentFolderUri}&typeDefName=file#rawUpload`,
|
||||||
|
content,
|
||||||
|
accessToken,
|
||||||
|
mimeType,
|
||||||
|
headers
|
||||||
|
)
|
||||||
|
).result
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a folder. Path to or URI of the parent folder is required.
|
* Creates a folder. Path to or URI of the parent folder is required.
|
||||||
* @param folderName - the name of the new folder.
|
* @param folderName - the name of the new folder.
|
||||||
|
|||||||
45
src/SASjs.ts
45
src/SASjs.ts
@@ -299,6 +299,41 @@ export default class SASjs {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a file at SAS file system.
|
||||||
|
* @param fileName - name of the file to be created.
|
||||||
|
* @param content - content of the file to be created.
|
||||||
|
* @param parentFolderPath - the full path (eg `/Public/example/myFolder`) of the parent folder.
|
||||||
|
* @param parentFolderUri - the URI of the parent folder.
|
||||||
|
* @param accessToken - the access token to authorizing the request.
|
||||||
|
* @param sasApiClient - a client for interfacing with SAS API.
|
||||||
|
* @param isForced - flag that indicates if target folder already exists, it and all subfolders have to be deleted. Applicable for SAS VIYA only.
|
||||||
|
*/
|
||||||
|
public async createFile(
|
||||||
|
fileName: string,
|
||||||
|
content: string,
|
||||||
|
parentFolderPath: string,
|
||||||
|
parentFolderUri?: string,
|
||||||
|
accessToken?: string,
|
||||||
|
sasApiClient?: SASViyaApiClient
|
||||||
|
) {
|
||||||
|
if (sasApiClient)
|
||||||
|
return await sasApiClient.createFile(
|
||||||
|
fileName,
|
||||||
|
content,
|
||||||
|
parentFolderPath,
|
||||||
|
parentFolderUri,
|
||||||
|
accessToken
|
||||||
|
)
|
||||||
|
return await this.sasViyaApiClient!.createFile(
|
||||||
|
fileName,
|
||||||
|
content,
|
||||||
|
parentFolderPath,
|
||||||
|
parentFolderUri,
|
||||||
|
accessToken
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches a folder from the SAS file system.
|
* Fetches a folder from the SAS file system.
|
||||||
* @param folderPath - path of the folder to be fetched.
|
* @param folderPath - path of the folder to be fetched.
|
||||||
@@ -867,6 +902,16 @@ export default class SASjs {
|
|||||||
isForced
|
isForced
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
|
case 'file':
|
||||||
|
await this.createFile(
|
||||||
|
member.name,
|
||||||
|
member.code,
|
||||||
|
parentFolder,
|
||||||
|
undefined,
|
||||||
|
accessToken,
|
||||||
|
sasApiClient
|
||||||
|
)
|
||||||
|
break
|
||||||
case 'service':
|
case 'service':
|
||||||
await this.createJobDefinition(
|
await this.createJobDefinition(
|
||||||
member.name,
|
member.name,
|
||||||
|
|||||||
8
src/types/File.ts
Normal file
8
src/types/File.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { Link } from './Link'
|
||||||
|
|
||||||
|
export interface File {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
parentUri: string
|
||||||
|
links: Link[]
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
export * from './Context'
|
export * from './Context'
|
||||||
export * from './CsrfToken'
|
export * from './CsrfToken'
|
||||||
export * from './Folder'
|
export * from './Folder'
|
||||||
|
export * from './File'
|
||||||
export * from './Job'
|
export * from './Job'
|
||||||
export * from './JobDefinition'
|
export * from './JobDefinition'
|
||||||
export * from './JobResult'
|
export * from './JobResult'
|
||||||
|
|||||||
Reference in New Issue
Block a user