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.7.5 to 1.0.0

3

lib/bins/main/parseConfig.js

@@ -41,2 +41,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import chalk from 'chalk';
import { pathToFileURL } from 'url';
function parseConfig(configPath) {

@@ -54,3 +55,3 @@ return __awaiter(this, void 0, void 0, function () {

}
return [4 /*yield*/, import(configPath)];
return [4 /*yield*/, import(pathToFileURL(configPath).href)];
case 1:

@@ -57,0 +58,0 @@ config = (_a.sent())["default"];

import chalk from 'chalk';
export default "\nQQ\u53CD\u9988\u7FA4\u53F7\uFF1A".concat(chalk.cyanBright('807101297'), "\n\n\u7528\u6CD5:\n hlink prune /path/to/source1,/path/to/source2 /path/to/dest1,/path/to/dest2\n\n\u8BF4\u660E:\n \u8BE6\u7EC6\u8BF4\u660E\u89C1 https://github.com/likun7981/hlink/blob/master/docs/prune.md\n\n\u6CE8\u610F:\n \u56E0\u4E3A\u6211\u4EEC\u91C7\u7528 ").concat(chalk.cyan(',(英文逗号)'), " \u6765\u8FDB\u884C\u591A\u9879\u8F93\u5165\u3002\n \u6240\u4EE5\u4F60\u7684\u8DEF\u5F84\u4E00\u5B9A\u4E0D\u8981\u5305\u542B ").concat(chalk.cyan(',(英文逗号)'), "\u3002\n \u5426\u5219\u4F1A\u5BFC\u81F4\u672A\u77E5\u9519\u8BEF\uFF0C\u540E\u679C\u81EA\u8D1F~\n\n\u7528\u6CD5:\n ").concat(chalk.gray('# 修剪多余硬链文件'), "\n $ hlink prune sourceDir1,sourceDir2 destDir1,destDir2\n ").concat(chalk.gray('# 修剪多余硬链并删除所在目录'), "\n $ hlink prune -p sourceDir1,sourceDir2 destDir1,destDir2\n ").concat(chalk.gray('# 修剪时无需确认,一般使用于计划任务'), "\n $ hlink prune -w sourceDir1,sourceDir2 destDir1,destDir2\n\n\u53EF\u914D\u7F6E\u9009\u9879:\n --pruneDir,-p \u662F\u5426\u5220\u9664\u786C\u94FE\u6587\u4EF6\u53CA\u6240\u5728\u76EE\u5F55\u3002\n \u5982\u679C\u7ED9\u4E86\u8FD9\u4E2A\u9009\u9879\u5219\u4F1A \u5426\u5219\u53EA\u4F1A\u5220\u9664 \u786C\u94FE\u6587\u4EF6\n\n --withoutConfirm,-w \u5220\u9664\u524D\u662F\u5426\u9700\u786E\u8BA4? \u9ED8\u8BA4\u9700\u8981\u786E\u8BA4\u3002\n \u5982\u679C\u4F60\u4F7F\u7528\u8BA1\u5212\u4EFB\u52A1\uFF0C\u5EFA\u8BAE\u8BBE\u7F6E\u4E3A\u65E0\u9700\u786E\u8BA4\n --includeExtname,i \u68C0\u6D4B\u5305\u542B\u7684\u540E\u7F00\u540D\uFF0C\u540Chlink --help\u4E2D\u7684includeExtname\u4E00\u6837\n --excludeExtname,e \u68C0\u6D4B\u6392\u9664\u7684\u540E\u7F00\u540D\uFF0C\u540Chlink --help\u4E2D\u7684excludeExtname\u4E00\u6837\n");
export default "\nQQ\u53CD\u9988\u7FA4\u53F7\uFF1A".concat(chalk.cyanBright('807101297'), "\n\n\u7528\u6CD5:\n hlink prune /path/to/source1,/path/to/source2 /path/to/dest1,/path/to/dest2\n\n\u8BF4\u660E:\n \u8BE6\u7EC6\u8BF4\u660E\u89C1 https://github.com/likun7981/hlink/blob/master/docs/prune.md\n\n\u6CE8\u610F:\n \u56E0\u4E3A\u6211\u4EEC\u91C7\u7528 ").concat(chalk.cyan(',(英文逗号)'), " \u6765\u8FDB\u884C\u591A\u9879\u8F93\u5165\u3002\n \u6240\u4EE5\u4F60\u7684\u8DEF\u5F84\u4E00\u5B9A\u4E0D\u8981\u5305\u542B ").concat(chalk.cyan(',(英文逗号)'), "\u3002\n \u5426\u5219\u4F1A\u5BFC\u81F4\u672A\u77E5\u9519\u8BEF\uFF0C\u540E\u679C\u81EA\u8D1F~\n\n\u7528\u6CD5:\n ").concat(chalk.gray('# 修剪多余硬链文件'), "\n $ hlink prune sourceDir1,sourceDir2 destDir1,destDir2\n ").concat(chalk.gray('# 修剪多余硬链并删除所在目录'), "\n $ hlink prune -p sourceDir1,sourceDir2 destDir1,destDir2\n ").concat(chalk.gray('# 修剪时无需确认,一般使用于计划任务'), "\n $ hlink prune -w sourceDir1,sourceDir2 destDir1,destDir2\n\n\u53EF\u914D\u7F6E\u9009\u9879:\n --pruneDir,-p \u662F\u5426\u5220\u9664\u6587\u4EF6\u53CA\u6240\u5728\u76EE\u5F55\uFF0C\u9ED8\u8BA4\u53EA\u4F1A\u5220\u9664\u6587\u4EF6\n ").concat(chalk.gray('如果你指定了该选项则会删除文件及所在目录'), "\n\n --withoutConfirm,-w \u5220\u9664\u524D\u662F\u5426\u9700\u786E\u8BA4? \u9ED8\u8BA4\u9700\u8981\u786E\u8BA4\u3002\n ").concat(chalk.gray('如果你使用计划任务,建议设置为无需确认'), "\n ").concat(chalk.gray('Windows Git Bash不支持提示,所以会直接删除,执行前确认好'), "\n\n --includeExtname,-i \u68C0\u6D4B\u5305\u542B\u7684\u540E\u7F00\u540D\uFF0C\u540Chlink --help\u4E2D\u7684includeExtname\u4E00\u6837\n --excludeExtname,-e \u68C0\u6D4B\u6392\u9664\u7684\u540E\u7F00\u540D\uFF0C\u540Chlink --help\u4E2D\u7684excludeExtname\u4E00\u6837\n\n --reverse,-r \u68C0\u6D4B\u65B9\u5411\uFF0C\u9ED8\u8BA4\u662F\u6B63\u5411\u68C0\u6D4B\uFF0C\u5982\u679C\u4F60\u6307\u5B9A\u4E86\u8BE5\u9009\u9879\u5219\u4F1A\u662F\u53CD\u5411\u68C0\u6D4B\n ").concat(chalk.gray("1. \u6B63\u5411\u68C0\u6D4B\uFF1A\u5220\u9664\u7684\u662F\u786C\u94FE\u76EE\u5F55\u7684\u6587\u4EF6\uFF0C\u4FEE\u526A\u786C\u94FE\u76EE\u5F55\u6BD4\u6E90\u76EE\u5F55\u591A\u7684\u6587\u4EF6\u3002\n ".concat(chalk.cyan('注意:正向检测一定要列全所有的源目录'), "\n 2. \u53CD\u5411\u68C0\u6D4B\uFF1A\u5220\u9664\u7684\u662F\u6E90\u76EE\u5F55\u76EE\u5F55\u7684\u6587\u4EF6\uFF0C\u4FEE\u526A\u6E90\u76EE\u5F55\u6BD4\u786C\u94FE\u76EE\u5F55\u591A\u7684\u6587\u4EF6\u3002\n ").concat(chalk.cyan('注意:反向检测一定要列全所有的硬链目录,hlink会帮你排除缓存的文件'))), "\n");

@@ -44,10 +44,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import defaultInclude from '../defaultInclude.js';
import deleteEmptyDir from './deleteEmptyDir.js';
import { cacheRecord } from '../../paths.js';
var timeLog = createTimeLog();
function prune(sourceStr, destStr, flags) {
return __awaiter(this, void 0, void 0, function () {
var help, pruneDir, withoutConfirm, includeExtname, excludeExtname, exts, excludeExts, isWhiteList, sourceArr, destArr, inodes, pathsNeedDelete, answer;
var help, pruneDir, withoutConfirm, includeExtname, excludeExtname, reverse, cached, exts, excludeExts, isWhiteList, sourceArr, destArr, tmp, inodes, pathsNeedDelete, answer;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
help = flags.help, pruneDir = flags.pruneDir, withoutConfirm = flags.withoutConfirm, includeExtname = flags.includeExtname, excludeExtname = flags.excludeExtname;
help = flags.help, pruneDir = flags.pruneDir, withoutConfirm = flags.withoutConfirm, includeExtname = flags.includeExtname, excludeExtname = flags.excludeExtname, reverse = flags.reverse;
if (help) {

@@ -58,2 +60,3 @@ console.log(helpText);

warning(!sourceStr || !destStr, '必须指定要检测的源目录和硬链目录集合');
cached = (reverse && cacheRecord.read()) || [];
exts = (includeExtname || excludeExtname ? '' : defaultInclude)

@@ -82,5 +85,13 @@ .split(',')

console.log();
log.info('检测模式:', chalk.magenta(reverse
? '反向检测,删除源目录比硬链目录多的文件,hlink会帮你排除缓存的文件'
: '正向检测,删除硬链目录比源目录多的文件'));
log.info('删除模式:', chalk.magenta(pruneDir ? '删除硬链所在目录' : '仅仅删除硬链文件'));
log.info('运行模式:', chalk.magenta(isWhiteList ? '白名单' : '黑名单' + '模式'));
log.info(isWhiteList ? '包含的后缀有:' : '排除的后缀有:', chalk.magenta(isWhiteList ? exts.join(',') : excludeExts.join(',')));
if (reverse) {
tmp = sourceArr;
sourceArr = destArr;
destArr = tmp;
}
log.info('开始分析目录集合...');

@@ -101,2 +112,6 @@ inodes = makeOnly(sourceArr.reduce(function (result, source) {

: excludeExts.indexOf(extname) === -1;
// 反向检测,则需要关注cache的处理
if (reverse && isSupported) {
isSupported = !cached.includes(item.fullPath);
}
return isSupported;

@@ -111,3 +126,3 @@ })

log.info('分析完毕');
if (!pathsNeedDelete.length) return [3 /*break*/, 6];
if (!pathsNeedDelete.length) return [3 /*break*/, 7];
// 如果是删除目录,则直接过滤掉二级目录

@@ -125,3 +140,3 @@ if (pruneDir) {

answer = true;
if (!!withoutConfirm) return [3 /*break*/, 2];
if (!(!withoutConfirm && process.stdout.isTTY)) return [3 /*break*/, 2];
return [4 /*yield*/, confirm({

@@ -135,16 +150,19 @@ message: '确认是否继续?删除后无法恢复',

case 2:
if (!answer) return [3 /*break*/, 4];
if (!answer) return [3 /*break*/, 5];
return [4 /*yield*/, rmFiles(pathsNeedDelete)];
case 3:
_a.sent();
return [4 /*yield*/, deleteEmptyDir(pathsNeedDelete)];
case 4:
_a.sent();
log.success('删除完成');
return [3 /*break*/, 5];
case 4:
return [3 /*break*/, 6];
case 5:
log.info('已终止任务');
_a.label = 5;
case 5: return [3 /*break*/, 7];
case 6:
_a.label = 6;
case 6: return [3 /*break*/, 8];
case 7:
log.info('没有找到需要修剪的硬链,你的目录保持很干净');
_a.label = 7;
case 7:
_a.label = 8;
case 8:
timeLog.end();

@@ -151,0 +169,0 @@ return [2 /*return*/];

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

import meow from 'meow';
import fs from 'fs-extra';
import { restore, backup } from './bins/qnap.js';

@@ -32,2 +33,20 @@ import doctor from './bins/doctor.js';

import { log } from './utils.js';
import updateNotifier from 'update-notifier';
import path from 'path';
import { fileURLToPath } from 'url';
var pkg = fs.readJSONSync(path.resolve(fileURLToPath(import.meta.url), '../../package.json'));
var notifier = updateNotifier({
pkg: pkg
});
notifier.notify({
isGlobal: true,
message: '有版本可更新 ' +
chalk.dim('{currentVersion}') +
chalk.reset(' → ') +
chalk.green('{latestVersion}') +
' \n使用命令 ' +
chalk.cyan('{updateCommand}') +
' 进行更新,更新日志:' +
'\nhttps://github.com/likun7981/hlink/releases'
});
var cli = meow({

@@ -60,11 +79,2 @@ autoHelp: false,

},
pruneDir: {
type: 'boolean',
alias: 'p'
},
withoutConfirm: {
type: 'boolean',
alias: 'w',
"default": false
},
del: {

@@ -85,2 +95,16 @@ type: 'boolean',

alias: 'c'
},
pruneDir: {
type: 'boolean',
alias: 'p'
},
withoutConfirm: {
type: 'boolean',
alias: 'w',
"default": false
},
reverse: {
type: 'boolean',
alias: 'r',
"default": false
}

@@ -118,9 +142,3 @@ }

case 'prune':
prune(inputs[0], inputs[1], {
help: help,
pruneDir: flags.pruneDir,
withoutConfirm: flags.withoutConfirm,
includeExtname: flags.includeExtname,
excludeExtname: flags.excludeExtname
});
prune(inputs[0], inputs[1], __assign({ help: help }, flags));
break;

@@ -127,0 +145,0 @@ default:

{
"name": "hlink",
"version": "0.7.5",
"version": "1.0.0",
"description": "hlink",

@@ -20,3 +20,3 @@ "license": "MIT",

"test": "xo && ava",
"dev": "tsc -w",
"dev": "npm run clean && tsc && npm run env && tsc -w",
"clean": "rm -rf lib",

@@ -26,4 +26,3 @@ "cp": "cp src/hlink.config.tpl lib/hlink.config.tpl",

"prepublishOnly": "npm run build",
"rm": "rm /usr/local/bin/hlink ",
"env": "ln -s $PWD/lib/cli-dev.js /usr/local/bin/hlink && chmod +x ./lib/cli-dev.js",
"env": "rm /usr/local/bin/hlink && ln -s $PWD/lib/cli-dev.js /usr/local/bin/hlink && chmod +x ./lib/cli-dev.js",
"np": "np --no-cleanup --no-tests --no-yarn",

@@ -44,2 +43,3 @@ "np:beta": "np --tag=beta --any-branch --no-cleanup --no-tests --no-yarn",

"@inquirer/confirm": "0.0.19-alpha.0",
"@types/update-notifier": "^5.1.0",
"ansi-escapes": "^5.0.0",

@@ -52,2 +52,3 @@ "chalk": "^5",

"progress": "^2.0.3",
"update-notifier": "^5.1.0",
"wrap-ansi": "^8.0.1"

@@ -54,0 +55,0 @@ },

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