Socket
Socket
Sign inDemoInstall

hlink

Package Overview
Dependencies
Maintainers
1
Versions
82
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hlink - npm Package Compare versions

Comparing version 0.4.0 to 0.4.1

6

lib/cli.js

@@ -36,3 +36,3 @@ #!/usr/bin/env node

var os_1 = __importDefault(require("os"));
var cli = meow_1.default("\n QQ\u53CD\u9988\u7FA4\u53F7\uFF1A" + chalk_1.default.cyanBright('807101297') + "\n\n \u7528\u6CD5:\n $ hlink [--Options] [sourceDir] distDir\n\n \u53EF\u914D\u7F6E\u9009\u9879:\n --saveMode,-s \u4FDD\u5B58\u6A21\u5F0F,\u9ED8\u8BA4\u4E3A\u6A21\u5F0F0\n " + chalk_1.default.gray("saveMode=1 \u4FDD\u5B58\u4E00\u7EA7\u76EE\u5F55\n saveMode=0 \u4FDD\u5B58\u539F\u6709\u7684\u76F8\u5BF9\u6E90\u5730\u5740\u7684\u8DEF\u5F84") + "\n\n --includeExtname,-i \u5305\u542B\u7684\u6269\u5C55\u540D,\u591A\u4E2A\u7528','\u9694\u5F00\n " + chalk_1.default.gray("\u5982\u679C\u4E0D\u914D\u7F6E\u8BE5\u9879,\u4F1A\u91C7\u7528\u4EE5\u4E0B\u7B56\u7565\n * 1. \u914D\u7F6E\u4E86excludeExtnam,\u5219\u94FE\u63A5\u6587\u4EF6\u4E3A\u6392\u9664\u540E\u7684\u5176\u4ED6\u6587\u4EF6\n * 2. \u672A\u914D\u7F6EexcludeExtname,\u5219\u94FE\u63A5\u6587\u4EF6\u4E3A\u76EE\u5F55\u4E0B\u7684\u6240\u6709\u6587\u4EF6") + "\n\n --excludeExtname,-e \u6392\u9664\u7684\u6269\u5C55\u540D,\u591A\u4E2A\u7528','\u9694\u5F00\u5982\u679C\u914D\u7F6E\u4E86" + chalk_1.default.cyan('includeExtname') + "\u5219\u8BE5\u914D\u7F6E\u65E0\u6548\n\n --maxFindLevel,-m \u67E5\u627E\u6587\u4EF6\u7684\u6700\u5927\u5C42\u7EA7,\u9ED8\u8BA44\u5C42\n --delete,-d \u5220\u9664\u76EE\u6807\u5730\u5740\u6240\u6709\u786C\u94FE,\u9ED8\u8BA4\u4E3Afalse\n --generateConfig,-g \u751F\u6210config\u6587\u4EF6,\u53EF\u4EE5\u4F7F\u7528 hlink -g \u67E5\u770B\u8DEF\u5F84\n --removeConfig,-r \u5220\u9664\u914D\u7F6E\u6587\u4EF6\n --configPath,-c \u6307\u5B9A\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84,\u8BF7\u4F7F\u7528\u7EDD\u5BF9\u8DEF\u5F84\n --openCache,-o \u662F\u5426\u6253\u5F00\u7F13\u5B58,\u9ED8\u8BA4\u4E3Atrue, \u4F1A\u6253\u5F00\n \u6253\u5F00\u540E,\u6BCF\u6B21\u786C\u94FE\u540E\u4F1A\u628A\u5BF9\u5E94\u6587\u4EF6\u5B58\u5165\u7F13\u5B58,\u5C31\u7B97\u4E0B\u6B21\u5220\u9664\u786C\u94FE\uFF0C\u4E5F\u4E0D\u4F1A\u8FDB\u884C\u786C\u94FE\n\n --mkdirIfSingle \u662F\u5426\u4E3A\u72EC\u7ACB\u6587\u4EF6\u521B\u5EFA\u540C\u540D\u6587\u4EF6\u5939,\u9ED8\u8BA4\u4E3Atrue,\u4F1A\u521B\u5EFA\n --backup \u5907\u4EFDhlink\u76EE\u5F55\u7F13\u5B58\u7B49 \u5907\u4EFD\u8DEF\u5F84\n --restore \u8FD8\u539Fhlink\u76EE\u5F55\u7F13\u5B58\u7B49 \u8FD8\u539F\u8DEF\u5F84\n\n \u4F8B\u5B50:\n " + chalk_1.default.grey('# 创建 /share/download 下面文件到目标地址 /share/movie') + "\n $ hlink /share/download /share/movie\n\n " + chalk_1.default.grey('# 删除 /share/download 下面文件在 /share/movie 下面的对应硬链的文件夹') + "\n $ hlink -d /share/download /share/movie\n\n " + chalk_1.default.grey('# 交互删除(推荐)') + "\n $ hlink -d\n\n " + chalk_1.default.grey('# 生成配置文件') + "\n $ hlink -g", {
var cli = (0, meow_1.default)("\n QQ\u53CD\u9988\u7FA4\u53F7\uFF1A" + chalk_1.default.cyanBright('807101297') + "\n\n \u7528\u6CD5:\n $ hlink [--Options] [sourceDir] distDir\n\n \u53EF\u914D\u7F6E\u9009\u9879:\n --saveMode,-s \u4FDD\u5B58\u6A21\u5F0F,\u9ED8\u8BA4\u4E3A\u6A21\u5F0F0\n " + chalk_1.default.gray("saveMode=1 \u4FDD\u5B58\u4E00\u7EA7\u76EE\u5F55\n saveMode=0 \u4FDD\u5B58\u539F\u6709\u7684\u76F8\u5BF9\u6E90\u5730\u5740\u7684\u8DEF\u5F84") + "\n\n --includeExtname,-i \u5305\u542B\u7684\u6269\u5C55\u540D,\u591A\u4E2A\u7528','\u9694\u5F00\n " + chalk_1.default.gray("\u5982\u679C\u4E0D\u914D\u7F6E\u8BE5\u9879,\u4F1A\u91C7\u7528\u4EE5\u4E0B\u7B56\u7565\n * 1. \u914D\u7F6E\u4E86excludeExtnam,\u5219\u94FE\u63A5\u6587\u4EF6\u4E3A\u6392\u9664\u540E\u7684\u5176\u4ED6\u6587\u4EF6\n * 2. \u672A\u914D\u7F6EexcludeExtname,\u5219\u94FE\u63A5\u6587\u4EF6\u4E3A\u76EE\u5F55\u4E0B\u7684\u6240\u6709\u6587\u4EF6") + "\n\n --excludeExtname,-e \u6392\u9664\u7684\u6269\u5C55\u540D,\u591A\u4E2A\u7528','\u9694\u5F00\u5982\u679C\u914D\u7F6E\u4E86" + chalk_1.default.cyan('includeExtname') + "\u5219\u8BE5\u914D\u7F6E\u65E0\u6548\n\n --maxFindLevel,-m \u67E5\u627E\u6587\u4EF6\u7684\u6700\u5927\u5C42\u7EA7,\u9ED8\u8BA44\u5C42\n --delete,-d \u5220\u9664\u76EE\u6807\u5730\u5740\u6240\u6709\u786C\u94FE,\u9ED8\u8BA4\u4E3Afalse\n --generateConfig,-g \u751F\u6210config\u6587\u4EF6,\u53EF\u4EE5\u4F7F\u7528 hlink -g \u67E5\u770B\u8DEF\u5F84\n --removeConfig,-r \u5220\u9664\u914D\u7F6E\u6587\u4EF6\n --configPath,-c \u6307\u5B9A\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84,\u8BF7\u4F7F\u7528\u7EDD\u5BF9\u8DEF\u5F84\n --openCache,-o \u662F\u5426\u6253\u5F00\u7F13\u5B58,\u9ED8\u8BA4\u4E3Atrue, \u4F1A\u6253\u5F00\n \u6253\u5F00\u540E,\u6BCF\u6B21\u786C\u94FE\u540E\u4F1A\u628A\u5BF9\u5E94\u6587\u4EF6\u5B58\u5165\u7F13\u5B58,\u5C31\u7B97\u4E0B\u6B21\u5220\u9664\u786C\u94FE\uFF0C\u4E5F\u4E0D\u4F1A\u8FDB\u884C\u786C\u94FE\n\n --mkdirIfSingle \u662F\u5426\u4E3A\u72EC\u7ACB\u6587\u4EF6\u521B\u5EFA\u540C\u540D\u6587\u4EF6\u5939,\u9ED8\u8BA4\u4E3Atrue,\u4F1A\u521B\u5EFA\n --backup \u5907\u4EFDhlink\u76EE\u5F55\u7F13\u5B58\u7B49 \u5907\u4EFD\u8DEF\u5F84\n --restore \u8FD8\u539Fhlink\u76EE\u5F55\u7F13\u5B58\u7B49 \u8FD8\u539F\u8DEF\u5F84\n\n \u4F8B\u5B50:\n " + chalk_1.default.grey('# 创建 /share/download 下面文件到目标地址 /share/movie') + "\n $ hlink /share/download /share/movie\n\n " + chalk_1.default.grey('# 删除 /share/download 下面文件在 /share/movie 下面的对应硬链的文件夹') + "\n $ hlink -d /share/download /share/movie\n\n " + chalk_1.default.grey('# 交互删除(推荐)') + "\n $ hlink -d\n\n " + chalk_1.default.grey('# 生成配置文件') + "\n $ hlink -g", {
flags: {

@@ -118,3 +118,3 @@ saveMode: {

else if ('g' in flags) {
config_1.default(!!flags.g
(0, config_1.default)(!!flags.g
? path_1.default.isAbsolute(flags.g)

@@ -126,4 +126,4 @@ ? path_1.default.join(flags.g, paths.configName)

else {
index_1.default(cli.input, flags);
(0, index_1.default)(cli.input, flags);
}
}

@@ -33,3 +33,3 @@ "use strict";

if (fs_extra_1.default.existsSync(createPath)) {
utils_1.warning(fs_extra_1.default.existsSync(createPath), "\u914D\u7F6E\u6587\u4EF6\u5DF2\u5B58\u5728 " + chalk_1.default.cyan(createPath) + " \u8BF7\u52FF\u91CD\u590D\u521B\u5EFA");
(0, utils_1.warning)(fs_extra_1.default.existsSync(createPath), "\u914D\u7F6E\u6587\u4EF6\u5DF2\u5B58\u5728 " + chalk_1.default.cyan(createPath) + " \u8BF7\u52FF\u91CD\u590D\u521B\u5EFA");
}

@@ -36,0 +36,0 @@ try {

@@ -19,6 +19,6 @@ "use strict";

if (source) {
utils_1.warning(!path_1.default.isAbsolute(source), '配置文件', chalk_1.default.cyan(configPath), '源地址必须指定绝对路劲');
(0, utils_1.warning)(!path_1.default.isAbsolute(source), '配置文件', chalk_1.default.cyan(configPath), '源地址必须指定绝对路劲');
}
if (dest) {
utils_1.warning(!path_1.default.isAbsolute(dest), '配置文件', chalk_1.default.cyan(configPath), '目标必须指定绝对路劲');
(0, utils_1.warning)(!path_1.default.isAbsolute(dest), '配置文件', chalk_1.default.cyan(configPath), '目标必须指定绝对路劲');
}

@@ -25,0 +25,0 @@ return {

@@ -102,11 +102,11 @@ "use strict";

totalCount += 1;
realDestPath = utils_1.getRealDestPath(fileFullPath, source, dest, saveMode, mkdirIfSingle);
realDestPath = (0, utils_1.getRealDestPath)(fileFullPath, source, dest, saveMode, mkdirIfSingle);
if (isDelete) {
// 删除硬链接
try {
linkPaths = utils_1.getLinkPath(fileFullPath, dest, isDeleteDir);
linkPaths = (0, utils_1.getLinkPath)(fileFullPath, dest, isDeleteDir);
if (linkPaths.length) {
linkPaths.forEach(function (removePath) {
execa_1.default.sync('rm', ['-r', removePath]);
var deletePathMessage = chalk_1.default.cyan(utils_1.getDirBasePath(dest, removePath));
var deletePathMessage = chalk_1.default.cyan((0, utils_1.getDirBasePath)(dest, removePath));
utils_1.log.info(isDeleteDir ? '目录' : '硬链', deletePathMessage, '删除成功');

@@ -118,3 +118,3 @@ successCount += 1;

jumpCount += 1;
utils_1.log.warn('没找到', chalk_1.default.yellow(utils_1.getDirBasePath(dest, fileFullPath)), '相关硬链, 跳过');
utils_1.log.warn('没找到', chalk_1.default.yellow((0, utils_1.getDirBasePath)(dest, fileFullPath)), '相关硬链, 跳过');
}

@@ -124,3 +124,3 @@ }

if (e.message === 'ALREADY_DELETE') {
utils_1.log.warn('目录', chalk_1.default.yellow(utils_1.getDirBasePath(dest, realDestPath)), '已删除, 跳过');
utils_1.log.warn('目录', chalk_1.default.yellow((0, utils_1.getDirBasePath)(dest, realDestPath)), '已删除, 跳过');
jumpCount += 1;

@@ -135,14 +135,14 @@ }

else {
sourceNameForMessage = chalk_1.default.yellow(utils_1.getDirBasePath(source, fileFullPath));
destNameForMessage = chalk_1.default.cyan(utils_1.getDirBasePath(dest, path_1.default.join(realDestPath, name)));
sourceNameForMessage = chalk_1.default.yellow((0, utils_1.getDirBasePath)(source, fileFullPath));
destNameForMessage = chalk_1.default.cyan((0, utils_1.getDirBasePath)(dest, path_1.default.join(realDestPath, name)));
try {
if (utils_1.checkLinkExist(fileFullPath, dest)) {
if ((0, utils_1.checkLinkExist)(fileFullPath, dest)) {
throw new HlinkError_1.default('File exists');
}
destFullPath = path_1.default.join(realDestPath, path_1.default.basename(fileFullPath));
if (!saveCache_1.checkCache(fileFullPath, destFullPath) || !openCache) {
if (!(0, saveCache_1.checkCache)(fileFullPath, destFullPath) || !openCache) {
fs_extra_1.default.ensureDirSync(realDestPath);
execa_1.default.sync('ln', [fileFullPath, realDestPath]);
utils_1.log.success('源地址', sourceNameForMessage, '硬链成功, 硬链地址为', destNameForMessage);
saveCache_1.default(fileFullPath, destFullPath);
(0, saveCache_1.default)(fileFullPath, destFullPath);
successCount += 1;

@@ -183,7 +183,7 @@ }

isSecondDir = false;
return [4 /*yield*/, parse_1.default(input, options)];
return [4 /*yield*/, (0, parse_1.default)(input, options)];
case 1:
_a = _b.sent(), source = _a.source, saveMode = _a.saveMode, dest = _a.dest, isDelete = _a.isDelete, maxFindLevel = _a.maxFindLevel, exts = _a.exts, excludeExts = _a.excludeExts, sourceDir = _a.sourceDir, isDeleteDir = _a.isDeleteDir, openCache = _a.openCache, mkdirIfSingle = _a.mkdirIfSingle;
isWhiteList = !!exts.length;
utils_1.startLog({
(0, utils_1.startLog)({
extname: (isWhiteList ? exts : excludeExts).join(','),

@@ -201,4 +201,4 @@ maxLevel: maxFindLevel,

start(source);
saveRecord_1.default(sourceDir, dest, isDelete && !isSecondDir);
utils_1.endLog(successCount, failCount, jumpCount, totalCount, jumpCountForCache, isDelete);
(0, saveRecord_1.default)(sourceDir, dest, isDelete && !isSecondDir);
(0, utils_1.endLog)(successCount, failCount, jumpCount, totalCount, jumpCountForCache, isDelete);
return [2 /*return*/];

@@ -205,0 +205,0 @@ }

"use strict";
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};

@@ -23,3 +27,3 @@ var __importDefault = (this && this.__importDefault) || function (mod) {

}
console.log.apply(console, __spreadArray([chalk_1.default.cyan("[" + logHead + " INFO]:")], args));
console.log.apply(console, __spreadArray([chalk_1.default.cyan("[" + logHead + " INFO]:")], args, false));
},

@@ -31,3 +35,3 @@ warn: function () {

}
console.log.apply(console, __spreadArray([chalk_1.default.yellow("[" + logHead + " WARN]:")], args));
console.log.apply(console, __spreadArray([chalk_1.default.yellow("[" + logHead + " WARN]:")], args, false));
},

@@ -39,3 +43,3 @@ error: function () {

}
console.log.apply(console, __spreadArray([chalk_1.default.red("[" + logHead + " ERROR]:")], args));
console.log.apply(console, __spreadArray([chalk_1.default.red("[" + logHead + " ERROR]:")], args, false));
},

@@ -47,3 +51,3 @@ success: function () {

}
console.log.apply(console, __spreadArray([chalk_1.default.green("[" + logHead + " SUCCESS]:")], args));
console.log.apply(console, __spreadArray([chalk_1.default.green("[" + logHead + " SUCCESS]:")], args, false));
}

@@ -77,2 +81,3 @@ };

var findOut = false;
destPath = path_1.default.join(destPath, '/');
findOut = execa_1.default.sync('find', [destPath, '-inum', fileNumber]).stdout;

@@ -79,0 +84,0 @@ return findOut

@@ -69,16 +69,16 @@ "use strict";

function checkSaveMode(saveMode) {
index_1.warning([0, 1].indexOf(saveMode) === -1, '保存模式只能设置为0/1', '当前配置为', saveMode);
(0, index_1.warning)([0, 1].indexOf(saveMode) === -1, '保存模式只能设置为0/1', '当前配置为', saveMode);
}
function checkFindLevel(level) {
index_1.warning(Number.isNaN(level), '查找的最大层级maxFindLevel必须设置为数字', '当前配置为', level);
(0, index_1.warning)(Number.isNaN(level), '查找的最大层级maxFindLevel必须设置为数字', '当前配置为', level);
if (level > 6) {
index_1.log.warn('最大层级maxFindLevel大于6 可能会有性能问题! 请根据情况自行处理');
}
index_1.warning(level < 1, '保存的最大层级maxFindLevel不能小于1', '当前配置为', level);
(0, index_1.warning)(level < 1, '保存的最大层级maxFindLevel不能小于1', '当前配置为', level);
}
function checkDirectory(source, dest) {
index_1.warning(!source || !dest, '必须指定原地址和目标地址');
index_1.warning(!fs_extra_1.default.existsSync(source), '源地址不存在,请检查路径是否正确');
(0, index_1.warning)(!source || !dest, '必须指定原地址和目标地址');
(0, index_1.warning)(!fs_extra_1.default.existsSync(source), '源地址不存在,请检查路径是否正确');
fs_extra_1.default.ensureDirSync(dest);
index_1.warning(source === dest, '源地址和目标地址不能相同');
(0, index_1.warning)(source === dest, '源地址和目标地址不能相同');
}

@@ -97,3 +97,3 @@ function parseInput(input, isDelete) {

if (!isDelete) return [3 /*break*/, 2];
return [4 /*yield*/, questions_1.deleteModeQuestion()];
return [4 /*yield*/, (0, questions_1.deleteModeQuestion)()];
case 1:

@@ -117,7 +117,7 @@ answerDeleteMode = _b.sent();

if (!isDelete) return [3 /*break*/, 6];
return [4 /*yield*/, questions_1.deleteQuestion()];
return [4 /*yield*/, (0, questions_1.deleteQuestion)()];
case 5:
answers = _b.sent();
saveRecords = paths.deleteConfig.read();
_a = questions_1.getSource(answers), finalSource = _a[0], finalSourceDir = _a[1];
_a = (0, questions_1.getSource)(answers), finalSource = _a[0], finalSourceDir = _a[1];
source = finalSource;

@@ -159,3 +159,3 @@ sourceDir = finalSourceDir;

_a = _c.sent(), source = _a.source, sourceDir = _a.sourceDir, isDeleteDir = _a.isDeleteDir, isSecondDir = _a.isSecondDir, dest = _a.dest;
_b = parseConfig_1.default(configPath), mfl = _b.maxFindLevel, sm = _b.saveMode, ie = _b.includeExtname, ee = _b.excludeExtname, configSource = _b.source, configDest = _b.dest, configOpenCache = _b.openCache, configMkdirIfSingle = _b.mkdirIfSingle;
_b = (0, parseConfig_1.default)(configPath), mfl = _b.maxFindLevel, sm = _b.saveMode, ie = _b.includeExtname, ee = _b.excludeExtname, configSource = _b.source, configDest = _b.dest, configOpenCache = _b.openCache, configMkdirIfSingle = _b.mkdirIfSingle;
source = source || configSource;

@@ -162,0 +162,0 @@ sourceDir = sourceDir || source;

{
"name": "hlink",
"version": "0.4.0",
"version": "0.4.1",
"description": "hlink",

@@ -5,0 +5,0 @@ "license": "MIT",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc