takin
Version:
Front end engineering base toolchain and scaffold
63 lines • 2.02 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.download = exports.getName = exports.supportProtocol = exports.parseOptions = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const errors_1 = require("../errors");
const LINK_URL_REGEXP = /^link:(\/?(?:[^/]+\/)*[^/]+\/?)$/;
/**
* 解析 link 链接或选项
* @param pathOrOptions - 链接或选项
* @returns 解析后的 link 链接或选项
*/
function parseOptions(pathOrOptions) {
let path;
let options = {};
if (typeof pathOrOptions === 'string') {
path = pathOrOptions;
}
else {
path = pathOrOptions.path;
options = { ...options, ...pathOrOptions };
}
if (!path)
throw new errors_1.DownloaderError('解析 link 选项错误: 缺少 path');
return { ...options, path };
}
exports.parseOptions = parseOptions;
/**
* 判断是否支持处理当前链接
* @param url - 链接
* @returns 是否支持该链接
*/
function supportProtocol(url) {
if (!url)
return false;
return LINK_URL_REGEXP.test(url);
}
exports.supportProtocol = supportProtocol;
/**
* 基于 link 链接选项获取名称
* @param linkOptions - link 链接选项
* @returns 名称
*/
function getName(linkOptions) {
return (linkOptions.path || '').trim().replace(/^\//, '');
}
exports.getName = getName;
/**
* 下载 link 链接到指定目录
* @param linkOptions - link 链接选项
* @param dest - 指定目录地址
*/
async function download(linkOptions, dest) {
// 如果软链已存在, 则移除重建
if ((await fs_extra_1.default.pathExists(dest)) && (await fs_extra_1.default.stat(dest)).isSymbolicLink()) {
await fs_extra_1.default.remove(dest);
}
await fs_extra_1.default.ensureSymlink(linkOptions.path, dest);
}
exports.download = download;
//# sourceMappingURL=link.js.map