Comparing version 0.1.2 to 0.1.3
#!/usr/bin/env node | ||
var K=Object.create;var B=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames,P=Object.getOwnPropertySymbols,Y=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable;var A=(e,o,t)=>o in e?B(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,x=(e,o)=>{for(var t in o||(o={}))E.call(o,t)&&A(e,t,o[t]);if(P)for(var t of P(o))Z.call(o,t)&&A(e,t,o[t]);return e};var k=(e,o,t,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of X(o))!E.call(e,r)&&r!==t&&B(e,r,{get:()=>o[r],enumerable:!(n=V(o,r))||n.enumerable});return e};var w=(e,o,t)=>(t=e!=null?K(Y(e)):{},k(o||!e||!e.__esModule?B(t,"default",{value:e,enumerable:!0}):t,e));var W=require("commander");var ee="efst",te="0.1.2",oe="an easy file download CLI tool",re="dist/index.js",ne="dist/index.d.ts",ie={type:"git",url:"https://github.com/ATQQ/tools"},se="https://github.com/ATQQ/tools/blob/main/packages/cli/efst",ae=["dist"],le={efst:"dist/bin.js"},ce={dev:"tsup --watch",build:"tsup --minify",prepublish:"pnpm build"},me=["download","file download","files download","download cli"],de="ATQQ",pe="MIT",fe={"cli-progress":"^3.11.2",commander:"^9.2.0","http-proxy-agent":"^5.0.0"},ue={"@types/cli-progress":"^3.11.0"},D={name:ee,version:te,description:oe,main:re,types:ne,repository:ie,homepage:se,files:ae,bin:le,scripts:ce,keywords:me,author:de,license:pe,dependencies:fe,devDependencies:ue};var L=w(require("cli-progress"));var U=w(require("https")),j=w(require("http")),p=w(require("fs")),f=w(require("path")),ge=require("http-proxy-agent");function he(e=6){return Math.random().toString(26).slice(2,2+e)}var q=e=>`\x1B[4m${e}\x1B[24m`,M=e=>`\x1B[33m${e}\x1B[39m`,N=e=>`\x1B[31m${e}\x1B[39m`;function F(e,o){let t=x({timeout:3e3,filename:"",maxRedirects:10,proxy:"",override:!1},o),n=0,r,s,c=(i,h)=>{console.log("error url:",h),console.log("error msg:",i.message),console.log()},d={progress:i=>(r=i,d),end:i=>(s=i,d),error:i=>(c=i,d)},l,I={agent:t.proxy?new ge(t.proxy):void 0,timeout:t.timeout||0,headers:{"User-Agent":"node http module"}},m=i=>{let{statusCode:h}=i;if(Math.floor(h/100)===3&&t.maxRedirects){if(t.maxRedirects-=1,i.headers.location){F(i.headers.location,t).progress(r).end(s).error(c);return}throw new Error(`url:${e} status ${h} without location header`)}if(h===404){l.emit("error",new Error("404 source"));return}let R=xe(t.filename||we(e)||he()),T=t.override?f.default.resolve(R):ye(R),_=p.default.createWriteStream(T),G=+i.headers["content-length"]||0;i.on("data",$=>{n+=$.length,r&&r($.length,n,G)}),i.pipe(_).on("close",()=>{s&&s(T)})},g=e.startsWith("https")?U.default:j.default;try{l=g.get(e,I,m),l.on("error",i=>{l.destroy(),c&&c(i,e)}),l.on("timeout",()=>{l.emit("error",new Error(`request timeout ${t.timeout}ms`))})}catch(i){setTimeout(()=>{c&&c(i,e)})}return d}function Q(e,o=""){let{name:t,ext:n}=f.default.parse(e);return t===e?{name:t,ext:n+o}:Q(t,n+o)}function xe(e){return e.replace(/[\\/:*?"<>|]/g,"")}function we(e){let o=new URL(e);return decodeURIComponent(f.default.basename(o.pathname))}function ye(e,o=process.cwd()){let{name:t,ext:n}=Q(e),r=0,s="";do s=f.default.join(o,`${t}${r?` ${r}`:""}${n}`),r+=1;while(p.default.existsSync(s));return s}function C(e,o,t){let n;for(t=t||["B","K","M","G","TB"];(n=t.shift())&&e>1024;)e/=1024;return(n==="B"?e:e.toFixed(o===void 0?2:o))+n}function J(e=500){let o=0,t=0,n="N/A",r=0;return s=>(r+=s,o===0&&(o=Date.now()),t=Date.now(),t-o>=e&&(n=`${C(1e3/(t-o)*r)}/s`,o=Date.now(),r=0),n)}var O=f.default.join(process.env.HOME||process.env.USERPROFILE||process.cwd(),".efstrc");function u(e=""){try{let o=JSON.parse(p.default.readFileSync(O,"utf-8"));return e?e.split(".").reduce((t,n)=>t==null?void 0:t[n],o):o}catch(o){return e?"":{}}}function z(e,o){if(!e||!o)return;let t=u(),n=e.split(".");n.reduce((r,s,c)=>(c===n.length-1?r[s]=o:r[s]instanceof Object||(r[s]={}),r[s]),t),p.default.writeFileSync(O,JSON.stringify(t,null,2))}function H(e){if(!e)return;let o=u(),t=e.split(".");t.reduce((n,r,s)=>(s===t.length-1&&delete n[r],n[r]instanceof Object?n[r]:{}),o),p.default.writeFileSync(O,JSON.stringify(o,null,2))}function S(e,o){let t=u(),{filename:n,location:r,timeout:s,proxy:c,override:d}=x(x({},t),o),l=new L.default.SingleBar({format:"[{bar}] {percentage}% | ETA: {eta}s | {rec}/{sum} | Speed {speed}",barsize:16},L.default.Presets.shades_classic),I=J();F(e,{maxRedirects:+r,timeout:+s,proxy:c,override:d,filename:n}).progress((m,g,i)=>{l.getProgress()===0&&l.start(i,0,{sum:C(i)}),l.update(g,{rec:C(g),speed:I(m)}),g===i&&l.stop()}).error(m=>{console.log("error url:",e),console.log("error msg:",N(m.message)),process.exit()}).end(m=>{console.log("file save:",q(M(m)))})}function v(e,o,t){e==="set"&&z(o,t),e==="del"&&H(o),e==="get"&&console.log(u(o)||"")}var b=new W.Command;b.version(D.version);b.argument("<url>","set download source url").option("-f,--filename <filename>","set download filename").option("-L,--location <times>","set location times","10").option("-t,--timeout <timeout>","set the request timeout(ms)","3000").option("-p,--proxy <proxy server>","set proxy server").option("-o,--override","override duplicate file",!1).action(S);b.command("config <type> <key> [value]").alias("c").description("crud cli config( ~/.efstrc ) <type> in [get,set,del]").action(v);b.parse(process.argv); | ||
var K=Object.create;var B=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames,P=Object.getOwnPropertySymbols,Y=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable;var A=(e,o,t)=>o in e?B(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,x=(e,o)=>{for(var t in o||(o={}))E.call(o,t)&&A(e,t,o[t]);if(P)for(var t of P(o))Z.call(o,t)&&A(e,t,o[t]);return e};var k=(e,o,t,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of X(o))!E.call(e,r)&&r!==t&&B(e,r,{get:()=>o[r],enumerable:!(n=V(o,r))||n.enumerable});return e};var w=(e,o,t)=>(t=e!=null?K(Y(e)):{},k(o||!e||!e.__esModule?B(t,"default",{value:e,enumerable:!0}):t,e));var W=require("commander");var ee="efst",te="0.1.3",oe="an easy file download CLI tool",re="dist/index.js",ne="dist/index.d.ts",ie={type:"git",url:"https://github.com/ATQQ/tools"},se="https://github.com/ATQQ/tools/blob/main/packages/cli/efst",ae=["dist"],le={efst:"dist/bin.js"},ce={dev:"tsup --watch",build:"tsup --minify",prepublish:"pnpm build"},me=["download","file download","files download","download cli"],de="ATQQ",pe="MIT",fe={"cli-progress":"^3.11.2",commander:"^9.2.0","http-proxy-agent":"^5.0.0"},ue={"@types/cli-progress":"^3.11.0"},D={name:ee,version:te,description:oe,main:re,types:ne,repository:ie,homepage:se,files:ae,bin:le,scripts:ce,keywords:me,author:de,license:pe,dependencies:fe,devDependencies:ue};var L=w(require("cli-progress"));var U=w(require("https")),j=w(require("http")),p=w(require("fs")),f=w(require("path")),ge=require("http-proxy-agent");function he(e=6){return Math.random().toString(26).slice(2,2+e)}var q=e=>`\x1B[4m${e}\x1B[24m`,M=e=>`\x1B[33m${e}\x1B[39m`,N=e=>`\x1B[31m${e}\x1B[39m`;function F(e,o){let t=x({timeout:3e3,filename:"",maxRedirects:10,proxy:"",override:!1},o),n=0,r,s,c=(i,h)=>{console.log("error url:",h),console.log("error msg:",i.message),console.log()},d={progress:i=>(r=i,d),end:i=>(s=i,d),error:i=>(c=i,d)},l,I={agent:t.proxy?new ge(t.proxy):void 0,timeout:t.timeout||0,headers:{"User-Agent":"node http module"}},m=i=>{let{statusCode:h}=i;if(Math.floor(h/100)===3&&t.maxRedirects){if(t.maxRedirects-=1,i.headers.location){F(i.headers.location,t).progress(r).end(s).error(c);return}throw new Error(`url:${e} status ${h} without location header`)}if(h===404){l.emit("error",new Error("404 source"));return}let R=xe(t.filename||we(e)||he()),T=t.override?f.default.resolve(R):ye(R),_=p.default.createWriteStream(T),G=+i.headers["content-length"]||0;i.on("data",$=>{n+=$.length,r&&r($.length,n,G)}),i.pipe(_).on("close",()=>{s&&s(T)})},g=e.startsWith("https")?U.default:j.default;try{l=g.get(e,I,m),l.on("error",i=>{l.destroy(),c&&c(i,e)}),l.on("timeout",()=>{l.emit("error",new Error(`request timeout ${t.timeout}ms`))})}catch(i){setTimeout(()=>{c&&c(i,e)})}return d}function Q(e,o=""){let{name:t,ext:n}=f.default.parse(e);return t===e?{name:t,ext:n+o}:Q(t,n+o)}function xe(e){return e.replace(/[\\/:*?"<>|]/g,"")}function we(e){let o=new URL(e);return decodeURIComponent(f.default.basename(o.pathname))}function ye(e,o=process.cwd()){let{name:t,ext:n}=Q(e),r=0,s="";do s=f.default.join(o,`${t}${r?` ${r}`:""}${n}`),r+=1;while(p.default.existsSync(s));return s}function C(e,o,t){let n;for(t=t||["B","K","M","G","TB"];(n=t.shift())&&e>1024;)e/=1024;return(n==="B"?e:e.toFixed(o===void 0?2:o))+n}function J(e=500){let o=0,t=0,n="N/A",r=0;return s=>(r+=s,o===0&&(o=Date.now()),t=Date.now(),t-o>=e&&(n=`${C(1e3/(t-o)*r)}/s`,o=Date.now(),r=0),n)}var O=f.default.join(process.env.HOME||process.env.USERPROFILE||process.cwd(),".efstrc");function u(e=""){try{let o=JSON.parse(p.default.readFileSync(O,"utf-8"));return e?e.split(".").reduce((t,n)=>t==null?void 0:t[n],o):o}catch(o){return e?"":{}}}function z(e,o){if(!e||!o)return;let t=u(),n=e.split(".");n.reduce((r,s,c)=>(c===n.length-1?r[s]=o:r[s]instanceof Object||(r[s]={}),r[s]),t),p.default.writeFileSync(O,JSON.stringify(t,null,2))}function H(e){if(!e)return;let o=u(),t=e.split(".");t.reduce((n,r,s)=>(s===t.length-1&&delete n[r],n[r]instanceof Object?n[r]:{}),o),p.default.writeFileSync(O,JSON.stringify(o,null,2))}function S(e,o){let t=u(),{filename:n,location:r,timeout:s,proxy:c,override:d}=x(x({},t),o),l=new L.default.SingleBar({format:"[{bar}] {percentage}% | ETA: {eta}s | {rec}/{sum} | Speed {speed}",barsize:16},L.default.Presets.shades_classic),I=J();F(e,{maxRedirects:+r,timeout:+s,proxy:c,override:d,filename:n}).progress((m,g,i)=>{l.getProgress()===0&&l.start(i,0,{sum:C(i)}),l.update(g,{rec:C(g),speed:I(m)}),g===i&&l.stop()}).error(m=>{console.log("error url:",e),console.log("error msg:",N(m.message)),process.exit()}).end(m=>{console.log("file save:",q(M(m)))})}function v(e,o,t){e==="set"&&z(o,t),e==="del"&&H(o),e==="get"&&console.log(u(o)||"")}var b=new W.Command;b.version(D.version);b.argument("<url>","set download source url").option("-f,--filename <filename>","set download filename").option("-L,--location <times>","set location times","10").option("-t,--timeout <timeout>","set the request timeout(ms)","3000").option("-p,--proxy <proxy server>","set proxy server").option("-o,--override","override duplicate file",!1).action(S);b.command("config <type> <key> [value]").alias("c").description("crud cli config( ~/.efstrc ) <type> in [get,set,del]").action(v);b.parse(process.argv); | ||
//# sourceMappingURL=bin.js.map |
{ | ||
"name": "efst", | ||
"version": "0.1.2", | ||
"version": "0.1.3", | ||
"description": "an easy file download CLI tool", | ||
@@ -38,3 +38,4 @@ "main": "dist/index.js", | ||
"prepublish": "pnpm build" | ||
} | ||
}, | ||
"readme": "# efst\n\nan easy file download CLI tool\n## Quick Started\n```sh\n# method npx\nuse npx efst\n\n# global install\nnpm i -g efst\n# then you can use efst command\n```\n\n```sh\nefst http://mtw.so/5uDwX3\n\nefst https://img.cdn.sugarat.top/docs/images/test/avatar.png\n\n# download with proxy\nefst https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png --proxy http://127.0.0.1:7890\n```\n\n![图片](https://img.cdn.sugarat.top/mdImg/MTY2ODkyMDg3NDEwNg==668920874106)\n\n## CLI Options\n```sh\nOptions:\n -V, --version output the version number\n -f,--filename <filename> set download filename\n -L,--location <times> set location times (default: \"10\")\n -t,--timeout <timeout> set the request timeout(ms) (default: \"3000\")\n -p,--proxy <proxy server> set proxy server\n -o,--override override duplicate file (default: false)\n -h, --help display help for command\n```\n## Usage Example\n```sh\n# set download filename\nefst http://mtw.so/5uDwX3 -f hello.png\n\n# override duplicate file\nefst http://mtw.so/5uDwX3 -o\n\n# download with proxy server\nefst http://mtw.so/5uDwX3 -p http://127.0.0.1:7890\n\n# set timeout\nefst http://mtw.so/5uDwX3 -t 1000\n```\n## Advanced Usage\n### CRUD Global Config\n```sh\n# set\nefst config set proxy http://127.0.0.1:7890\nefst config set location 30\nefst config set timeout 1000\n\n# get \nefst config get proxy\n\n# del\nefst config del proxy\n\n# get global config(.efstrc) content\ncat ~/.efstrc\n```\n\n![图片](https://img.cdn.sugarat.top/mdImg/MTY2ODkyMTE3NDE4NA==668921174184)\n\n\n### Local Lib\n```ts\nimport { downloadByUrl, getSpeedCalculator } from 'efst'\n\n// download demo\ndownloadByUrl(url,options)\n .error((err)=>{\n // error callback\n })\n .progress((current, receive, sum)=>{\n // progress callback\n })\n .end((filepath)=>{\n // download finished successfully\n })\n\n// speed demo\nconst speed = getSpeedCalculator()\n\nsetTimeout(speed, 200, 4000)\nsetTimeout(speed, 300, 5000)\nsetTimeout(speed, 1000, 10240)\nsetTimeout(() => {\n console.log(speed(0)) // 23.49K/s\n}, 1100)\n```\n\nmore methods see [efst/utils](https://github.com/ATQQ/tools/blob/main/packages/cli/efst/src/util/index.ts)\n\n\n" | ||
} |
@@ -54,3 +54,3 @@ # efst | ||
# set | ||
efst config set proxy http://127.0.0.1/7890 | ||
efst config set proxy http://127.0.0.1:7890 | ||
efst config set location 30 | ||
@@ -57,0 +57,0 @@ efst config set timeout 1000 |
41846