@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
315 lines (314 loc) • 10 kB
JavaScript
"use strict";
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Oss = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = require("fs-extra");
const utils_1 = require("./utils");
const ali_oss_1 = __importDefault(require("ali-oss"));
class Oss {
constructor(options) {
this.client = new ali_oss_1.default(options);
this.options = options;
}
/**
* 遍历 object
* @param prefix
* @param callback
* @param options
* @return {Promise}
*/
traversal(prefix, callback, options) {
if (!prefix) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('prefix is required');
}
if (!callback) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('callback is required');
}
return utils_1.traversalObject(this.client, prefix, callback, options);
}
/**
* 判断是否存在
* @param uri
* @param options
* @return {Promise<boolean>}
*/
exists(uri, options) {
return this.head(uri, options)
.then((data) => data)
// eslint-disable-next-line prefer-promise-reject-errors
.catch((err) => Promise.reject(`文件不存在: ${JSON.stringify(err)}`)); // 请勿修改文案,会根据字符串判断
}
/**
* 获取 meta 信息
* @param uri
* @param options
* @return {Promise}
*/
getMeta(uri, options) {
const defaultValue = {};
return this.head(uri, options)
.then((data) => data.meta || defaultValue)
.catch(() => defaultValue);
}
putMeta(uri, meta, options = {}) {
return utils_1.putMeta(this.client, uri, meta, options);
}
/**
* 获取 head 信息
* @param uri
* @param options
* @return {Promise}
*/
head(uri, options = {}) {
return this.client.head(uri, options);
}
/**
* 下载文件
* @param uri
* @param file
* @param options
* @return {Promise}
*/
download(uri, file, options) {
const { pathname: currentPathname, filename } = options, opts = __rest(options, ["pathname", "filename"]);
if (!uri) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('uri is required');
}
if (!file) {
file = path_1.default.basename(uri);
}
const dir = currentPathname;
file = path_1.default.resolve(dir, filename || file);
return utils_1.get(this.client, uri, file, opts);
}
/**
* 获取 String 资源到内存
* @param uri
* @param options
* @return {PromiseLike<string> | Promise<string>}
*/
getString(uri, options = {}) {
return utils_1.get(this.client, uri, null, options).then((data) => data.content.toString());
}
/**
* 从内存写 String 数据到 OSS
* @param uri
* @param data
* @param options
* @return {*}
*/
putString(uri, data, options = {}) {
return utils_1.put(this.client, uri, Buffer.from(data), options);
}
/**
* 获取 JSON 资源到内存
* @param uri
* @param options
* @return {PromiseLike<Object|Array> | Promise<Object|Array>}
*/
getJSON(uri, options = {}) {
return this.getString(uri, options).then((data) => {
try {
return JSON.parse(data);
}
catch (e) {
return {};
}
});
}
/**
* 从内存写 JSON 数据到 OSS
* @param uri
* @param data
* @param options
* @return {*}
*/
putJSON(uri, data, options = {}) {
data = typeof data === 'string' ? data : JSON.stringify(data, null, options.spaces || 4);
return this.putString(uri, data, options);
}
/**
* 下载整个目录到指定目录
* @param uri
* @param dir
* @param options
* @return {Promise}
*/
downloadDir(uri, dir, options = {}) {
if (!uri) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('uri is required');
}
if (!dir) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('dir is required');
}
return fs_extra_1.ensureDir(dir).then(() => utils_1.getMulti(this.client, uri, dir, options));
}
/**
* 下载给定 uris 数组的所有文件
* @param uris
* @param dir
* @param options
* @return {Promise}
*/
downloadFiles(uris, dir, options = {}) {
if (!uris || uris.length) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('a non-empty uris is required');
}
if (!dir) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('dir is required');
}
return fs_extra_1.ensureDir(dir).then(() => utils_1.getMultiByUris(this.client, uris, dir, options));
}
/**
* 上传文件
* @param uri
* @param file
* @param options
* @return {*}
*/
upload(uri, file, options = {}) {
if (!uri) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('uri is required');
}
if (!file) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('file is required');
}
return utils_1.put(this.client, uri, file, options);
}
/**
* 上传整个目录
* @param uri
* @param dir
* @param options
* @return {*}
*/
uploadDir(uri, dir, options = {}) {
if (!uri) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('uri is required');
}
if (!dir) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('dir is required');
}
return utils_1.putMulti(this.client, uri, dir, options);
}
/**
* 列出指定前缀的 objects
* @param dir
* @param options
* @return {*}
*/
list(dir, options = {}) {
if (!dir) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('dir is required');
}
return utils_1.list(this.client, dir, options);
}
/**
* 删除指定前缀的 objects
* @param dir
* @param options
* @return {*}
*/
deleteDir(dir, options = {}) {
if (!dir) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('dir is required');
}
return utils_1.deleteByPrefix(this.client, dir, options);
}
/**
* 删除指定的 object
* @param file
* @param options
* @return {Promise}
*/
delete(file, options = {}) {
if (!file) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('file is required');
}
return utils_1.deleteObjects(this.client, [file], options).then((names) => names);
}
/**
* 删除指定的 objects
* @param files
* @param options
* @return {*}
*/
deleteFiles(files, options = {}) {
return utils_1.deleteObjects(this.client, files, options);
}
copy(sourceFile, targetFile, options = {}) {
if (!sourceFile) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('sourceFile is required');
}
if (!targetFile) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('targetFile is required');
}
return utils_1.copy(this.client, sourceFile, targetFile, options);
}
/**
* 根据指定 sourceDir、targetDir 进行拷贝
* @param sourceDir
* @param targetDir
* @param options
* @return {*}
*/
copyDir(sourceDir, targetDir, options = {}) {
if (!sourceDir) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('sourceDir is required');
}
if (!targetDir) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('targetDir is required');
}
return utils_1.copyByPrefix(this.client, path_1.default.join(sourceDir, '/'), path_1.default.join(targetDir, '/'), options);
}
/**
* 创建软链接
* @param symlinkUri
* @param targetUri
* @param options
*/
putSymlink(symlinkUri, targetUri, options = {}) {
if (!symlinkUri) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('symlinkUri is required');
}
if (!targetUri) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('targetUri is required');
}
return utils_1.putSymlink(this.client, symlinkUri, targetUri, options);
}
}
exports.Oss = Oss;