nry 0.0.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +2 -2
  2. package/bin.mjs +1 -1
  3. package/package.json +9 -9
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # nry
1
+ # Npm RegistrY
2
2
 
3
3
  [![version](<https://img.shields.io/npm/v/nry.svg?logo=npm&logoColor=rgb(0,0,0)&label=版本号&labelColor=rgb(73,73,228)&color=rgb(0,0,0)>)](https://www.npmjs.com/package/nry) [![issues 提交](<https://img.shields.io/badge/issues-提交-rgb(255,0,63)?logo=github>)](https://github.com/earthnutDev/nry/issues)
4
4
 
5
- 一个仅用于 npm registry 切换的工具。
5
+ 一个用于 npm registry 切换及管理的工具。
6
6
 
7
7
  ## 安装
8
8
 
package/bin.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{Dog as a}from"@qqi/dev-log";import{isFalse as t,isArray as e,isString as i,isBusinessEmptyString as n,isUndefined as r}from"a-type-of-js";import{QQI as l}from"qqi";import{escapeRegExp as o}from"a-js-tools";import{brightRedPen as s,brightCyanPen as c,greenPen as u,cyanPen as f,magentaPen as p,brightBlackPen as w,bluePen as m}from"color-pen";import{Command as d}from"a-command";import{typewrite as g,cursorShow as b,runOtherCode as v,_p as y}from"a-node-tools";import{Table as h}from"colored-table";const $=new a({name:"nry",type:!1});t($.type);const q=new l("nry");function x(a=!1){const t=[{value:"https://registry.npmjs.org",label:"官方",tip:"https://registry.npmjs.org"},{value:"https://registry.npmmirror.com",label:"淘宝",tip:"https://registry.npmmirror.com"},{value:"https://mirrors.tencent.com/npm",label:"腾讯",tip:"https://mirrors.tencent.com/npm"},{value:"https://npmreg.proxy.ustclug.org",label:"中科大",tip:"https://npmreg.proxy.ustclug.org"},{value:"https://registry.yarnpkg.com",label:"yarn",tip:"https://registry.yarnpkg.com"}];if(a)return t;if(!q.available)return t;const r=q.read("config");return e(r)&&r.every((a=>i(a.value)&&!n(a.label)&&i(a.value)&&!n(a.value)))?r:t}const k=new d("nry");async function E(a="好的,即将退出"){return n(a)||await g(a),b(),k.end()}function j(a){if(!q.available)return!1;const t={value:a.value,label:a.label.toString(),tip:a.value,disable:!1},e=q.read("config");return e.push(t),q.write("config",e)}async function V(){const a=await v("npm config get registry");if($("获取当前的本地配置为",a),a.success)return a.data.replace(/\s/gm,"")}async function L(){const a=x(),t=await V(),e=new h({header:["npm registry","别名","当前可见"]});!(a.findIndex((a=>a.value===t))>-1)&&i(t)&&a.push({value:t,tip:t,label:"曾用值"}),a.forEach((a=>e.addRow([(t===a.value?p`* `:" ").concat(a.value),(t===a.value?p`* `:" ").concat(u(a.label)),a.disable?"❌":"✅"]))),e(),y(w`注:当前可见状态仅影响 npx nry 选择项`)}async function S(){if(!q.available)return await E("读写受限,正在退出");const a=x(),t=await async function(a){const t=[{reg:/\s+/g,info:"不允许出现空格",inverse:!0}];a.forEach((a=>{t.push({reg:new RegExp(`^${o(a.value)}$`,"mg"),info:`${u(a.value)}(${f(a.label)}) 已存在`,inverse:!0})}));const e=await k.question({text:"请输入自定义的 npm 的源地址",tip:"https://registry.npmjs.org",minLen:5,maxLen:120,verify:t,required:!1});return $("用户输入的地址",e),r(e)?await E():e}(a),e=await async function(a){const t=[{reg:/\s+/g,info:"不允许出现空格",inverse:!0}];a.forEach((a=>{t.push({reg:new RegExp(`^${o(a.label)}$`,"mg"),info:`${u(a.label)}(${f(a.value)}) 已存在`,inverse:!0})}));const e=await k.question({text:"请输入自定义的 npm 的别名",tip:"任意别名",minLen:1,maxLen:120,verify:t,defaultValue:"",required:!1});return $("用户输入的别名为",e),r(e)?await E():e}(a);if(j({value:t,label:e})){y(w`当前的 npm registry 列表为`),await L();const a=["退出","继续添加"],t=await k.question({text:"添加完成,是否持续添加",tip:a});return r(t)||t===a[0]?await E(""):await S()}return await E(`写入${s`失败`},原因未知`)}async function M(a="请选择想使用的新的 npm registry",e=!0,i=!0){let n=!1;const l=x(),o=await V();if(!r(o)){for(const a of l)if(a.value===o){a.label=a.label.toString()+`(${p`当前使用`})`,a.disable=!i,n=!0;break}if(t(n)){const a={value:o,label:"当前使用值",disable:!i};l.push(a),q.available&&j({value:o,label:"曾用值"})}}$("处理完的数据",l);const s=e?l.filter((a=>!a.disable||a.disable&&a.value===o)):l.map((a=>(a.value===o?a.disable=!i:a.disable=!1,a))),c=await k.selection({data:s,info:a},"number");return $("用户选择的项",c),r(c)?await E():($("当前用户选择为",s[c]),s[c])}async function R(){const a=await M();await async function(a){(await v(`npm config set registry ${a.value}`)).success||await E(),y(`已将 npm registry 更改为 ${u(a.value)}(${m(a.label)})`)}(a)}k.bind(["add <a> (用于添加一个自定义的 npm 源)","edit <ed> (用于编辑源) ","delete <del> (用于移除某个或多个自定义的项)","list <ls> (用于展示当前的所有的源)","manage <mg> (用于管理当前源在列表中的显隐)",`reset <rs> (重制当前的源,将${s`永久移除自定义源`}、${c`恢复已更改的源`})`]).run().isEnd(!0);const I={add:!1,edit:!1,delete:!1,manage:!1,list:!1,noMatch:!1,reset:!1};async function N(){if(!q.available)return await E("当前读写受限,即将退出程序");const a=await M("请选择要删除的项",!1,!1),{value:t,label:e}=a,i=x();for(const a in i){const n=Number(a),r=i[n];if(r.value===t&&r.label===e){i.splice(n,1);break}}if(q.write("config",i)){y("删除项后的列表为:"),await L();const a=["退出","继续删除"],t=await k.question({text:"是否继续删除其他项",tip:a});return r(t)||t===a[0]?await E(""):await N()}}async function z(){if(!q.available)return await E("当前读写权限不足,即将退出程序");const a=await M("请选择你想要修改的项",!1),{value:t,label:e}=a;$("获取用户的选择",a),$("原始的值",t),$("原始的标签",e),await async function(a){const t=await k.question({text:"请更改为新的 npm registry 值",tip:a.value,defaultValue:a.value,required:!1});$("新值为",t),r(t)||(a.value=a.tip=t)}(a),await async function(a){const t=await k.question({text:"请更改为新的 npm registry 别名",tip:a.label,defaultValue:a.label.toString(),required:!1});$("新值为",t),r(t)||(a.label=t)}(a);const{value:i,label:n}=a;$("更改后的值",i),$("更改的标签",n);const l=x();for(const a of l)if(a.value===t&&a.label===e){a.value=i,a.label=n.toString();break}if(q.write("config",l)){y("更改后的列表为:"),await L();const a=["退出","继续修改"],t=await k.question({text:"是否继续修改其他项",tip:a});return r(t)||t===a[0]?await E(""):await z()}}async function A(){return function(){const a=k.args,e=a.$map;$("源解析值",a),$("源解析值没有匹配项",a.$isVoid),["add","delete","edit","list","manage","reset"].forEach((a=>I[a]=t(r(e[a])))),I.noMatch=a.$isVoid,$("解析完的值",I)}(),$("执行"),I.noMatch?($("当前没有匹配值"),await R()):I.reset?($("重置项"),await async function(){if(!q.available)return await E("当前读写权限受限,正在退出程序");const a=["退出","重置"],t=await k.question({text:"请确认是否执行覆盖原数据,该操作无法复原",tip:a});return r(t)||t===a[0]?await E("好的,这就退出重置"):q.write("config",x(!0))?(await g("写入"+u`成功`,60),await L()):await E("重置未能完成,原因未知")}()):I.list?($("当前为展示项"),await L()):I.manage?($("当前执行状态更改"),await async function(){if(!q.available)return await E("当前读写受限,即将退出程序。");const a=x(),t=await V(),e=await k.selection({data:a.map((a=>({...a,checked:!a.disable,disable:a.value===t}))),kind:"check"},"number");if($("交互结果",e),r(e))return await E("好的,将退出状态显隐管理");a.forEach(((a,t)=>{a.disable=!e.includes(t)})),$("保存前的数据",a),q.write("config",a)&&await L()}()):I.add?($("添加新的项"),await S()):I.edit?($("编辑项"),await z()):I.delete?($("删除项"),await N()):void 0}(async()=>{try{await A()}catch(a){$.error("系统级捕获 错误",a)}})();
2
+ import{Dog as a}from"@qqi/log";import{isFalse as t,isArray as e,isString as i,isBusinessEmptyString as n,isUndefined as r}from"a-type-of-js";import{QQI as l}from"qqi";import{escapeRegExp as o}from"a-js-tools";import{brightRedPen as s,brightCyanPen as c,greenPen as u,cyanPen as f,magentaPen as p,brightBlackPen as w,bluePen as m}from"color-pen";import{Command as d}from"a-command";import{typewrite as g,cursorShow as b,runOtherCode as v,_p as y}from"a-node-tools";import{Table as h}from"colored-table";const $=new a({name:"nry",type:!1});t($.type);const q=new l("nry");function x(a=!1){const t=[{value:"https://registry.npmjs.org",label:"官方",tip:"https://registry.npmjs.org"},{value:"https://registry.npmmirror.com",label:"淘宝",tip:"https://registry.npmmirror.com"},{value:"https://mirrors.tencent.com/npm",label:"腾讯",tip:"https://mirrors.tencent.com/npm"},{value:"https://npmreg.proxy.ustclug.org",label:"中科大",tip:"https://npmreg.proxy.ustclug.org"},{value:"https://registry.yarnpkg.com",label:"yarn",tip:"https://registry.yarnpkg.com"}];if(a)return t;if(!q.available)return t;const r=q.read("config");return e(r)&&r.every((a=>i(a.value)&&!n(a.label)&&i(a.value)&&!n(a.value)))?r:t}const k=new d("nry");async function E(a="好的,即将退出"){return n(a)||await g(a),b(),k.end()}function j(a){if(!q.available)return!1;const t={value:a.value,label:a.label.toString(),tip:a.value,disable:!1},e=q.read("config");return e.push(t),q.write("config",e)}async function V(){const a=await v("npm config get registry");if($("获取当前的本地配置为",a),a.success)return a.data.replace(/\s/gm,"")}async function L(){const a=x(),t=await V(),e=new h({header:["npm registry","别名","当前可见"]});!(a.findIndex((a=>a.value===t))>-1)&&i(t)&&a.push({value:t,tip:t,label:"曾用值"}),a.forEach((a=>e.addRow([(t===a.value?p`* `:" ").concat(a.value),(t===a.value?p`* `:" ").concat(u(a.label)),a.disable?"❌":"✅"]))),e(),y(w`注:当前可见状态仅影响 npx nry 选择项`)}async function S(){if(!q.available)return await E("读写受限,正在退出");const a=x(),t=await async function(a){const t=[{reg:/\s+/g,info:"不允许出现空格",inverse:!0}];a.forEach((a=>{t.push({reg:new RegExp(`^${o(a.value)}$`,"mg"),info:`${u(a.value)}(${f(a.label)}) 已存在`,inverse:!0})}));const e=await k.question({text:"请输入自定义的 npm 的源地址",tip:"https://registry.npmjs.org",minLen:5,maxLen:120,verify:t,required:!1});return $("用户输入的地址",e),r(e)?await E():e}(a),e=await async function(a){const t=[{reg:/\s+/g,info:"不允许出现空格",inverse:!0}];a.forEach((a=>{t.push({reg:new RegExp(`^${o(a.label)}$`,"mg"),info:`${u(a.label)}(${f(a.value)}) 已存在`,inverse:!0})}));const e=await k.question({text:"请输入自定义的 npm 的别名",tip:"任意别名",minLen:1,maxLen:120,verify:t,defaultValue:"",required:!1});return $("用户输入的别名为",e),r(e)?await E():e}(a);if(j({value:t,label:e})){y(w`当前的 npm registry 列表为`),await L();const a=["退出","继续添加"],t=await k.question({text:"添加完成,是否持续添加",tip:a});return r(t)||t===a[0]?await E(""):await S()}return await E(`写入${s`失败`},原因未知`)}async function M(a="请选择想使用的新的 npm registry",e=!0,i=!0){let n=!1;const l=x(),o=await V();if(!r(o)){for(const a of l)if(a.value===o){a.label=a.label.toString()+`(${p`当前使用`})`,a.disable=!i,n=!0;break}if(t(n)){const a={value:o,label:"当前使用值",disable:!i};l.push(a),q.available&&j({value:o,label:"曾用值"})}}$("处理完的数据",l);const s=e?l.filter((a=>!a.disable||a.disable&&a.value===o)):l.map((a=>(a.value===o?a.disable=!i:a.disable=!1,a))),c=await k.selection({data:s,info:a},"number");return $("用户选择的项",c),r(c)?await E():($("当前用户选择为",s[c]),s[c])}async function R(){const a=await M();await async function(a){(await v(`npm config set registry ${a.value}`)).success||await E(),y(`已将 npm registry 更改为 ${u(a.value)}(${m(a.label)})`)}(a)}k.bind(["add <a> (用于添加一个自定义的 npm 源)","edit <ed> (用于编辑源) ","delete <del> (用于移除某个或多个自定义的项)","list <ls> (用于展示当前的所有的源)","manage <mg> (用于管理当前源在列表中的显隐)",`reset <rs> (重制当前的源,将${s`永久移除自定义源`}、${c`恢复已更改的源`})`]).run().isEnd(!0);const I={add:!1,edit:!1,delete:!1,manage:!1,list:!1,noMatch:!1,reset:!1};async function N(){if(!q.available)return await E("当前读写受限,即将退出程序");const a=await M("请选择要删除的项",!1,!1),{value:t,label:e}=a,i=x();for(const a in i){const n=Number(a),r=i[n];if(r.value===t&&r.label===e){i.splice(n,1);break}}if(q.write("config",i)){y("删除项后的列表为:"),await L();const a=["退出","继续删除"],t=await k.question({text:"是否继续删除其他项",tip:a});return r(t)||t===a[0]?await E(""):await N()}}async function z(){if(!q.available)return await E("当前读写权限不足,即将退出程序");const a=await M("请选择你想要修改的项",!1),{value:t,label:e}=a;$("获取用户的选择",a),$("原始的值",t),$("原始的标签",e),await async function(a){const t=await k.question({text:"请更改为新的 npm registry 值",tip:a.value,defaultValue:a.value,required:!1});$("新值为",t),r(t)||(a.value=a.tip=t)}(a),await async function(a){const t=await k.question({text:"请更改为新的 npm registry 别名",tip:a.label,defaultValue:a.label.toString(),required:!1});$("新值为",t),r(t)||(a.label=t)}(a);const{value:i,label:n}=a;$("更改后的值",i),$("更改的标签",n);const l=x();for(const a of l)if(a.value===t&&a.label===e){a.value=i,a.label=n.toString();break}if(q.write("config",l)){y("更改后的列表为:"),await L();const a=["退出","继续修改"],t=await k.question({text:"是否继续修改其他项",tip:a});return r(t)||t===a[0]?await E(""):await z()}}async function A(){return function(){const a=k.args,e=a.$map;$("源解析值",a),$("源解析值没有匹配项",a.$isVoid),["add","delete","edit","list","manage","reset"].forEach((a=>I[a]=t(r(e[a])))),I.noMatch=a.$isVoid,$("解析完的值",I)}(),$("执行"),I.noMatch?($("当前没有匹配值"),await R()):I.reset?($("重置项"),await async function(){if(!q.available)return await E("当前读写权限受限,正在退出程序");const a=["退出","重置"],t=await k.question({text:"请确认是否执行覆盖原数据,该操作无法复原",tip:a});return r(t)||t===a[0]?await E("好的,这就退出重置"):q.write("config",x(!0))?(await g("写入"+u`成功`,60),await L()):await E("重置未能完成,原因未知")}()):I.list?($("当前为展示项"),await L()):I.manage?($("当前执行状态更改"),await async function(){if(!q.available)return await E("当前读写受限,即将退出程序。");const a=x(),t=await V(),e=await k.selection({data:a.map((a=>({...a,checked:!a.disable,disable:a.value===t}))),kind:"check"},"number");if($("交互结果",e),r(e))return await E("好的,将退出状态显隐管理");a.forEach(((a,t)=>{a.disable=!e.includes(t)})),$("保存前的数据",a),q.write("config",a)&&await L()}()):I.add?($("添加新的项"),await S()):I.edit?($("编辑项"),await z()):I.delete?($("删除项"),await N()):void 0}(async()=>{try{await A()}catch(a){$.error("系统级捕获 错误",a)}})();
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "nry",
3
- "version": "0.0.3",
3
+ "version": "0.1.0",
4
4
  "type": "module",
5
- "description": "",
5
+ "description": "更替及管理 npm registry",
6
6
  "license": "MIT",
7
7
  "dependencies": {
8
- "@qqi/dev-log": "^1.0.4",
9
- "a-command": "^2.3.9",
10
- "a-js-tools": "^1.0.1",
11
- "a-node-tools": "^4.2.9",
12
- "a-type-of-js": "^1.0.2",
13
- "color-pen": "^2.0.11",
8
+ "@qqi/log": "^0.1.0",
9
+ "a-command": "^2.3.13",
10
+ "a-js-tools": "^1.0.8",
11
+ "a-node-tools": "^4.2.16",
12
+ "a-type-of-js": "^1.0.5",
13
+ "color-pen": "^2.0.12",
14
14
  "colored-table": "^0.0.2",
15
- "qqi": "^0.0.4"
15
+ "qqi": "^0.1.0"
16
16
  },
17
17
  "publishConfig": {
18
18
  "access": "public",