Comparing version 0.7.5 to 1.0.0
@@ -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 @@ }, |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
93977
1874
1
11
13
+ Addedupdate-notifier@^5.1.0
+ Added@sindresorhus/is@0.14.0(transitive)
+ Added@szmarczak/http-timer@1.1.2(transitive)
+ Added@types/configstore@6.0.2(transitive)
+ Added@types/update-notifier@5.1.0(transitive)
+ Addedansi-align@3.0.1(transitive)
+ Addedboxen@4.2.05.1.2(transitive)
+ Addedcacheable-request@6.1.0(transitive)
+ Addedcamelcase@5.3.1(transitive)
+ Addedchalk@3.0.0(transitive)
+ Addedci-info@2.0.0(transitive)
+ Addedcli-boxes@2.2.1(transitive)
+ Addedclone-response@1.0.3(transitive)
+ Addedconfigstore@5.0.1(transitive)
+ Addedcrypto-random-string@2.0.0(transitive)
+ Addeddecompress-response@3.3.0(transitive)
+ Addeddeep-extend@0.6.0(transitive)
+ Addeddefer-to-connect@1.1.3(transitive)
+ Addeddot-prop@5.3.0(transitive)
+ Addedduplexer3@0.1.5(transitive)
+ Addedend-of-stream@1.4.4(transitive)
+ Addedescape-goat@2.1.1(transitive)
+ Addedget-stream@4.1.05.2.0(transitive)
+ Addedglobal-dirs@3.0.1(transitive)
+ Addedgot@9.6.0(transitive)
+ Addedhas-yarn@2.1.0(transitive)
+ Addedhttp-cache-semantics@4.1.1(transitive)
+ Addedimport-lazy@2.1.0(transitive)
+ Addedimurmurhash@0.1.4(transitive)
+ Addedini@1.3.82.0.0(transitive)
+ Addedis-ci@2.0.0(transitive)
+ Addedis-installed-globally@0.4.0(transitive)
+ Addedis-npm@5.0.0(transitive)
+ Addedis-obj@2.0.0(transitive)
+ Addedis-path-inside@3.0.3(transitive)
+ Addedis-typedarray@1.0.0(transitive)
+ Addedis-yarn-global@0.3.0(transitive)
+ Addedjson-buffer@3.0.0(transitive)
+ Addedkeyv@3.1.0(transitive)
+ Addedlatest-version@5.1.0(transitive)
+ Addedlowercase-keys@1.0.12.0.0(transitive)
+ Addedmake-dir@3.1.0(transitive)
+ Addedmimic-response@1.0.1(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addednormalize-url@4.5.1(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedp-cancelable@1.1.0(transitive)
+ Addedpackage-json@6.5.0(transitive)
+ Addedprepend-http@2.0.0(transitive)
+ Addedpump@3.0.2(transitive)
+ Addedpupa@2.1.1(transitive)
+ Addedrc@1.2.8(transitive)
+ Addedregistry-auth-token@4.2.2(transitive)
+ Addedregistry-url@5.1.0(transitive)
+ Addedresponselike@1.0.2(transitive)
+ Addedsemver@6.3.1(transitive)
+ Addedsemver-diff@3.1.1(transitive)
+ Addedstrip-json-comments@2.0.1(transitive)
+ Addedterm-size@2.2.1(transitive)
+ Addedto-readable-stream@1.0.0(transitive)
+ Addedtype-fest@0.20.20.8.1(transitive)
+ Addedtypedarray-to-buffer@3.1.5(transitive)
+ Addedunique-string@2.0.0(transitive)
+ Addedupdate-notifier@5.1.0(transitive)
+ Addedurl-parse-lax@3.0.0(transitive)
+ Addedwidest-line@3.1.0(transitive)
+ Addedwrappy@1.0.2(transitive)
+ Addedwrite-file-atomic@3.0.3(transitive)
+ Addedxdg-basedir@4.0.0(transitive)