UNPKG

@yuntools/ali-oss

Version:

阿里云 OSS 命令行工具 ossutil 封装,支持 ESM,CJS 导入,提供 TypeScript 类型定义

247 lines (216 loc) 7.31 kB
export type ConfigPath = string export enum PlaceholderKey { src = '__src__', dest = '__dest__', target = '__target__', bucket = 'bucket', bucketName = 'bucketname', /** * 对于远程目录进行编码,并且添加 `oss://` 前缀 * 不适用于本地目录 */ encodeSource = 'encodeSource', /** * 对于远程目录进行编码,并且添加 `oss://` 前缀 */ encodeTarget = 'encodeTarget', } export enum ACLKey { /** 继承Bucket的读写权限 */ default = 'default', /** 有该Bucket的拥有者可以对该Bucket内的文件进行读写操作,其他人无法访问该Bucket内的文件 */ private = 'private', /** * 只有Bucket拥有者可以对该Bucket内的文件进行写操作,其他用户(包括匿名访问者)都可以对该Bucket中的文件进行读操作。 * 这有可能造成您数据的外泄以及费用激增,如果被人恶意写入违法信息还可能会侵害您的合法权益。 * 除特殊场景外,不建议您配置此权限 */ publicRead = 'public-read', /** * 任何人(包括匿名访问者)都可以对该Bucket内文件进行读写操作。 * 这有可能造成您数据的外泄以及费用激增, * \*\*请谨慎操作\*\* */ publicReadWrite = 'public-read-write', } export interface ProcessResp { /** * 0: success, others: error */ readonly exitCode: number readonly exitSignal: string readonly stdout: string readonly stderr: string } export enum DataKey { elapsed = 'elapsed', averageSpeed = 'averageSpeed', acl = 'ACL', acceptRanges = 'Accept-Ranges', contentLength = 'Content-Length', contentMd5 = 'Content-Md5', contentType = 'Content-Type', etag = 'Etag', lastModified = 'Last-Modified', owner = 'Owner', xOssHashCrc64ecma = 'X-Oss-Hash-Crc64ecma', xOssObjectType = 'X-Oss-Object-Type', xOssStorageClass = 'X-Oss-Storage-Class', link = 'link', httpUrl = 'httpUrl', httpShareUrl = 'httpShareUrl', succeedTotalNumber = 'succeedTotalNumber', succeedTotalSize = 'succeedTotalSize', uploadDirs = 'uploadDirs', uploadFiles = 'uploadFiles', /** sync between cloud */ copyObjects = 'copyObjects', downloadObjects = 'downloadObjects', } export type PickFunc = (input: string, rule: RegExp, debug: boolean) => string | number | undefined export enum FnKey { cp = 'cp', download = 'download', link = 'createSymlink', mkdir = 'mkdir', mv = 'mv', pathExists = 'pathExists', probeUpload = 'probeUpload', rm = 'rm', rmrf = 'rmrf', sign = 'sign', stat = 'stat', syncCloud = 'syncCloud', syncLocal = 'syncLocal', syncRemote = 'syncRemote', upload = 'upload', } export enum CmdKey { cp = 'cp', download = 'cp', link = 'create-symlink', createSymlink = 'create-symlink', mkdir = 'mkdir', mv = 'mv', probeUpload = 'probe', rm = 'rm', rmrf = 'rm', sign = 'sign', stat = 'stat', syncCloud = 'sync', syncLocal = 'sync', syncRemote = 'sync', upload = 'cp', } /** 扁担参数名映射 */ export enum MKey { accessKeyId = 'access-key-id', accessKeySecret = 'access-key-secret', stsToken = 'sts-token', /** 设置分片大小,单位为字节 */ partSize = 'part-size', /** 文件名称的编码方式。取值为url。如果不指定该选项,则表示文件名称未经过编码 */ encodingType = 'encoding-type', /** 上传链接子目录,默认不上传 */ enableSymlinkDir = 'enable-symlink-dir', /** 批量操作时不忽略错误 */ disableIgnoreError = 'disable-ignore-error', /** 仅上传当前目录下的文件,忽略子目录及子目录下的文件 */ onlyCurrentDir = 'only-current-dir', /** 设置断点续传文件的大小阈值,单位为字节 */ bigfileThreshold = 'bigfile-threshold', /** 指定断点续传记录信息所在的目录 */ checkpointDir = 'checkpoint-dir', /** 指定保存上传文件时的快照信息所在的目录。在下一次上传文件时,ossutil会读取指定目录下的快照信息进行增量上传 */ snapshotPath = 'snapshot-path', /** 表示上传文件时不为目录生成Object */ disableCrc64 = 'disable-crc64', /** Object 的指定版本。仅适用于已开启或暂停版本控制状态 Bucket下的 Object */ versionId = 'version-id', /** * Object 的所有版本。 * 仅适用于已开启或暂停版本控制状态 Bucket 下的 Object, * 且同一个删除示例中仅允许选择--version-id或--all-versions其中一个选项 */ allVersions = 'all-versions', /** 客户端读超时的时间,单位为秒,默认值为1200 */ readTimeoutSec = 'read-timeout', /** 客户端连接超时的时间,单位为秒,默认值为120 */ connectTimeoutSec = 'connect-timeout', /** 超时秒 */ timeoutSec = 'timeout', /** 参数名typo */ trafficLimit = 'trafic-limit', /* 不对cloud_url中携带的正斜线(/)进行编码 */ disableEncodeSlash = 'disable-encode-slash', } export interface Config { accessKeyId?: string | undefined accessKeySecret?: string | undefined stsToken?: string | undefined endpoint?: string | undefined } export enum Msg { accessDenied = 'AccessDenied', cloudFileAlreadyExists = 'Cloud file already exists', cloudConfigFileNotExists = 'Cloud config file not exists', noSuchBucket = 'NoSuchBucket', } export type DownLinks = { [key in NodeJS.Platform]?: string | undefined } /** * ossutil 的通用选项,可以在大部分命令中使用 * @link https://help.aliyun.com/document_detail/50455.htm */ export interface BaseOptions extends Config { /** * 是否对 `oss://bucket_name` 后面的key(目录名称)进行编码。 * - 若输入参数已经被编码(比如从操作结果中获取),则需要显示设置为 false * - 若为本地目录,则不能设置为 true * @default false */ [PlaceholderKey.encodeSource]?: boolean | undefined /** * 是否对 `oss://bucket_name` 后面的key(目录名称)进行编码。 * 若输入参数已经被编码(比如从操作结果中获取),则需要显示设置为 false * @default true */ [PlaceholderKey.encodeTarget]?: boolean | undefined /** `oss://bucket_name` */ [PlaceholderKey.bucket]?: string | undefined /** * 客户端连接超时的时间,单位为秒, * @default 120 */ connectTimeoutSec?: number | undefined /** * 客户端读超时的时间,单位为秒, * @default 1200 */ readTimeoutSec?: number | undefined /** 在当前工作目录下输出ossutil日志文件ossutil.log。该选项默认为空,表示不输出日志文件 */ loglevel?: 'info' | 'debug' | undefined } export interface DataBase { /** * @example 0.303190 */ [DataKey.elapsed]: string | undefined } export interface ProcessRet<T extends DataBase = DataBase> { readonly data: T | undefined readonly stdout: string readonly stderr: string /** * 0: success, others: error */ readonly exitCode: number readonly exitSignal: string } export type ParamMap = Map<string, string | number | boolean> export type ProcessInputFn = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any input: any | undefined, globalConfig: Config | undefined, ) => Promise<ParamMap>