UNPKG

takin

Version:

Front end engineering base toolchain and scaffold

63 lines 2.02 kB
"use strict"; 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