@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
180 lines (179 loc) • 7.31 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
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;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.putSymlink = exports.copyByPrefix = exports.copy = exports.deleteByPrefix = exports.deleteObjects = exports.list = exports.putMeta = exports.putMulti = exports.put = exports.getMultiByUris = exports.getMulti = exports.get = exports.traversalObject = void 0;
const path_1 = __importStar(require("path"));
const fs_extra_1 = require("fs-extra");
const traversal_dir_1 = require("./traversal-dir");
function noopTrue() {
return true;
}
function waitMultiPromise(items) {
return Promise.all(items);
}
function getDirReplacer(regExp, includeRoot = false) {
return includeRoot ? (data) => data : (data) => data.replace(regExp, '');
}
function traversalObject(client, prefix, callback, options) {
const _a = options || {}, { 'max-keys': maxKeys = 100, marker = undefined } = _a, opts = __rest(_a, ['max-keys', "marker"]);
return client
.list(Object.assign({ 'max-keys': maxKeys, prefix,
marker }, opts), {})
.then(({ objects = [], nextMarker = null }) => {
const data = [];
// eslint-disable-next-line no-restricted-syntax
for (const object of objects) {
const item = callback(object);
if (item === false) {
return data;
}
if (item) {
data.push(item);
}
}
if (nextMarker) {
return traversalObject(client, prefix, callback, Object.assign(Object.assign({}, options), { marker: nextMarker, 'max-keys': maxKeys })).then((next) => {
if (next.length) {
return data.concat(next);
}
return next;
});
}
return data;
});
}
exports.traversalObject = traversalObject;
function list(client, prefix, options) {
const filter = options.filter || noopTrue;
return traversalObject(client, prefix, (object) => {
const { name } = object;
if (!name.endsWith('/') && filter(name, object)) {
return name;
}
return null;
}, options);
}
exports.list = list;
function copy(client, sourceUri, targetUri, options) {
return client.copy(targetUri, sourceUri, Object.assign({}, options)).then(() => targetUri);
}
exports.copy = copy;
function get(client, uri, file, options) {
if (file) {
return fs_extra_1.ensureDir(path_1.default.dirname(file))
.then(() => client.get(uri, file, Object.assign({}, options)))
.then((data) => (options && options.origin ? data : file));
}
return client.get(uri, file, Object.assign({}, options));
}
exports.get = get;
function getMulti(client, uri, dir, options) {
const filter = options.filter || noopTrue;
const { includeRoot = false } = options;
const includeSelfRegExp = new RegExp(`^${uri}/`, 'i');
const replace = getDirReplacer(includeSelfRegExp, includeRoot);
return traversalObject(client, uri, (object) => {
const { name } = object;
if (!name.endsWith('/') && filter(name, object)) {
return get(client, name, path_1.join(dir, replace(name)), options);
}
return null;
}).then(waitMultiPromise);
}
exports.getMulti = getMulti;
function getMultiByUris(client, uris, dir, options) {
return waitMultiPromise(uris.reduce((array, item) => {
const type = typeof item;
if (type === 'string') {
array.push(get(client, item, path_1.join(dir, item), options));
}
if (type === 'object') {
array.push(get(client, item.uri, path_1.join(dir, item.file), options));
}
return array;
}, []));
}
exports.getMultiByUris = getMultiByUris;
function put(client, uri, file, options = {}) {
return client.put(uri, file, Object.assign({}, options)).then((data) => (options.origin ? data : data.name));
}
exports.put = put;
function putMulti(client, uri, dir, options = {}) {
const { includeRoot = false, filter } = options;
const includeSelfRegExp = new RegExp(`^${dir}/`, 'i');
const filterFn = (filter || ((arg) => arg));
const replace = getDirReplacer(includeSelfRegExp, includeRoot);
return traversal_dir_1.traversalDir(dir, (file) => {
const value = filterFn(file);
if (value) {
const filepath = typeof value === 'string' ? value : file;
const target = path_1.join(uri, replace(filepath));
return put(client, target, filepath, options);
}
return undefined;
}, options);
}
exports.putMulti = putMulti;
function putMeta(client, uri, meta, options) {
return client.putMeta(uri, meta, Object.assign({}, options));
}
exports.putMeta = putMeta;
function deleteObjects(client, names, options) {
if (names.length) {
const opts = Object.assign(Object.assign({}, options), { quiet: true });
return client.deleteMulti(names, opts).then(() => names);
}
return Promise.resolve(names);
}
exports.deleteObjects = deleteObjects;
function deleteByPrefix(client, prefix, options) {
return list(client, prefix, options).then((names) => deleteObjects(client, names, options));
}
exports.deleteByPrefix = deleteByPrefix;
function copyByPrefix(client, sourcePrefix, targetPrefix, options) {
const filter = options.filter || noopTrue;
const sourceRegExp = new RegExp(`^${sourcePrefix}`, 'i');
return traversalObject(client, sourcePrefix, (object) => {
const { name } = object;
if (!name.endsWith('/') && filter(name, object)) {
const newName = name.replace(sourceRegExp, targetPrefix);
return copy(client, name, newName, options);
}
return null;
}).then(waitMultiPromise);
}
exports.copyByPrefix = copyByPrefix;
function putSymlink(client, symlinkUri, targetUri, options) {
return client
.putSymlink(symlinkUri, targetUri, options);
}
exports.putSymlink = putSymlink;