agmd 0.2.6 → 0.2.9
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.
- package/README.md +16 -10
- package/bin/agmd.js +9 -4
- package/bin/agmd.js.map +2 -2
- package/bin/readme-file.js +1 -0
- package/lib/index.cjs.js +77 -10
- package/lib/index.cjs.js.map +2 -2
- package/lib/index.d.ts +6 -1
- package/lib/index.esm.js +75 -9
- package/lib/index.esm.js.map +2 -2
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -66,21 +66,21 @@ note: 上面两个方法均可传一个option入参,其格式为:
|
|
|
66
66
|
5. 支持命令行参数配置, 可以自定义忽略文件和过滤后缀名文件
|
|
67
67
|
6. 命令行解析
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
控制台命令: agmd--include str--ignore str
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
--include string / -i string..........
|
|
73
|
-
--ignore string / -in string...........
|
|
71
|
+
可选项:
|
|
72
|
+
--include string / -i string.......... 包含解析的后缀
|
|
73
|
+
--ignore string / -in string........... 忽略文件名
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
例子:
|
|
76
76
|
--ignore / -i img,styles,node_modules,LICENSE,.git,.github,dist,.husky,.vscode,readme-file.js,readme-md.js
|
|
77
77
|
--include / -in .js,.vue,.ts
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
注意:
|
|
80
|
+
配置中的字符串之间不应有空格
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
命令行例子:
|
|
83
|
+
$ agmd --ignore lib,node_modules,dist --include .js,.ts,.vue`
|
|
84
84
|
|
|
85
85
|
### 相关文章
|
|
86
86
|
|
|
@@ -91,7 +91,13 @@ note: 上面两个方法均可传一个option入参,其格式为:
|
|
|
91
91
|
1. 采用esbuild 进行打包
|
|
92
92
|
2. 并且用eslint, preter规范写法, 规范
|
|
93
93
|
3. 用ts进行改写
|
|
94
|
-
4. 支持gitee一键同步
|
|
94
|
+
4. 支持gitee一键同步
|
|
95
95
|
|
|
96
96
|
0.2.0
|
|
97
97
|
支持命令行解析参数,可以动态传参
|
|
98
|
+
|
|
99
|
+
0.2.6
|
|
100
|
+
修复全局安装报错
|
|
101
|
+
|
|
102
|
+
0.2.9
|
|
103
|
+
新增文件统计功能
|
package/bin/agmd.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`:
|
|
4
|
-
`,
|
|
2
|
+
"use strict";var z=Object.create;var T=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var Y=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var L=e=>T(e,"__esModule",{value:!0});var H=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var J=(e,n,s,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of U(n))!K.call(e,t)&&(s||t!=="default")&&T(e,t,{get:()=>n[t],enumerable:!(r=q(n,t))||r.enumerable});return e},O=(e,n)=>J(L(T(e!=null?z(Y(e)):{},"default",!n&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var E=H((Ie,G)=>{var N=Symbol("arg flag"),m=class extends Error{constructor(n,s){super(n);this.name="ArgError",this.code=s,Object.setPrototypeOf(this,m.prototype)}};function w(e,{argv:n=process.argv.slice(2),permissive:s=!1,stopAtPositional:r=!1}={}){if(!e)throw new m("argument specification object is required","ARG_CONFIG_NO_SPEC");let t={_:[]},u={},l={};for(let i of Object.keys(e)){if(!i)throw new m("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(i[0]!=="-")throw new m(`argument key must start with '-' but found: '${i}'`,"ARG_CONFIG_NONOPT_KEY");if(i.length===1)throw new m(`argument key must have a name; singular '-' keys are not allowed: ${i}`,"ARG_CONFIG_NONAME_KEY");if(typeof e[i]=="string"){u[i]=e[i];continue}let o=e[i],a=!1;if(Array.isArray(o)&&o.length===1&&typeof o[0]=="function"){let[f]=o;o=(p,h,g=[])=>(g.push(f(p,h,g[g.length-1])),g),a=f===Boolean||f[N]===!0}else if(typeof o=="function")a=o===Boolean||o[N]===!0;else throw new m(`type missing or not a function or valid array type: ${i}`,"ARG_CONFIG_VAD_TYPE");if(i[1]!=="-"&&i.length>2)throw new m(`short argument keys (with a single hyphen) must have only one character: ${i}`,"ARG_CONFIG_SHORTOPT_TOOLONG");l[i]=[o,a]}for(let i=0,o=n.length;i<o;i++){let a=n[i];if(r&&t._.length>0){t._=t._.concat(n.slice(i));break}if(a==="--"){t._=t._.concat(n.slice(i+1));break}if(a.length>1&&a[0]==="-"){let f=a[1]==="-"||a.length===2?[a]:a.slice(1).split("").map(p=>`-${p}`);for(let p=0;p<f.length;p++){let h=f[p],[g,_]=h[1]==="-"?h.split(/=(.*)/,2):[h,void 0],c=g;for(;c in u;)c=u[c];if(!(c in l))if(s){t._.push(h);continue}else throw new m(`unknown or unexpected option: ${g}`,"ARG_UNKNOWN_OPTION");let[b,I]=l[c];if(!I&&p+1<f.length)throw new m(`option requires argument (but was followed by another short argument): ${g}`,"ARG_MISSING_REQUIRED_SHORTARG");if(I)t[c]=b(!0,c,t[c]);else if(_===void 0){if(n.length<i+2||n[i+1].length>1&&n[i+1][0]==="-"&&!(n[i+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(b===Number||typeof BigInt!="undefined"&&b===BigInt))){let P=g===c?"":` (alias for ${c})`;throw new m(`option requires argument: ${g}${P}`,"ARG_MISSING_REQUIRED_LONGARG")}t[c]=b(n[i+1],c,t[c]),++i}else t[c]=b(_,c,t[c])}}else t._.push(a)}return t}w.flag=e=>(e[N]=!0,e);w.COUNT=w.flag((e,n,s)=>(s||0)+1);w.ArgError=m;G.exports=w});var k=O(require("path"));var y=O(require("fs")),x=O(require("path"));function Q(e){let n=y.default.readFileSync(e,"utf-8"),s=n.length,r=n.split(/[\n,]/g),t=r.length;return{note:r[0].indexOf("eslint")===-1&&(r[0].indexOf("-->")>-1||r[0].indexOf("*/")>-1||r[0].indexOf("//")>-1)?r[0]:"",size:s,rowSize:t}}function A(e,n=[],s=x.default.resolve("./"),r=0){let t=["img","styles","node_modules","LICENSE",".git",".github","dist",".husky",".vscode","readme-file.js","readme-md.js"],u=[".js",".vue",".ts"];e&&(t=e.ignore||t,u=e.include||u);let l=y.default.readdirSync(s).map(i=>{let o=x.default.join(s,i),a=y.default.lstatSync(o).isDirectory();return{name:i,isDir:a,level:r,note:""}}).sort((i,o)=>!i.isDir&&o.isDir?1:i.isDir&&!o.isDir?-1:(i.isDir&&o.isDir||!i.isDir&&!o.isDir,0));for(let i=0;i<l.length;i+=1){let o=l[i];if(t.findIndex(f=>f===o.name)===-1){let f=x.default.join(s,o.name);if(y.default.lstatSync(f).isDirectory())A(e,o.children=[],f,r+1),n.push(o);else{let h=f.lastIndexOf("."),g=f.substring(h);if(u.includes(g)){let _=Q(f);Object.assign(o,_),o.suffix=g,n.push(o)}}}}return n}function $(e,n){let s=n||[];return e.forEach((r,t)=>{let u=t===e.length-1;if(r.children){let l=v(r,u);s.push(l),$(r.children,s)}else{let l=v(r,u);s.push(l)}}),s}function v(e,n){let s="",t=`${"\u2502 ".repeat(e.level)}${n?"\u2514\u2500\u2500":"\u251C\u2500\u2500"} ${e.name}`;return e.isDir?s+=`${t}
|
|
3
|
+
`:s+=`${t} ${e.note}
|
|
4
|
+
`,s}function V(e,n){let s=x.default.resolve(__dirname,n),r="export default";y.default.writeFile(s,r+e,{encoding:"utf8"},t=>{console.error(t)})}function S(e){var n=/\d{1,3}(?=(\d{3})+$)/g;return(e+"").replace(n,"$&,")}function W(e){let{rowTotleNumber:n,sizeTotleNumber:s,coutObj:r}=e,t="",u=0;for(let i in r){let o=r[i];u+=o,t+=`The suffix is ${i} has ${o} files
|
|
5
|
+
`}t+=`The totle has ${u} files
|
|
6
|
+
`;let l=`Total number of file lines: ${S(n)},
|
|
7
|
+
Total number of codes: ${S(s)}
|
|
8
|
+
`;return l=t+l,l}function X(e){let n=0,s=0,r={};function t(u){u.forEach(l=>{l.children?t(l.children):(r.hasOwnProperty(l.suffix)||(r[l.suffix]=0),r[l.suffix]++,n+=l.rowSize,s+=l.size)})}return t(e),{rowTotleNumber:n,sizeTotleNumber:s,coutObj:r}}function j(e){console.log("\x1B[36m%s\x1B[0m","*** run location: ",x.default.resolve("./"));let n=A(e);V(JSON.stringify(n),__dirname+"\\readme-file.js");let s=X(n),r=W(s),u=$(n).join("")+`
|
|
9
|
+
`;return u.length>0&&console.log("\x1B[36m%s\x1B[0m","*** Automatic generation completed ! "),console.log("\x1B[33m%s\x1B[0m:",r),u+r}function D(e,n){let s=x.default.resolve(__dirname,n);y.default.writeFile(s,e,{encoding:"utf8"},r=>{console.error(r)})}var B=O(E()),Z=e=>{let n=(0,B.default)({"--ignore":String,"--include":String,"--version":Boolean,"--help":Boolean,"-h":"--help","-i":"--ignore","-in":"--include","-v":"--version"},{argv:e.slice(2)});return{help:n["--help"],ignore:n["--ignore"],include:n["--include"],version:n["--version"]}},R=Z;var ee=`Usage: agmd--include str--ignore str
|
|
5
10
|
|
|
6
11
|
Options:
|
|
7
12
|
--include string / -i string.......... include file extension
|
|
@@ -15,5 +20,5 @@
|
|
|
15
20
|
There should be no space between strings in a configuration
|
|
16
21
|
|
|
17
22
|
Examples:
|
|
18
|
-
$ agmd --ignore lib,node_modules,dist --include .js,.ts,.vue`;function
|
|
23
|
+
$ agmd --ignore lib,node_modules,dist --include .js,.ts,.vue`;function ne(){console.log(ee),process.exit(0)}var F=ne;var te="agmd",ie="0.2.8",re="auto generate markdown for node",se=["node","auto","generate","md","markdown"],oe="lib/index.cjs.js",le="lib/index.esm.js",ue="lib/index.d.ts",de={agmd:"./bin/agmd.js"},ce={dev:"npx nodemon src/agmd.ts",agmd:"npx agmd --ignore lib,node_modules,dist --include .js,.ts,.vue",lint:'eslint "src/**/*.{ts}" --max-warnings=0',build:"node script/build.js",prepare:"husky install","lint-fix":"eslint --fix --ext .js,.ts",test:"npm run build && node bin/agmd"},ae="kakajun <253495832@qq.com>",fe={type:"git",url:"git@github.com:kakajun/auto-generate-md.git"},ge={"@types/node":"^17.0.0","@typescript-eslint/eslint-plugin":"^4.31.0","@typescript-eslint/parser":"^4.31.0",agmd:"^0.2.2",arg:"5.0.1",esbuild:"^0.14.5","esbuild-plugin-d.ts":"^1.1.0",eslint:"^8.8.0","eslint-config-prettier":"^8.3.0","fs-extra":"^10.0.0",husky:"^7.0.2","lint-staged":"^11.1.2",nodemon:"^2.0.15",prettier:"^2.5.1","ts-node":"^10.7.0",typescript:"^4.5.5"},me={"*.{ts,tsx,js}":"prettier --write","*.{ts,tsx}":"eslint --fix"},pe="MIT",he={url:"https://github.com/kakajun/auto-generate-md/issues"},ye="https://github.com/kakajun/auto-generate-md",xe=["bin","lib"],M={name:te,version:ie,description:re,keywords:se,main:oe,module:le,typings:ue,bin:de,scripts:ce,author:ae,repository:fe,devDependencies:ge,"lint-staged":me,license:pe,bugs:he,homepage:ye,files:xe};function be(e){return e.help&&F(),e.version&&(console.log("agmd version is: \x1B[36m%s\x1B[0m",M.version),process.exit(0)),e.ignore&&(e.ignores=e.ignore.split(" ")),e.include&&(e.includes=e.include.split(" ")),e}var C=be;var we=R(process.argv),{ignores:_e,includes:Oe}=C(we);function Te(){let e=j({ignore:_e,include:Oe});console.log("\x1B[36m%s\x1B[0m","*** location: ",`${k.default.resolve("./")}\\readme-md.md`),D(e,`${k.default.resolve("./")}\\readme-md.md`)}Te();
|
|
19
24
|
//# sourceMappingURL=agmd.js.map
|
package/bin/agmd.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../node_modules/arg/index.js", "../src/agmd.ts", "../src/index.ts", "../script/cli/index.ts", "../script/help/index.ts", "../script/cli/handle.ts"],
|
|
4
|
-
"sourcesContent": ["const flagSymbol = Symbol('arg flag');\n\nclass ArgError extends Error {\n\tconstructor(msg, code) {\n\t\tsuper(msg);\n\t\tthis.name = 'ArgError';\n\t\tthis.code = code;\n\n\t\tObject.setPrototypeOf(this, ArgError.prototype);\n\t}\n}\n\nfunction arg(\n\topts,\n\t{\n\t\targv = process.argv.slice(2),\n\t\tpermissive = false,\n\t\tstopAtPositional = false\n\t} = {}\n) {\n\tif (!opts) {\n\t\tthrow new ArgError(\n\t\t\t'argument specification object is required',\n\t\t\t'ARG_CONFIG_NO_SPEC'\n\t\t);\n\t}\n\n\tconst result = { _: [] };\n\n\tconst aliases = {};\n\tconst handlers = {};\n\n\tfor (const key of Object.keys(opts)) {\n\t\tif (!key) {\n\t\t\tthrow new ArgError(\n\t\t\t\t'argument key cannot be an empty string',\n\t\t\t\t'ARG_CONFIG_EMPTY_KEY'\n\t\t\t);\n\t\t}\n\n\t\tif (key[0] !== '-') {\n\t\t\tthrow new ArgError(\n\t\t\t\t`argument key must start with '-' but found: '${key}'`,\n\t\t\t\t'ARG_CONFIG_NONOPT_KEY'\n\t\t\t);\n\t\t}\n\n\t\tif (key.length === 1) {\n\t\t\tthrow new ArgError(\n\t\t\t\t`argument key must have a name; singular '-' keys are not allowed: ${key}`,\n\t\t\t\t'ARG_CONFIG_NONAME_KEY'\n\t\t\t);\n\t\t}\n\n\t\tif (typeof opts[key] === 'string') {\n\t\t\taliases[key] = opts[key];\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet type = opts[key];\n\t\tlet isFlag = false;\n\n\t\tif (\n\t\t\tArray.isArray(type) &&\n\t\t\ttype.length === 1 &&\n\t\t\ttypeof type[0] === 'function'\n\t\t) {\n\t\t\tconst [fn] = type;\n\t\t\ttype = (value, name, prev = []) => {\n\t\t\t\tprev.push(fn(value, name, prev[prev.length - 1]));\n\t\t\t\treturn prev;\n\t\t\t};\n\t\t\tisFlag = fn === Boolean || fn[flagSymbol] === true;\n\t\t} else if (typeof type === 'function') {\n\t\t\tisFlag = type === Boolean || type[flagSymbol] === true;\n\t\t} else {\n\t\t\tthrow new ArgError(\n\t\t\t\t`type missing or not a function or valid array type: ${key}`,\n\t\t\t\t'ARG_CONFIG_VAD_TYPE'\n\t\t\t);\n\t\t}\n\n\t\tif (key[1] !== '-' && key.length > 2) {\n\t\t\tthrow new ArgError(\n\t\t\t\t`short argument keys (with a single hyphen) must have only one character: ${key}`,\n\t\t\t\t'ARG_CONFIG_SHORTOPT_TOOLONG'\n\t\t\t);\n\t\t}\n\n\t\thandlers[key] = [type, isFlag];\n\t}\n\n\tfor (let i = 0, len = argv.length; i < len; i++) {\n\t\tconst wholeArg = argv[i];\n\n\t\tif (stopAtPositional && result._.length > 0) {\n\t\t\tresult._ = result._.concat(argv.slice(i));\n\t\t\tbreak;\n\t\t}\n\n\t\tif (wholeArg === '--') {\n\t\t\tresult._ = result._.concat(argv.slice(i + 1));\n\t\t\tbreak;\n\t\t}\n\n\t\tif (wholeArg.length > 1 && wholeArg[0] === '-') {\n\t\t\t/* eslint-disable operator-linebreak */\n\t\t\tconst separatedArguments =\n\t\t\t\twholeArg[1] === '-' || wholeArg.length === 2\n\t\t\t\t\t? [wholeArg]\n\t\t\t\t\t: wholeArg\n\t\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t\t.map((a) => `-${a}`);\n\t\t\t/* eslint-enable operator-linebreak */\n\n\t\t\tfor (let j = 0; j < separatedArguments.length; j++) {\n\t\t\t\tconst arg = separatedArguments[j];\n\t\t\t\tconst [originalArgName, argStr] =\n\t\t\t\t\targ[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined];\n\n\t\t\t\tlet argName = originalArgName;\n\t\t\t\twhile (argName in aliases) {\n\t\t\t\t\targName = aliases[argName];\n\t\t\t\t}\n\n\t\t\t\tif (!(argName in handlers)) {\n\t\t\t\t\tif (permissive) {\n\t\t\t\t\t\tresult._.push(arg);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new ArgError(\n\t\t\t\t\t\t\t`unknown or unexpected option: ${originalArgName}`,\n\t\t\t\t\t\t\t'ARG_UNKNOWN_OPTION'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst [type, isFlag] = handlers[argName];\n\n\t\t\t\tif (!isFlag && j + 1 < separatedArguments.length) {\n\t\t\t\t\tthrow new ArgError(\n\t\t\t\t\t\t`option requires argument (but was followed by another short argument): ${originalArgName}`,\n\t\t\t\t\t\t'ARG_MISSING_REQUIRED_SHORTARG'\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (isFlag) {\n\t\t\t\t\tresult[argName] = type(true, argName, result[argName]);\n\t\t\t\t} else if (argStr === undefined) {\n\t\t\t\t\tif (\n\t\t\t\t\t\targv.length < i + 2 ||\n\t\t\t\t\t\t(argv[i + 1].length > 1 &&\n\t\t\t\t\t\t\targv[i + 1][0] === '-' &&\n\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\targv[i + 1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/) &&\n\t\t\t\t\t\t\t\t(type === Number ||\n\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\t\t\t\t\t(typeof BigInt !== 'undefined' && type === BigInt))\n\t\t\t\t\t\t\t))\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst extended =\n\t\t\t\t\t\t\toriginalArgName === argName ? '' : ` (alias for ${argName})`;\n\t\t\t\t\t\tthrow new ArgError(\n\t\t\t\t\t\t\t`option requires argument: ${originalArgName}${extended}`,\n\t\t\t\t\t\t\t'ARG_MISSING_REQUIRED_LONGARG'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[argName] = type(argv[i + 1], argName, result[argName]);\n\t\t\t\t\t++i;\n\t\t\t\t} else {\n\t\t\t\t\tresult[argName] = type(argStr, argName, result[argName]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tresult._.push(wholeArg);\n\t\t}\n\t}\n\n\treturn result;\n}\n\narg.flag = (fn) => {\n\tfn[flagSymbol] = true;\n\treturn fn;\n};\n\n// Utility types\narg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1);\n\n// Expose error class\narg.ArgError = ArgError;\n\nmodule.exports = arg;\n", "#!/usr/bin/env node\r\n'use strict'\r\nimport path from 'path'\r\nimport fs from 'fs'\r\nimport { getMd } from './index'\r\nimport stringToArgs from '../script/cli'\r\nimport handle from '../script/cli/handle'\r\n// console.log(process.argv)\r\nconst options = stringToArgs(process.argv)\r\nconst { ignores: ignore, includes: include } = handle(options)\r\nvar __dirname = path.resolve()\r\n\r\n/**\r\n * @description:Write the result to JS file \u628A\u7ED3\u679C\u5199\u5165\u5230js\u6587\u4EF6\r\n * @param {data} \u8981\u5199\u7684\u6570\u636E\r\n * @return {fileName} \u8981\u5199\u5165\u6587\u4EF6\u5730\u5740\r\n */\r\nfunction wirteMd(data: string, filePath: string) {\r\n const file = path.resolve(__dirname, filePath)\r\n // \u5F02\u6B65\u5199\u5165\u6570\u636E\u5230\u6587\u4EF6\r\n fs.writeFile(file, data, { encoding: 'utf8' }, (err) => {\r\n console.error(err)\r\n })\r\n}\r\n\r\n/**\r\n * @description:Automatic generation of the whole process \u81EA\u52A8\u751F\u6210\u5168\u6D41\u7A0B\r\n * @param {*}\r\n * @return {*}\r\n */\r\nfunction agmd() {\r\n const md = getMd({ ignore, include })\r\n // \u5F97\u5230md\u6587\u6863\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** location: ', `${path.resolve('./')}\\\\readme-md.md`)\r\n wirteMd(md, `${path.resolve('./')}\\\\readme-md.md`)\r\n}\r\nagmd()\r\n", "import fs from 'fs'\r\nimport path from 'path'\r\n\r\n/**\r\n * @description:Gets the header comment of the file \u83B7\u53D6\u6587\u4EF6\u7684\u5934\u90E8\u6CE8\u91CA\r\n * @param {*} file\r\n * @return {*}\r\n */\r\nfunction getFile(file: fs.PathOrFileDescriptor) {\r\n const str = fs.readFileSync(file, 'utf-8')\r\n const sarr = str.split(/[\\n,]/g)\r\n // console.log(file);\r\n const f =\r\n sarr[0].indexOf('eslint') === -1 &&\r\n (sarr[0].indexOf('-->') > -1 || sarr[0].indexOf('*/') > -1 || sarr[0].indexOf('//') > -1)\r\n ? sarr[0]\r\n : ''\r\n // console.log(f);\r\n return f\r\n}\r\n\r\nexport type ItemType = {\r\n name: string\r\n isDir: boolean\r\n level: number\r\n note: string\r\n children?: ItemType[]\r\n}\r\n\r\n/**\r\n * @description:Generate node information for all files \u751F\u6210\u6240\u6709\u6587\u4EF6\u7684node\u4FE1\u606F\r\n * @param {Array} nodes\r\n * @param {*} dir\r\n * @param {Number} level\r\n * @return {*}\r\n */\r\nexport function getFileNodes(\r\n option: { ignore: string[] | undefined; include: string[] | undefined } | undefined,\r\n nodes: Array<ItemType> = [],\r\n dir = path.resolve('./'),\r\n level = 0\r\n): Array<ItemType> {\r\n //File filtering -- full name with suffix required \u6587\u4EF6\u8FC7\u6EE4--\u9700\u8981\u5168\u79F0\u5E26\u540E\u7F00\r\n let ignore = [\r\n 'img',\r\n 'styles',\r\n 'node_modules',\r\n 'LICENSE',\r\n '.git',\r\n '.github',\r\n 'dist',\r\n '.husky',\r\n '.vscode',\r\n 'readme-file.js',\r\n 'readme-md.js'\r\n ]\r\n //File suffix contains only \u6587\u4EF6\u540E\u7F00\u53EA\u5305\u542B\r\n let include = ['.js', '.vue', '.ts']\r\n\r\n if (option) {\r\n ignore = option.ignore || ignore\r\n include = option.include || include\r\n }\r\n const files = fs\r\n .readdirSync(dir)\r\n .map((item) => {\r\n const fullPath = path.join(dir, item)\r\n const isDir = fs.lstatSync(fullPath).isDirectory()\r\n return {\r\n name: item,\r\n isDir,\r\n level,\r\n note: ''\r\n } as ItemType\r\n })\r\n //Sort folders and files, otherwise the generated will not correspond to the opening order of the editor \u5BF9\u6587\u4EF6\u5939\u548C\u6587\u4EF6\u8FDB\u884C\u6392\u5E8F,\u8981\u4E0D\u7136\u751F\u6210\u7684\u548C\u7F16\u8F91\u5668\u6253\u5F00\u7684\u987A\u5E8F\u4E0D\u5BF9\u5E94\r\n .sort((a, b) => {\r\n if (!a.isDir && b.isDir) return 1\r\n if (a.isDir && !b.isDir) return -1\r\n if ((a.isDir && b.isDir) || (!a.isDir && !b.isDir)) return 0\r\n return 0\r\n })\r\n for (let index = 0; index < files.length; index += 1) {\r\n const item = files[index]\r\n let note = '' //File Comments \u6587\u4EF6\u6CE8\u91CA\r\n //Folder filtering is handled here \u8FD9\u91CC\u5904\u7406\u6587\u4EF6\u5939\u8FC7\u6EE4\r\n const foldFlag = ignore.findIndex((obj: string) => obj === item.name)\r\n if (foldFlag === -1) {\r\n const fullPath = path.join(dir, item.name)\r\n const isDir = fs.lstatSync(fullPath).isDirectory()\r\n if (isDir) {\r\n //recursion \u9012\u5F52\r\n getFileNodes(option, (item.children = []), fullPath, level + 1)\r\n nodes.push(item)\r\n } else {\r\n const i = fullPath.lastIndexOf('.')\r\n const lastName = fullPath.substring(i)\r\n //File filtering is handled here \u8FD9\u91CC\u5904\u7406\u6587\u4EF6\u8FC7\u6EE4\r\n if (include.includes(lastName)) {\r\n note = getFile(fullPath)\r\n item.note = note\r\n nodes.push(item)\r\n }\r\n }\r\n }\r\n }\r\n return nodes\r\n}\r\n\r\n/**\r\n * @description:Recursive file name + note \u9012\u5F52\u5F97\u5230\u6587\u4EF6\u540D+note\r\n * @param {Array} datas\r\n * @param {string} keys\r\n * @return {*}\r\n */\r\nfunction getNote(datas: Array<ItemType>, keys?: string[]) {\r\n const nodes = keys || []\r\n datas.forEach((obj: ItemType, index: Number) => {\r\n const last = index === datas.length - 1\r\n if (obj.children) {\r\n //fold\r\n const md = setMd(obj, last)\r\n nodes.push(md)\r\n getNote(obj.children, nodes)\r\n }\r\n // file\r\n else {\r\n const md = setMd(obj, last)\r\n nodes.push(md)\r\n }\r\n })\r\n return nodes\r\n}\r\n\r\n/**\r\n * @description:One obj generates one line of text \u4E00\u4E2Aobj\u751F\u6210\u4E00\u4E2A\u4E00\u884C\u6587\u5B57\r\n * @param {ItemType} obj\r\n * @param {Boolean} last Is it the last one \u662F\u4E0D\u662F\u6700\u540E\u4E00\u4E2A\r\n * @return {*}\r\n */\r\nfunction setMd(obj: ItemType, last: Boolean): string {\r\n let filesString = ''\r\n const blank = '\u2502 '.repeat(obj.level) // \u91CD\u590D\u7A7A\u767D\r\n const pre = `${blank}${last ? '\u2514\u2500\u2500' : '\u251C\u2500\u2500'} ${obj.name}`\r\n if (obj.isDir) {\r\n filesString += `${pre}\\n`\r\n } else {\r\n filesString += `${pre} ${obj.note}\\n`\r\n }\r\n return filesString\r\n}\r\n\r\n/**\r\n * @description: \u628A\u7ED3\u679C\u5199\u5165\u5230js\u6587\u4EF6\r\n * @param {data} \u8981\u5199\u7684\u6570\u636E\r\n * @return {fileName} \u8981\u5199\u5165\u6587\u4EF6\u5730\u5740\r\n */\r\n// function wirteJs(data: string, filePath: string) {\r\n// const file = path.resolve(__dirname, filePath)\r\n// const pre = 'export default'\r\n// // \u5F02\u6B65\u5199\u5165\u6570\u636E\u5230\u6587\u4EF6\r\n// fs.writeFile(file, pre + data, { encoding: 'utf8' }, (err) => {\r\n// console.error(err)\r\n// })\r\n// }\r\n\r\n/**\r\n * @description: Generate MD \u751F\u6210md\r\n * @param {object} option\r\n * @return {*}\r\n */\r\nexport function getMd(option?: { ignore: string[] | undefined; include: string[] | undefined } | undefined) {\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** run location: ', path.resolve('./'))\r\n const nodes = getFileNodes(option)\r\n // \u5F97\u5230md\u5BF9\u8C61\r\n // wirteJs(JSON.stringify(nodes), __dirname + '\\\\readme-file.js')\r\n const note = getNote(nodes) // \u5F97\u5230\u6240\u6709note\u7684\u6570\u7EC4\r\n const md = note.join('') // \u6570\u7EC4\u8F6C\u5B57\u7B26\u4E32\r\n if (md.length > 0) {\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** Automatic generation completed ! ')\r\n }\r\n return md\r\n}\r\n", "import arg from 'arg'\r\nconst stringToArgs = (rawArgs: string[]) => {\r\n const args = arg(\r\n {\r\n '--ignore': String,\r\n '--include': String,\r\n '--version': Boolean,\r\n '--help': Boolean,\r\n '-h': '--help',\r\n '-i': '--ignore',\r\n '-in': '--include',\r\n '-v': '--version'\r\n },\r\n {\r\n argv: rawArgs.slice(2)\r\n }\r\n )\r\n return {\r\n help: args['--help'],\r\n ignore: args['--ignore'],\r\n include: args['--include'],\r\n version: args['--version']\r\n }\r\n}\r\n\r\nexport default stringToArgs\r\n", "const st = `Usage: agmd--include str--ignore str\r\n\r\n Options:\r\n --include string / -i string.......... include file extension\r\n --ignore string / -in string........... ignore file or fold\r\n --version / -v ........... seach vesion\r\n Str deafult:\r\n --ignore img,styles,node_modules,LICENSE,.git,.github,dist,.husky,.vscode,readme-file.js,readme-md.js\r\n --include .js,.vue,.ts\r\n\r\n Note:\r\n There should be no space between strings in a configuration\r\n\r\n Examples:\r\n $ agmd --ignore lib,node_modules,dist --include .js,.ts,.vue`\r\n\r\nfunction help() {\r\n console.log(st)\r\n process.exit(0)\r\n}\r\nexport default help\r\n", "import help from '../help'\r\nimport pkg from '../../package.json'\r\ninterface parseType {\r\n version?: Boolean | undefined\r\n includes?: string[]\r\n ignores?: string[]\r\n help: Boolean | undefined\r\n ignore: string | undefined\r\n include: string | undefined\r\n}\r\nfunction handle(settings: parseType) {\r\n if (settings.help) {\r\n help()\r\n }\r\n if (settings.version) {\r\n console.log(`agmd version is: ` + '\\x1B[36m%s\\x1B[0m', pkg.version)\r\n process.exit(0)\r\n }\r\n if (settings.ignore) {\r\n settings.ignores = settings.ignore.split(' ')\r\n }\r\n if (settings.include) {\r\n settings.includes = settings.include.split(' ')\r\n }\r\n return settings\r\n}\r\n\r\nexport default handle\r\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["const flagSymbol = Symbol('arg flag');\n\nclass ArgError extends Error {\n\tconstructor(msg, code) {\n\t\tsuper(msg);\n\t\tthis.name = 'ArgError';\n\t\tthis.code = code;\n\n\t\tObject.setPrototypeOf(this, ArgError.prototype);\n\t}\n}\n\nfunction arg(\n\topts,\n\t{\n\t\targv = process.argv.slice(2),\n\t\tpermissive = false,\n\t\tstopAtPositional = false\n\t} = {}\n) {\n\tif (!opts) {\n\t\tthrow new ArgError(\n\t\t\t'argument specification object is required',\n\t\t\t'ARG_CONFIG_NO_SPEC'\n\t\t);\n\t}\n\n\tconst result = { _: [] };\n\n\tconst aliases = {};\n\tconst handlers = {};\n\n\tfor (const key of Object.keys(opts)) {\n\t\tif (!key) {\n\t\t\tthrow new ArgError(\n\t\t\t\t'argument key cannot be an empty string',\n\t\t\t\t'ARG_CONFIG_EMPTY_KEY'\n\t\t\t);\n\t\t}\n\n\t\tif (key[0] !== '-') {\n\t\t\tthrow new ArgError(\n\t\t\t\t`argument key must start with '-' but found: '${key}'`,\n\t\t\t\t'ARG_CONFIG_NONOPT_KEY'\n\t\t\t);\n\t\t}\n\n\t\tif (key.length === 1) {\n\t\t\tthrow new ArgError(\n\t\t\t\t`argument key must have a name; singular '-' keys are not allowed: ${key}`,\n\t\t\t\t'ARG_CONFIG_NONAME_KEY'\n\t\t\t);\n\t\t}\n\n\t\tif (typeof opts[key] === 'string') {\n\t\t\taliases[key] = opts[key];\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet type = opts[key];\n\t\tlet isFlag = false;\n\n\t\tif (\n\t\t\tArray.isArray(type) &&\n\t\t\ttype.length === 1 &&\n\t\t\ttypeof type[0] === 'function'\n\t\t) {\n\t\t\tconst [fn] = type;\n\t\t\ttype = (value, name, prev = []) => {\n\t\t\t\tprev.push(fn(value, name, prev[prev.length - 1]));\n\t\t\t\treturn prev;\n\t\t\t};\n\t\t\tisFlag = fn === Boolean || fn[flagSymbol] === true;\n\t\t} else if (typeof type === 'function') {\n\t\t\tisFlag = type === Boolean || type[flagSymbol] === true;\n\t\t} else {\n\t\t\tthrow new ArgError(\n\t\t\t\t`type missing or not a function or valid array type: ${key}`,\n\t\t\t\t'ARG_CONFIG_VAD_TYPE'\n\t\t\t);\n\t\t}\n\n\t\tif (key[1] !== '-' && key.length > 2) {\n\t\t\tthrow new ArgError(\n\t\t\t\t`short argument keys (with a single hyphen) must have only one character: ${key}`,\n\t\t\t\t'ARG_CONFIG_SHORTOPT_TOOLONG'\n\t\t\t);\n\t\t}\n\n\t\thandlers[key] = [type, isFlag];\n\t}\n\n\tfor (let i = 0, len = argv.length; i < len; i++) {\n\t\tconst wholeArg = argv[i];\n\n\t\tif (stopAtPositional && result._.length > 0) {\n\t\t\tresult._ = result._.concat(argv.slice(i));\n\t\t\tbreak;\n\t\t}\n\n\t\tif (wholeArg === '--') {\n\t\t\tresult._ = result._.concat(argv.slice(i + 1));\n\t\t\tbreak;\n\t\t}\n\n\t\tif (wholeArg.length > 1 && wholeArg[0] === '-') {\n\t\t\t/* eslint-disable operator-linebreak */\n\t\t\tconst separatedArguments =\n\t\t\t\twholeArg[1] === '-' || wholeArg.length === 2\n\t\t\t\t\t? [wholeArg]\n\t\t\t\t\t: wholeArg\n\t\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t\t.map((a) => `-${a}`);\n\t\t\t/* eslint-enable operator-linebreak */\n\n\t\t\tfor (let j = 0; j < separatedArguments.length; j++) {\n\t\t\t\tconst arg = separatedArguments[j];\n\t\t\t\tconst [originalArgName, argStr] =\n\t\t\t\t\targ[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined];\n\n\t\t\t\tlet argName = originalArgName;\n\t\t\t\twhile (argName in aliases) {\n\t\t\t\t\targName = aliases[argName];\n\t\t\t\t}\n\n\t\t\t\tif (!(argName in handlers)) {\n\t\t\t\t\tif (permissive) {\n\t\t\t\t\t\tresult._.push(arg);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new ArgError(\n\t\t\t\t\t\t\t`unknown or unexpected option: ${originalArgName}`,\n\t\t\t\t\t\t\t'ARG_UNKNOWN_OPTION'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst [type, isFlag] = handlers[argName];\n\n\t\t\t\tif (!isFlag && j + 1 < separatedArguments.length) {\n\t\t\t\t\tthrow new ArgError(\n\t\t\t\t\t\t`option requires argument (but was followed by another short argument): ${originalArgName}`,\n\t\t\t\t\t\t'ARG_MISSING_REQUIRED_SHORTARG'\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (isFlag) {\n\t\t\t\t\tresult[argName] = type(true, argName, result[argName]);\n\t\t\t\t} else if (argStr === undefined) {\n\t\t\t\t\tif (\n\t\t\t\t\t\targv.length < i + 2 ||\n\t\t\t\t\t\t(argv[i + 1].length > 1 &&\n\t\t\t\t\t\t\targv[i + 1][0] === '-' &&\n\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\targv[i + 1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/) &&\n\t\t\t\t\t\t\t\t(type === Number ||\n\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\t\t\t\t\t(typeof BigInt !== 'undefined' && type === BigInt))\n\t\t\t\t\t\t\t))\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst extended =\n\t\t\t\t\t\t\toriginalArgName === argName ? '' : ` (alias for ${argName})`;\n\t\t\t\t\t\tthrow new ArgError(\n\t\t\t\t\t\t\t`option requires argument: ${originalArgName}${extended}`,\n\t\t\t\t\t\t\t'ARG_MISSING_REQUIRED_LONGARG'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[argName] = type(argv[i + 1], argName, result[argName]);\n\t\t\t\t\t++i;\n\t\t\t\t} else {\n\t\t\t\t\tresult[argName] = type(argStr, argName, result[argName]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tresult._.push(wholeArg);\n\t\t}\n\t}\n\n\treturn result;\n}\n\narg.flag = (fn) => {\n\tfn[flagSymbol] = true;\n\treturn fn;\n};\n\n// Utility types\narg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1);\n\n// Expose error class\narg.ArgError = ArgError;\n\nmodule.exports = arg;\n", "#!/usr/bin/env node\r\n'use strict'\r\nimport path from 'path'\r\nimport { getMd, wirteMd } from './index'\r\nimport stringToArgs from '../script/cli'\r\nimport handle from '../script/cli/handle'\r\nconst options = stringToArgs(process.argv)\r\nconst { ignores: ignore, includes: include } = handle(options)\r\n/**\r\n * @description:Automatic generation of the whole process \u81EA\u52A8\u751F\u6210\u5168\u6D41\u7A0B\r\n * @param {*}\r\n * @return {*}\r\n */\r\nfunction agmd() {\r\n const md = getMd({ ignore, include })\r\n // \u5F97\u5230md\u6587\u6863\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** location: ', `${path.resolve('./')}\\\\readme-md.md`)\r\n wirteMd(md, `${path.resolve('./')}\\\\readme-md.md`)\r\n}\r\nagmd()\r\n", "import fs from 'fs'\r\nimport path from 'path'\r\n\r\n/**\r\n * @description:Gets the header comment of the file \u83B7\u53D6\u6587\u4EF6\u7684\u5934\u90E8\u6CE8\u91CA\r\n * @param {*} file\r\n * @return {*}\r\n */\r\nfunction getFile(file: fs.PathOrFileDescriptor) {\r\n const str = fs.readFileSync(file, 'utf-8')\r\n const size = str.length\r\n const sarr = str.split(/[\\n,]/g)\r\n const rowSize = sarr.length\r\n const f =\r\n sarr[0].indexOf('eslint') === -1 &&\r\n (sarr[0].indexOf('-->') > -1 || sarr[0].indexOf('*/') > -1 || sarr[0].indexOf('//') > -1)\r\n ? sarr[0]\r\n : ''\r\n return { note: f, size, rowSize }\r\n}\r\n\r\ntype ItemType = {\r\n name: string\r\n isDir: boolean\r\n level: number\r\n note: string\r\n size: number\r\n suffix: string\r\n rowSize: number\r\n children?: ItemType[]\r\n}\r\n\r\ntype secoutType = { rowTotleNumber: number; sizeTotleNumber: number; coutObj: { [key: string]: number } }\r\n\r\n/**\r\n * @description:Generate node information for all files \u751F\u6210\u6240\u6709\u6587\u4EF6\u7684node\u4FE1\u606F\r\n * @param {Array} nodes\r\n * @param {*} dir\r\n * @param {Number} level\r\n * @return {*}\r\n */\r\nexport function getFileNodes(\r\n option: { ignore: string[] | undefined; include: string[] | undefined } | undefined,\r\n nodes: Array<ItemType> = [],\r\n dir = path.resolve('./'),\r\n level = 0\r\n): Array<ItemType> {\r\n //File filtering -- full name with suffix required \u6587\u4EF6\u8FC7\u6EE4--\u9700\u8981\u5168\u79F0\u5E26\u540E\u7F00\r\n let ignore = [\r\n 'img',\r\n 'styles',\r\n 'node_modules',\r\n 'LICENSE',\r\n '.git',\r\n '.github',\r\n 'dist',\r\n '.husky',\r\n '.vscode',\r\n 'readme-file.js',\r\n 'readme-md.js'\r\n ]\r\n //File suffix contains only \u6587\u4EF6\u540E\u7F00\u53EA\u5305\u542B\r\n let include = ['.js', '.vue', '.ts']\r\n\r\n if (option) {\r\n ignore = option.ignore || ignore\r\n include = option.include || include\r\n }\r\n const files = fs\r\n .readdirSync(dir)\r\n .map((item) => {\r\n const fullPath = path.join(dir, item)\r\n const isDir = fs.lstatSync(fullPath).isDirectory()\r\n return {\r\n name: item,\r\n isDir,\r\n level,\r\n note: ''\r\n } as ItemType\r\n })\r\n //Sort folders and files, otherwise the generated will not correspond to the opening order of the editor \u5BF9\u6587\u4EF6\u5939\u548C\u6587\u4EF6\u8FDB\u884C\u6392\u5E8F,\u8981\u4E0D\u7136\u751F\u6210\u7684\u548C\u7F16\u8F91\u5668\u6253\u5F00\u7684\u987A\u5E8F\u4E0D\u5BF9\u5E94\r\n .sort((a, b) => {\r\n if (!a.isDir && b.isDir) return 1\r\n if (a.isDir && !b.isDir) return -1\r\n if ((a.isDir && b.isDir) || (!a.isDir && !b.isDir)) return 0\r\n return 0\r\n })\r\n for (let index = 0; index < files.length; index += 1) {\r\n const item = files[index]\r\n //Folder filtering is handled here \u8FD9\u91CC\u5904\u7406\u6587\u4EF6\u5939\u8FC7\u6EE4\r\n const foldFlag = ignore.findIndex((obj: string) => obj === item.name)\r\n if (foldFlag === -1) {\r\n const fullPath = path.join(dir, item.name)\r\n const isDir = fs.lstatSync(fullPath).isDirectory()\r\n if (isDir) {\r\n //recursion \u9012\u5F52\r\n getFileNodes(option, (item.children = []), fullPath, level + 1)\r\n nodes.push(item)\r\n } else {\r\n const i = fullPath.lastIndexOf('.')\r\n const lastName = fullPath.substring(i)\r\n //File filtering is handled here \u8FD9\u91CC\u5904\u7406\u6587\u4EF6\u8FC7\u6EE4\r\n if (include.includes(lastName)) {\r\n const obj = getFile(fullPath)\r\n Object.assign(item, obj)\r\n item.suffix = lastName\r\n nodes.push(item)\r\n }\r\n }\r\n }\r\n }\r\n return nodes\r\n}\r\n\r\n/**\r\n * @description:Recursive file name + note \u9012\u5F52\u5F97\u5230\u6587\u4EF6\u540D+note\r\n * @param {Array} datas\r\n * @param {string} keys\r\n * @return {*}\r\n */\r\nfunction getNote(datas: Array<ItemType>, keys?: string[]) {\r\n const nodes = keys || []\r\n datas.forEach((obj: ItemType, index: Number) => {\r\n const last = index === datas.length - 1\r\n if (obj.children) {\r\n //fold\r\n const md = setMd(obj, last)\r\n nodes.push(md)\r\n getNote(obj.children, nodes)\r\n }\r\n // file\r\n else {\r\n const md = setMd(obj, last)\r\n nodes.push(md)\r\n }\r\n })\r\n return nodes\r\n}\r\n\r\n/**\r\n * @description:One obj generates one line of text \u4E00\u4E2Aobj\u751F\u6210\u4E00\u4E2A\u4E00\u884C\u6587\u5B57\r\n * @param {ItemType} obj\r\n * @param {Boolean} last Is it the last one \u662F\u4E0D\u662F\u6700\u540E\u4E00\u4E2A\r\n * @return {*}\r\n */\r\nfunction setMd(obj: ItemType, last: Boolean): string {\r\n let filesString = ''\r\n const blank = '\u2502 '.repeat(obj.level) // \u91CD\u590D\u7A7A\u767D\r\n const pre = `${blank}${last ? '\u2514\u2500\u2500' : '\u251C\u2500\u2500'} ${obj.name}`\r\n if (obj.isDir) {\r\n filesString += `${pre}\\n`\r\n } else {\r\n filesString += `${pre} ${obj.note}\\n`\r\n }\r\n return filesString\r\n}\r\n\r\n/**\r\n * @description: Write the result to JS file \u628A\u7ED3\u679C\u5199\u5165\u5230js\u6587\u4EF6\r\n * @param {data} \u8981\u5199\u7684\u6570\u636E\r\n * @return {fileName} \u8981\u5199\u5165\u6587\u4EF6\u5730\u5740\r\n */\r\nfunction wirteJs(data: string, filePath: string) {\r\n const file = path.resolve(__dirname, filePath)\r\n const pre = 'export default'\r\n // \u5F02\u6B65\u5199\u5165\u6570\u636E\u5230\u6587\u4EF6\r\n fs.writeFile(file, pre + data, { encoding: 'utf8' }, (err) => {\r\n console.error(err)\r\n })\r\n}\r\n/**\r\n * @description:Thousands format \u5343\u5206\u4F4D\u683C\u5F0F\u5316\r\n * @param {num} To format a number \u8981\u683C\u5F0F\u5316\u6570\u5B57\r\n * @return {string}\r\n */\r\nfunction format(num: number) {\r\n var reg = /\\d{1,3}(?=(\\d{3})+$)/g\r\n return (num + '').replace(reg, '$&,')\r\n}\r\n/**\r\n * @description: Generate statistics MD \u751F\u6210\u7EDF\u8BA1md\r\n * @param {object} option\r\n * @return {*}\r\n */\r\nfunction setCountMd(obj: secoutType) {\r\n const { rowTotleNumber, sizeTotleNumber, coutObj } = obj\r\n let countMd = ''\r\n let totle=0\r\n for (const key in coutObj) {\r\n const ele = coutObj[key]\r\n totle += ele\r\n countMd += `The suffix is ${key} has ${ele} files\\n`\r\n }\r\n countMd += `The totle has ${totle} files\\n`\r\n let md = `Total number of file lines: ${format(rowTotleNumber)},\r\nTotal number of codes: ${format(sizeTotleNumber)} \\n`\r\n md = countMd + md\r\n return md\r\n // wirteMd(md, `${path.resolve('./')}\\\\count-md.md`)\r\n}\r\n/**\r\n * @description: Get statistics \u5F97\u5230\u7EDF\u8BA1\r\n * @param {Array} nodes\r\n * @return {*}\r\n */\r\nfunction getCountMd(datas: Array<ItemType>) {\r\n let rowTotleNumber = 0\r\n let sizeTotleNumber = 0\r\n const coutObj: { [key: string]: number } = {}\r\n function getDeatle(nodes: Array<ItemType>) {\r\n nodes.forEach((obj: ItemType) => {\r\n if (obj.children) getDeatle(obj.children)\r\n else {\r\n if (!coutObj.hasOwnProperty(obj.suffix)) coutObj[obj.suffix] = 0\r\n coutObj[obj.suffix]++\r\n rowTotleNumber += obj.rowSize\r\n sizeTotleNumber += obj.size\r\n }\r\n })\r\n }\r\n getDeatle(datas)\r\n return {\r\n rowTotleNumber,\r\n sizeTotleNumber,\r\n coutObj\r\n }\r\n}\r\n\r\n/**\r\n * @description: Generate MD \u751F\u6210md\r\n * @param {object} option\r\n * @return {*}\r\n */\r\nexport function getMd(option?: { ignore: string[] | undefined; include: string[] | undefined } | undefined) {\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** run location: ', path.resolve('./'))\r\n const nodes = getFileNodes(option)\r\n // \u5F97\u5230md\u5BF9\u8C61\r\n wirteJs(JSON.stringify(nodes), __dirname + '\\\\readme-file.js')\r\n const countMdObj = getCountMd(nodes)\r\n const coutMd= setCountMd(countMdObj)\r\n const note = getNote(nodes) // \u5F97\u5230\u6240\u6709note\u7684\u6570\u7EC4\r\n const md = note.join('')+'\\n' // \u6570\u7EC4\u8F6C\u5B57\u7B26\u4E32\r\n if (md.length > 0) {\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** Automatic generation completed ! ')\r\n }\r\n console.log('\\x1B[33m%s\\x1b[0m:', coutMd)\r\n return md + coutMd\r\n}\r\n\r\n/**\r\n * @description:Write the result to JS file \u628A\u7ED3\u679C\u5199\u5165\u5230js\u6587\u4EF6\r\n * @param {data} \u8981\u5199\u7684\u6570\u636E\r\n * @return {fileName} \u8981\u5199\u5165\u6587\u4EF6\u5730\u5740\r\n */\r\nexport function wirteMd(data: string, filePath: string) {\r\n const file = path.resolve(__dirname, filePath)\r\n // \u5F02\u6B65\u5199\u5165\u6570\u636E\u5230\u6587\u4EF6\r\n fs.writeFile(file, data, { encoding: 'utf8' }, (err) => {\r\n console.error(err)\r\n })\r\n}\r\n", "import arg from 'arg'\r\nconst stringToArgs = (rawArgs: string[]) => {\r\n const args = arg(\r\n {\r\n '--ignore': String,\r\n '--include': String,\r\n '--version': Boolean,\r\n '--help': Boolean,\r\n '-h': '--help',\r\n '-i': '--ignore',\r\n '-in': '--include',\r\n '-v': '--version'\r\n },\r\n {\r\n argv: rawArgs.slice(2)\r\n }\r\n )\r\n return {\r\n help: args['--help'],\r\n ignore: args['--ignore'],\r\n include: args['--include'],\r\n version: args['--version']\r\n }\r\n}\r\n\r\nexport default stringToArgs\r\n", "const st = `Usage: agmd--include str--ignore str\r\n\r\n Options:\r\n --include string / -i string.......... include file extension\r\n --ignore string / -in string........... ignore file or fold\r\n --version / -v ........... seach vesion\r\n Str deafult:\r\n --ignore img,styles,node_modules,LICENSE,.git,.github,dist,.husky,.vscode,readme-file.js,readme-md.js\r\n --include .js,.vue,.ts\r\n\r\n Note:\r\n There should be no space between strings in a configuration\r\n\r\n Examples:\r\n $ agmd --ignore lib,node_modules,dist --include .js,.ts,.vue`\r\n\r\nfunction help() {\r\n console.log(st)\r\n process.exit(0)\r\n}\r\nexport default help\r\n", "import help from '../help'\r\nimport pkg from '../../package.json'\r\ninterface parseType {\r\n version?: Boolean | undefined\r\n includes?: string[]\r\n ignores?: string[]\r\n help: Boolean | undefined\r\n ignore: string | undefined\r\n include: string | undefined\r\n}\r\nfunction handle(settings: parseType) {\r\n if (settings.help) {\r\n help()\r\n }\r\n if (settings.version) {\r\n console.log(`agmd version is: ` + '\\x1B[36m%s\\x1B[0m', pkg.version)\r\n process.exit(0)\r\n }\r\n if (settings.ignore) {\r\n settings.ignores = settings.ignore.split(' ')\r\n }\r\n if (settings.include) {\r\n settings.includes = settings.include.split(' ')\r\n }\r\n return settings\r\n}\r\n\r\nexport default handle\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default[{"name":"bin","isDir":true,"level":0,"note":"","children":[{"name":"agmd.js","isDir":false,"level":1,"note":"","noteText":"","size":8211,"rowSize":290,"suffix":".js"}]},{"name":"lib","isDir":true,"level":0,"note":"","children":[{"name":"index.cjs.js","isDir":false,"level":1,"note":"","noteText":"","size":6805,"rowSize":305,"suffix":".js"},{"name":"index.d.ts","isDir":false,"level":1,"note":"","noteText":"","size":630,"rowSize":25,"suffix":".ts"},{"name":"index.esm.js","isDir":false,"level":1,"note":"","noteText":"","size":4825,"rowSize":240,"suffix":".js"}]},{"name":"script","isDir":true,"level":0,"note":"","children":[{"name":"cli","isDir":true,"level":1,"note":"","children":[{"name":"handle.ts","isDir":false,"level":2,"note":"","noteText":"","size":681,"rowSize":30,"suffix":".ts"},{"name":"index.ts","isDir":false,"level":2,"note":"","noteText":"","size":539,"rowSize":38,"suffix":".ts"}]},{"name":"help","isDir":true,"level":1,"note":"","children":[{"name":"index.ts","isDir":false,"level":2,"note":"","noteText":"","size":640,"rowSize":38,"suffix":".ts"}]},{"name":"build.js","isDir":false,"level":1,"note":"","noteText":"","size":172,"rowSize":8,"suffix":".js"},{"name":"builder.js","isDir":false,"level":1,"note":"","noteText":"","size":1239,"rowSize":74,"suffix":".js"}]},{"name":"src","isDir":true,"level":0,"note":"","children":[{"name":"agmd.ts","isDir":false,"level":1,"note":"","noteText":"","size":635,"rowSize":27,"suffix":".ts"},{"name":"index.ts","isDir":false,"level":1,"note":"","noteText":"","size":7116,"rowSize":317,"suffix":".ts"}]},{"name":"test","isDir":true,"level":0,"note":"","children":[{"name":"index.js","isDir":false,"level":1,"note":"","noteText":"","size":88,"rowSize":4,"suffix":".js"}]},{"name":"unuse","isDir":true,"level":0,"note":"","children":[{"name":"assets","isDir":true,"level":1,"note":"","children":[]},{"name":"components","isDir":true,"level":1,"note":"","children":[{"name":"user-ruler.vue","isDir":false,"level":2,"note":"","noteText":"/* 这是vue2.0写法 */\r","size":3652,"rowSize":204,"suffix":".vue"},{"name":"user-rulerts.vue","isDir":false,"level":2,"note":"","noteText":"/* 这是ts写法 */\r","size":4219,"rowSize":239,"suffix":".vue"}]},{"name":"App.vue","isDir":false,"level":1,"note":"","noteText":"/* App主入口 */\r","size":695,"rowSize":31,"suffix":".vue"},{"name":"main.js","isDir":false,"level":1,"note":"","noteText":"/* 入口 */\r","size":340,"rowSize":13,"suffix":".js"}]},{"name":".eslintrc.js","isDir":false,"level":0,"note":"","noteText":"","size":938,"rowSize":67,"suffix":".js"}]
|
package/lib/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* agmd v0.2.
|
|
2
|
+
* agmd v0.2.8
|
|
3
3
|
* author:kakajun <253495832@qq.com>
|
|
4
|
-
*
|
|
4
|
+
* Sun Mar 20 2022 22:57:02 GMT+0800 (中国标准时间)
|
|
5
5
|
*/
|
|
6
6
|
var __create = Object.create;
|
|
7
7
|
var __defProp = Object.defineProperty;
|
|
@@ -35,15 +35,18 @@ var __toCommonJS = /* @__PURE__ */ ((cache) => {
|
|
|
35
35
|
var src_exports = {};
|
|
36
36
|
__export(src_exports, {
|
|
37
37
|
getFileNodes: () => getFileNodes,
|
|
38
|
-
getMd: () => getMd
|
|
38
|
+
getMd: () => getMd,
|
|
39
|
+
wirteMd: () => wirteMd
|
|
39
40
|
});
|
|
40
41
|
var import_fs = __toESM(require("fs"));
|
|
41
42
|
var import_path = __toESM(require("path"));
|
|
42
43
|
function getFile(file) {
|
|
43
44
|
const str = import_fs.default.readFileSync(file, "utf-8");
|
|
45
|
+
const size = str.length;
|
|
44
46
|
const sarr = str.split(/[\n,]/g);
|
|
47
|
+
const rowSize = sarr.length;
|
|
45
48
|
const f = sarr[0].indexOf("eslint") === -1 && (sarr[0].indexOf("-->") > -1 || sarr[0].indexOf("*/") > -1 || sarr[0].indexOf("//") > -1) ? sarr[0] : "";
|
|
46
|
-
return f;
|
|
49
|
+
return { note: f, size, rowSize };
|
|
47
50
|
}
|
|
48
51
|
function getFileNodes(option, nodes = [], dir = import_path.default.resolve("./"), level = 0) {
|
|
49
52
|
let ignore = [
|
|
@@ -84,7 +87,6 @@ function getFileNodes(option, nodes = [], dir = import_path.default.resolve("./"
|
|
|
84
87
|
});
|
|
85
88
|
for (let index = 0; index < files.length; index += 1) {
|
|
86
89
|
const item = files[index];
|
|
87
|
-
let note = "";
|
|
88
90
|
const foldFlag = ignore.findIndex((obj) => obj === item.name);
|
|
89
91
|
if (foldFlag === -1) {
|
|
90
92
|
const fullPath = import_path.default.join(dir, item.name);
|
|
@@ -96,8 +98,9 @@ function getFileNodes(option, nodes = [], dir = import_path.default.resolve("./"
|
|
|
96
98
|
const i = fullPath.lastIndexOf(".");
|
|
97
99
|
const lastName = fullPath.substring(i);
|
|
98
100
|
if (include.includes(lastName)) {
|
|
99
|
-
|
|
100
|
-
item
|
|
101
|
+
const obj = getFile(fullPath);
|
|
102
|
+
Object.assign(item, obj);
|
|
103
|
+
item.suffix = lastName;
|
|
101
104
|
nodes.push(item);
|
|
102
105
|
}
|
|
103
106
|
}
|
|
@@ -133,20 +136,84 @@ function setMd(obj, last) {
|
|
|
133
136
|
}
|
|
134
137
|
return filesString;
|
|
135
138
|
}
|
|
139
|
+
function wirteJs(data, filePath) {
|
|
140
|
+
const file = import_path.default.resolve(__dirname, filePath);
|
|
141
|
+
const pre = "export default";
|
|
142
|
+
import_fs.default.writeFile(file, pre + data, { encoding: "utf8" }, (err) => {
|
|
143
|
+
console.error(err);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function format(num) {
|
|
147
|
+
var reg = /\d{1,3}(?=(\d{3})+$)/g;
|
|
148
|
+
return (num + "").replace(reg, "$&,");
|
|
149
|
+
}
|
|
150
|
+
function setCountMd(obj) {
|
|
151
|
+
const { rowTotleNumber, sizeTotleNumber, coutObj } = obj;
|
|
152
|
+
let countMd = "";
|
|
153
|
+
let totle = 0;
|
|
154
|
+
for (const key in coutObj) {
|
|
155
|
+
const ele = coutObj[key];
|
|
156
|
+
totle += ele;
|
|
157
|
+
countMd += `The suffix is ${key} has ${ele} files
|
|
158
|
+
`;
|
|
159
|
+
}
|
|
160
|
+
countMd += `The totle has ${totle} files
|
|
161
|
+
`;
|
|
162
|
+
let md = `Total number of file lines: ${format(rowTotleNumber)},
|
|
163
|
+
Total number of codes: ${format(sizeTotleNumber)}
|
|
164
|
+
`;
|
|
165
|
+
md = countMd + md;
|
|
166
|
+
return md;
|
|
167
|
+
}
|
|
168
|
+
function getCountMd(datas) {
|
|
169
|
+
let rowTotleNumber = 0;
|
|
170
|
+
let sizeTotleNumber = 0;
|
|
171
|
+
const coutObj = {};
|
|
172
|
+
function getDeatle(nodes) {
|
|
173
|
+
nodes.forEach((obj) => {
|
|
174
|
+
if (obj.children)
|
|
175
|
+
getDeatle(obj.children);
|
|
176
|
+
else {
|
|
177
|
+
if (!coutObj.hasOwnProperty(obj.suffix))
|
|
178
|
+
coutObj[obj.suffix] = 0;
|
|
179
|
+
coutObj[obj.suffix]++;
|
|
180
|
+
rowTotleNumber += obj.rowSize;
|
|
181
|
+
sizeTotleNumber += obj.size;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
getDeatle(datas);
|
|
186
|
+
return {
|
|
187
|
+
rowTotleNumber,
|
|
188
|
+
sizeTotleNumber,
|
|
189
|
+
coutObj
|
|
190
|
+
};
|
|
191
|
+
}
|
|
136
192
|
function getMd(option) {
|
|
137
193
|
console.log("\x1B[36m%s\x1B[0m", "*** run location: ", import_path.default.resolve("./"));
|
|
138
194
|
const nodes = getFileNodes(option);
|
|
195
|
+
wirteJs(JSON.stringify(nodes), __dirname + "\\readme-file.js");
|
|
196
|
+
const countMdObj = getCountMd(nodes);
|
|
197
|
+
const coutMd = setCountMd(countMdObj);
|
|
139
198
|
const note = getNote(nodes);
|
|
140
|
-
const md = note.join("");
|
|
199
|
+
const md = note.join("") + "\n";
|
|
141
200
|
if (md.length > 0) {
|
|
142
201
|
console.log("\x1B[36m%s\x1B[0m", "*** Automatic generation completed ! ");
|
|
143
202
|
}
|
|
144
|
-
|
|
203
|
+
console.log("\x1B[33m%s\x1B[0m:", coutMd);
|
|
204
|
+
return md + coutMd;
|
|
205
|
+
}
|
|
206
|
+
function wirteMd(data, filePath) {
|
|
207
|
+
const file = import_path.default.resolve(__dirname, filePath);
|
|
208
|
+
import_fs.default.writeFile(file, data, { encoding: "utf8" }, (err) => {
|
|
209
|
+
console.error(err);
|
|
210
|
+
});
|
|
145
211
|
}
|
|
146
212
|
module.exports = __toCommonJS(src_exports);
|
|
147
213
|
// Annotate the CommonJS export names for ESM import in node:
|
|
148
214
|
0 && (module.exports = {
|
|
149
215
|
getFileNodes,
|
|
150
|
-
getMd
|
|
216
|
+
getMd,
|
|
217
|
+
wirteMd
|
|
151
218
|
});
|
|
152
219
|
//# sourceMappingURL=index.cjs.js.map
|
package/lib/index.cjs.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs'\r\nimport path from 'path'\r\n\r\n/**\r\n * @description:Gets the header comment of the file \u83B7\u53D6\u6587\u4EF6\u7684\u5934\u90E8\u6CE8\u91CA\r\n * @param {*} file\r\n * @return {*}\r\n */\r\nfunction getFile(file: fs.PathOrFileDescriptor) {\r\n const str = fs.readFileSync(file, 'utf-8')\r\n const sarr = str.split(/[\\n,]/g)\r\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,kBAAiB;AAOjB,iBAAiB,MAA+B;AAC9C,QAAM,MAAM,kBAAG,aAAa,MAAM;AAClC,QAAM,OAAO,IAAI,MAAM;
|
|
4
|
+
"sourcesContent": ["import fs from 'fs'\r\nimport path from 'path'\r\n\r\n/**\r\n * @description:Gets the header comment of the file \u83B7\u53D6\u6587\u4EF6\u7684\u5934\u90E8\u6CE8\u91CA\r\n * @param {*} file\r\n * @return {*}\r\n */\r\nfunction getFile(file: fs.PathOrFileDescriptor) {\r\n const str = fs.readFileSync(file, 'utf-8')\r\n const size = str.length\r\n const sarr = str.split(/[\\n,]/g)\r\n const rowSize = sarr.length\r\n const f =\r\n sarr[0].indexOf('eslint') === -1 &&\r\n (sarr[0].indexOf('-->') > -1 || sarr[0].indexOf('*/') > -1 || sarr[0].indexOf('//') > -1)\r\n ? sarr[0]\r\n : ''\r\n return { note: f, size, rowSize }\r\n}\r\n\r\ntype ItemType = {\r\n name: string\r\n isDir: boolean\r\n level: number\r\n note: string\r\n size: number\r\n suffix: string\r\n rowSize: number\r\n children?: ItemType[]\r\n}\r\n\r\ntype secoutType = { rowTotleNumber: number; sizeTotleNumber: number; coutObj: { [key: string]: number } }\r\n\r\n/**\r\n * @description:Generate node information for all files \u751F\u6210\u6240\u6709\u6587\u4EF6\u7684node\u4FE1\u606F\r\n * @param {Array} nodes\r\n * @param {*} dir\r\n * @param {Number} level\r\n * @return {*}\r\n */\r\nexport function getFileNodes(\r\n option: { ignore: string[] | undefined; include: string[] | undefined } | undefined,\r\n nodes: Array<ItemType> = [],\r\n dir = path.resolve('./'),\r\n level = 0\r\n): Array<ItemType> {\r\n //File filtering -- full name with suffix required \u6587\u4EF6\u8FC7\u6EE4--\u9700\u8981\u5168\u79F0\u5E26\u540E\u7F00\r\n let ignore = [\r\n 'img',\r\n 'styles',\r\n 'node_modules',\r\n 'LICENSE',\r\n '.git',\r\n '.github',\r\n 'dist',\r\n '.husky',\r\n '.vscode',\r\n 'readme-file.js',\r\n 'readme-md.js'\r\n ]\r\n //File suffix contains only \u6587\u4EF6\u540E\u7F00\u53EA\u5305\u542B\r\n let include = ['.js', '.vue', '.ts']\r\n\r\n if (option) {\r\n ignore = option.ignore || ignore\r\n include = option.include || include\r\n }\r\n const files = fs\r\n .readdirSync(dir)\r\n .map((item) => {\r\n const fullPath = path.join(dir, item)\r\n const isDir = fs.lstatSync(fullPath).isDirectory()\r\n return {\r\n name: item,\r\n isDir,\r\n level,\r\n note: ''\r\n } as ItemType\r\n })\r\n //Sort folders and files, otherwise the generated will not correspond to the opening order of the editor \u5BF9\u6587\u4EF6\u5939\u548C\u6587\u4EF6\u8FDB\u884C\u6392\u5E8F,\u8981\u4E0D\u7136\u751F\u6210\u7684\u548C\u7F16\u8F91\u5668\u6253\u5F00\u7684\u987A\u5E8F\u4E0D\u5BF9\u5E94\r\n .sort((a, b) => {\r\n if (!a.isDir && b.isDir) return 1\r\n if (a.isDir && !b.isDir) return -1\r\n if ((a.isDir && b.isDir) || (!a.isDir && !b.isDir)) return 0\r\n return 0\r\n })\r\n for (let index = 0; index < files.length; index += 1) {\r\n const item = files[index]\r\n //Folder filtering is handled here \u8FD9\u91CC\u5904\u7406\u6587\u4EF6\u5939\u8FC7\u6EE4\r\n const foldFlag = ignore.findIndex((obj: string) => obj === item.name)\r\n if (foldFlag === -1) {\r\n const fullPath = path.join(dir, item.name)\r\n const isDir = fs.lstatSync(fullPath).isDirectory()\r\n if (isDir) {\r\n //recursion \u9012\u5F52\r\n getFileNodes(option, (item.children = []), fullPath, level + 1)\r\n nodes.push(item)\r\n } else {\r\n const i = fullPath.lastIndexOf('.')\r\n const lastName = fullPath.substring(i)\r\n //File filtering is handled here \u8FD9\u91CC\u5904\u7406\u6587\u4EF6\u8FC7\u6EE4\r\n if (include.includes(lastName)) {\r\n const obj = getFile(fullPath)\r\n Object.assign(item, obj)\r\n item.suffix = lastName\r\n nodes.push(item)\r\n }\r\n }\r\n }\r\n }\r\n return nodes\r\n}\r\n\r\n/**\r\n * @description:Recursive file name + note \u9012\u5F52\u5F97\u5230\u6587\u4EF6\u540D+note\r\n * @param {Array} datas\r\n * @param {string} keys\r\n * @return {*}\r\n */\r\nfunction getNote(datas: Array<ItemType>, keys?: string[]) {\r\n const nodes = keys || []\r\n datas.forEach((obj: ItemType, index: Number) => {\r\n const last = index === datas.length - 1\r\n if (obj.children) {\r\n //fold\r\n const md = setMd(obj, last)\r\n nodes.push(md)\r\n getNote(obj.children, nodes)\r\n }\r\n // file\r\n else {\r\n const md = setMd(obj, last)\r\n nodes.push(md)\r\n }\r\n })\r\n return nodes\r\n}\r\n\r\n/**\r\n * @description:One obj generates one line of text \u4E00\u4E2Aobj\u751F\u6210\u4E00\u4E2A\u4E00\u884C\u6587\u5B57\r\n * @param {ItemType} obj\r\n * @param {Boolean} last Is it the last one \u662F\u4E0D\u662F\u6700\u540E\u4E00\u4E2A\r\n * @return {*}\r\n */\r\nfunction setMd(obj: ItemType, last: Boolean): string {\r\n let filesString = ''\r\n const blank = '\u2502 '.repeat(obj.level) // \u91CD\u590D\u7A7A\u767D\r\n const pre = `${blank}${last ? '\u2514\u2500\u2500' : '\u251C\u2500\u2500'} ${obj.name}`\r\n if (obj.isDir) {\r\n filesString += `${pre}\\n`\r\n } else {\r\n filesString += `${pre} ${obj.note}\\n`\r\n }\r\n return filesString\r\n}\r\n\r\n/**\r\n * @description: Write the result to JS file \u628A\u7ED3\u679C\u5199\u5165\u5230js\u6587\u4EF6\r\n * @param {data} \u8981\u5199\u7684\u6570\u636E\r\n * @return {fileName} \u8981\u5199\u5165\u6587\u4EF6\u5730\u5740\r\n */\r\nfunction wirteJs(data: string, filePath: string) {\r\n const file = path.resolve(__dirname, filePath)\r\n const pre = 'export default'\r\n // \u5F02\u6B65\u5199\u5165\u6570\u636E\u5230\u6587\u4EF6\r\n fs.writeFile(file, pre + data, { encoding: 'utf8' }, (err) => {\r\n console.error(err)\r\n })\r\n}\r\n/**\r\n * @description:Thousands format \u5343\u5206\u4F4D\u683C\u5F0F\u5316\r\n * @param {num} To format a number \u8981\u683C\u5F0F\u5316\u6570\u5B57\r\n * @return {string}\r\n */\r\nfunction format(num: number) {\r\n var reg = /\\d{1,3}(?=(\\d{3})+$)/g\r\n return (num + '').replace(reg, '$&,')\r\n}\r\n/**\r\n * @description: Generate statistics MD \u751F\u6210\u7EDF\u8BA1md\r\n * @param {object} option\r\n * @return {*}\r\n */\r\nfunction setCountMd(obj: secoutType) {\r\n const { rowTotleNumber, sizeTotleNumber, coutObj } = obj\r\n let countMd = ''\r\n let totle=0\r\n for (const key in coutObj) {\r\n const ele = coutObj[key]\r\n totle += ele\r\n countMd += `The suffix is ${key} has ${ele} files\\n`\r\n }\r\n countMd += `The totle has ${totle} files\\n`\r\n let md = `Total number of file lines: ${format(rowTotleNumber)},\r\nTotal number of codes: ${format(sizeTotleNumber)} \\n`\r\n md = countMd + md\r\n return md\r\n // wirteMd(md, `${path.resolve('./')}\\\\count-md.md`)\r\n}\r\n/**\r\n * @description: Get statistics \u5F97\u5230\u7EDF\u8BA1\r\n * @param {Array} nodes\r\n * @return {*}\r\n */\r\nfunction getCountMd(datas: Array<ItemType>) {\r\n let rowTotleNumber = 0\r\n let sizeTotleNumber = 0\r\n const coutObj: { [key: string]: number } = {}\r\n function getDeatle(nodes: Array<ItemType>) {\r\n nodes.forEach((obj: ItemType) => {\r\n if (obj.children) getDeatle(obj.children)\r\n else {\r\n if (!coutObj.hasOwnProperty(obj.suffix)) coutObj[obj.suffix] = 0\r\n coutObj[obj.suffix]++\r\n rowTotleNumber += obj.rowSize\r\n sizeTotleNumber += obj.size\r\n }\r\n })\r\n }\r\n getDeatle(datas)\r\n return {\r\n rowTotleNumber,\r\n sizeTotleNumber,\r\n coutObj\r\n }\r\n}\r\n\r\n/**\r\n * @description: Generate MD \u751F\u6210md\r\n * @param {object} option\r\n * @return {*}\r\n */\r\nexport function getMd(option?: { ignore: string[] | undefined; include: string[] | undefined } | undefined) {\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** run location: ', path.resolve('./'))\r\n const nodes = getFileNodes(option)\r\n // \u5F97\u5230md\u5BF9\u8C61\r\n wirteJs(JSON.stringify(nodes), __dirname + '\\\\readme-file.js')\r\n const countMdObj = getCountMd(nodes)\r\n const coutMd= setCountMd(countMdObj)\r\n const note = getNote(nodes) // \u5F97\u5230\u6240\u6709note\u7684\u6570\u7EC4\r\n const md = note.join('')+'\\n' // \u6570\u7EC4\u8F6C\u5B57\u7B26\u4E32\r\n if (md.length > 0) {\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** Automatic generation completed ! ')\r\n }\r\n console.log('\\x1B[33m%s\\x1b[0m:', coutMd)\r\n return md + coutMd\r\n}\r\n\r\n/**\r\n * @description:Write the result to JS file \u628A\u7ED3\u679C\u5199\u5165\u5230js\u6587\u4EF6\r\n * @param {data} \u8981\u5199\u7684\u6570\u636E\r\n * @return {fileName} \u8981\u5199\u5165\u6587\u4EF6\u5730\u5740\r\n */\r\nexport function wirteMd(data: string, filePath: string) {\r\n const file = path.resolve(__dirname, filePath)\r\n // \u5F02\u6B65\u5199\u5165\u6570\u636E\u5230\u6587\u4EF6\r\n fs.writeFile(file, data, { encoding: 'utf8' }, (err) => {\r\n console.error(err)\r\n })\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,kBAAiB;AAOjB,iBAAiB,MAA+B;AAC9C,QAAM,MAAM,kBAAG,aAAa,MAAM;AAClC,QAAM,OAAO,IAAI;AACjB,QAAM,OAAO,IAAI,MAAM;AACvB,QAAM,UAAU,KAAK;AACrB,QAAM,IACJ,KAAK,GAAG,QAAQ,cAAc,MAC7B,MAAK,GAAG,QAAQ,SAAS,MAAM,KAAK,GAAG,QAAQ,QAAQ,MAAM,KAAK,GAAG,QAAQ,QAAQ,MAClF,KAAK,KACL;AACN,SAAO,EAAE,MAAM,GAAG,MAAM;AAAA;AAuBnB,sBACL,QACA,QAAyB,IACzB,MAAM,oBAAK,QAAQ,OACnB,QAAQ,GACS;AAEjB,MAAI,SAAS;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGF,MAAI,UAAU,CAAC,OAAO,QAAQ;AAE9B,MAAI,QAAQ;AACV,aAAS,OAAO,UAAU;AAC1B,cAAU,OAAO,WAAW;AAAA;AAE9B,QAAM,QAAQ,kBACX,YAAY,KACZ,IAAI,CAAC,SAAS;AACb,UAAM,WAAW,oBAAK,KAAK,KAAK;AAChC,UAAM,QAAQ,kBAAG,UAAU,UAAU;AACrC,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA;AAAA,KAIT,KAAK,CAAC,GAAG,MAAM;AACd,QAAI,CAAC,EAAE,SAAS,EAAE;AAAO,aAAO;AAChC,QAAI,EAAE,SAAS,CAAC,EAAE;AAAO,aAAO;AAChC,QAAK,EAAE,SAAS,EAAE,SAAW,CAAC,EAAE,SAAS,CAAC,EAAE;AAAQ,aAAO;AAC3D,WAAO;AAAA;AAEX,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,OAAO,MAAM;AAEnB,UAAM,WAAW,OAAO,UAAU,CAAC,QAAgB,QAAQ,KAAK;AAChE,QAAI,aAAa,IAAI;AACnB,YAAM,WAAW,oBAAK,KAAK,KAAK,KAAK;AACrC,YAAM,QAAQ,kBAAG,UAAU,UAAU;AACrC,UAAI,OAAO;AAET,qBAAa,QAAS,KAAK,WAAW,IAAK,UAAU,QAAQ;AAC7D,cAAM,KAAK;AAAA,aACN;AACL,cAAM,IAAI,SAAS,YAAY;AAC/B,cAAM,WAAW,SAAS,UAAU;AAEpC,YAAI,QAAQ,SAAS,WAAW;AAC9B,gBAAM,MAAM,QAAQ;AACpB,iBAAO,OAAO,MAAM;AACpB,eAAK,SAAS;AACd,gBAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAKnB,SAAO;AAAA;AAST,iBAAiB,OAAwB,MAAiB;AACxD,QAAM,QAAQ,QAAQ;AACtB,QAAM,QAAQ,CAAC,KAAe,UAAkB;AAC9C,UAAM,OAAO,UAAU,MAAM,SAAS;AACtC,QAAI,IAAI,UAAU;AAEhB,YAAM,KAAK,MAAM,KAAK;AACtB,YAAM,KAAK;AACX,cAAQ,IAAI,UAAU;AAAA,WAGnB;AACH,YAAM,KAAK,MAAM,KAAK;AACtB,YAAM,KAAK;AAAA;AAAA;AAGf,SAAO;AAAA;AAST,eAAe,KAAe,MAAuB;AACnD,MAAI,cAAc;AAClB,QAAM,QAAQ,UAAK,OAAO,IAAI;AAC9B,QAAM,MAAM,GAAG,QAAQ,OAAO,uBAAQ,wBAAS,IAAI;AACnD,MAAI,IAAI,OAAO;AACb,mBAAe,GAAG;AAAA;AAAA,SACb;AACL,mBAAe,GAAG,kBAAkB,IAAI;AAAA;AAAA;AAE1C,SAAO;AAAA;AAQT,iBAAiB,MAAc,UAAkB;AAC/C,QAAM,OAAO,oBAAK,QAAQ,WAAW;AACrC,QAAM,MAAM;AAEZ,oBAAG,UAAU,MAAM,MAAM,MAAM,EAAE,UAAU,UAAU,CAAC,QAAQ;AAC5D,YAAQ,MAAM;AAAA;AAAA;AAQlB,gBAAgB,KAAa;AAC3B,MAAI,MAAM;AACV,SAAQ,OAAM,IAAI,QAAQ,KAAK;AAAA;AAOjC,oBAAoB,KAAiB;AACnC,QAAM,EAAE,gBAAgB,iBAAiB,YAAY;AACrD,MAAI,UAAU;AACd,MAAI,QAAM;AACV,aAAW,OAAO,SAAS;AACzB,UAAM,MAAM,QAAQ;AACpB,aAAS;AACT,eAAW,iBAAiB,WAAW;AAAA;AAAA;AAExC,aAAW,kBAAkB;AAAA;AAC9B,MAAI,KAAK,+BAA+B,OAAO;AAAA,yBACxB,OAAO;AAAA;AAC9B,OAAK,UAAU;AACf,SAAO;AAAA;AAQT,oBAAoB,OAAwB;AAC1C,MAAI,iBAAiB;AACrB,MAAI,kBAAkB;AACtB,QAAM,UAAqC;AAC3C,qBAAmB,OAAwB;AACzC,UAAM,QAAQ,CAAC,QAAkB;AAC/B,UAAI,IAAI;AAAU,kBAAU,IAAI;AAAA,WAC3B;AACH,YAAI,CAAC,QAAQ,eAAe,IAAI;AAAS,kBAAQ,IAAI,UAAU;AAC/D,gBAAQ,IAAI;AACZ,0BAAkB,IAAI;AACtB,2BAAmB,IAAI;AAAA;AAAA;AAAA;AAI7B,YAAU;AACV,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AASG,eAAe,QAAsF;AAC1G,UAAQ,IAAI,qBAAqB,sBAAsB,oBAAK,QAAQ;AACpE,QAAM,QAAQ,aAAa;AAE3B,UAAQ,KAAK,UAAU,QAAQ,YAAY;AAC3C,QAAM,aAAa,WAAW;AAC/B,QAAM,SAAQ,WAAW;AACxB,QAAM,OAAO,QAAQ;AACrB,QAAM,KAAK,KAAK,KAAK,MAAI;AACzB,MAAI,GAAG,SAAS,GAAG;AACjB,YAAQ,IAAI,qBAAqB;AAAA;AAElC,UAAQ,IAAI,sBAAsB;AACnC,SAAO,KAAK;AAAA;AAQP,iBAAiB,MAAc,UAAkB;AACtD,QAAM,OAAO,oBAAK,QAAQ,WAAW;AAErC,oBAAG,UAAU,MAAM,MAAM,EAAE,UAAU,UAAU,CAAC,QAAQ;AACtD,YAAQ,MAAM;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
declare type ItemType = {
|
|
2
2
|
name: string;
|
|
3
3
|
isDir: boolean;
|
|
4
4
|
level: number;
|
|
5
5
|
note: string;
|
|
6
|
+
size: number;
|
|
7
|
+
suffix: string;
|
|
8
|
+
rowSize: number;
|
|
6
9
|
children?: ItemType[];
|
|
7
10
|
};
|
|
8
11
|
export declare function getFileNodes(option: {
|
|
@@ -13,3 +16,5 @@ export declare function getMd(option?: {
|
|
|
13
16
|
ignore: string[] | undefined;
|
|
14
17
|
include: string[] | undefined;
|
|
15
18
|
} | undefined): string;
|
|
19
|
+
export declare function wirteMd(data: string, filePath: string): void;
|
|
20
|
+
export {};
|
package/lib/index.esm.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* agmd v0.2.
|
|
2
|
+
* agmd v0.2.8
|
|
3
3
|
* author:kakajun <253495832@qq.com>
|
|
4
|
-
*
|
|
4
|
+
* Sun Mar 20 2022 22:57:02 GMT+0800 (中国标准时间)
|
|
5
5
|
*/
|
|
6
6
|
// src/index.ts
|
|
7
7
|
import fs from "fs";
|
|
8
8
|
import path from "path";
|
|
9
9
|
function getFile(file) {
|
|
10
10
|
const str = fs.readFileSync(file, "utf-8");
|
|
11
|
+
const size = str.length;
|
|
11
12
|
const sarr = str.split(/[\n,]/g);
|
|
13
|
+
const rowSize = sarr.length;
|
|
12
14
|
const f = sarr[0].indexOf("eslint") === -1 && (sarr[0].indexOf("-->") > -1 || sarr[0].indexOf("*/") > -1 || sarr[0].indexOf("//") > -1) ? sarr[0] : "";
|
|
13
|
-
return f;
|
|
15
|
+
return { note: f, size, rowSize };
|
|
14
16
|
}
|
|
15
17
|
function getFileNodes(option, nodes = [], dir = path.resolve("./"), level = 0) {
|
|
16
18
|
let ignore = [
|
|
@@ -51,7 +53,6 @@ function getFileNodes(option, nodes = [], dir = path.resolve("./"), level = 0) {
|
|
|
51
53
|
});
|
|
52
54
|
for (let index = 0; index < files.length; index += 1) {
|
|
53
55
|
const item = files[index];
|
|
54
|
-
let note = "";
|
|
55
56
|
const foldFlag = ignore.findIndex((obj) => obj === item.name);
|
|
56
57
|
if (foldFlag === -1) {
|
|
57
58
|
const fullPath = path.join(dir, item.name);
|
|
@@ -63,8 +64,9 @@ function getFileNodes(option, nodes = [], dir = path.resolve("./"), level = 0) {
|
|
|
63
64
|
const i = fullPath.lastIndexOf(".");
|
|
64
65
|
const lastName = fullPath.substring(i);
|
|
65
66
|
if (include.includes(lastName)) {
|
|
66
|
-
|
|
67
|
-
item
|
|
67
|
+
const obj = getFile(fullPath);
|
|
68
|
+
Object.assign(item, obj);
|
|
69
|
+
item.suffix = lastName;
|
|
68
70
|
nodes.push(item);
|
|
69
71
|
}
|
|
70
72
|
}
|
|
@@ -100,18 +102,82 @@ function setMd(obj, last) {
|
|
|
100
102
|
}
|
|
101
103
|
return filesString;
|
|
102
104
|
}
|
|
105
|
+
function wirteJs(data, filePath) {
|
|
106
|
+
const file = path.resolve(__dirname, filePath);
|
|
107
|
+
const pre = "export default";
|
|
108
|
+
fs.writeFile(file, pre + data, { encoding: "utf8" }, (err) => {
|
|
109
|
+
console.error(err);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function format(num) {
|
|
113
|
+
var reg = /\d{1,3}(?=(\d{3})+$)/g;
|
|
114
|
+
return (num + "").replace(reg, "$&,");
|
|
115
|
+
}
|
|
116
|
+
function setCountMd(obj) {
|
|
117
|
+
const { rowTotleNumber, sizeTotleNumber, coutObj } = obj;
|
|
118
|
+
let countMd = "";
|
|
119
|
+
let totle = 0;
|
|
120
|
+
for (const key in coutObj) {
|
|
121
|
+
const ele = coutObj[key];
|
|
122
|
+
totle += ele;
|
|
123
|
+
countMd += `The suffix is ${key} has ${ele} files
|
|
124
|
+
`;
|
|
125
|
+
}
|
|
126
|
+
countMd += `The totle has ${totle} files
|
|
127
|
+
`;
|
|
128
|
+
let md = `Total number of file lines: ${format(rowTotleNumber)},
|
|
129
|
+
Total number of codes: ${format(sizeTotleNumber)}
|
|
130
|
+
`;
|
|
131
|
+
md = countMd + md;
|
|
132
|
+
return md;
|
|
133
|
+
}
|
|
134
|
+
function getCountMd(datas) {
|
|
135
|
+
let rowTotleNumber = 0;
|
|
136
|
+
let sizeTotleNumber = 0;
|
|
137
|
+
const coutObj = {};
|
|
138
|
+
function getDeatle(nodes) {
|
|
139
|
+
nodes.forEach((obj) => {
|
|
140
|
+
if (obj.children)
|
|
141
|
+
getDeatle(obj.children);
|
|
142
|
+
else {
|
|
143
|
+
if (!coutObj.hasOwnProperty(obj.suffix))
|
|
144
|
+
coutObj[obj.suffix] = 0;
|
|
145
|
+
coutObj[obj.suffix]++;
|
|
146
|
+
rowTotleNumber += obj.rowSize;
|
|
147
|
+
sizeTotleNumber += obj.size;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
getDeatle(datas);
|
|
152
|
+
return {
|
|
153
|
+
rowTotleNumber,
|
|
154
|
+
sizeTotleNumber,
|
|
155
|
+
coutObj
|
|
156
|
+
};
|
|
157
|
+
}
|
|
103
158
|
function getMd(option) {
|
|
104
159
|
console.log("\x1B[36m%s\x1B[0m", "*** run location: ", path.resolve("./"));
|
|
105
160
|
const nodes = getFileNodes(option);
|
|
161
|
+
wirteJs(JSON.stringify(nodes), __dirname + "\\readme-file.js");
|
|
162
|
+
const countMdObj = getCountMd(nodes);
|
|
163
|
+
const coutMd = setCountMd(countMdObj);
|
|
106
164
|
const note = getNote(nodes);
|
|
107
|
-
const md = note.join("");
|
|
165
|
+
const md = note.join("") + "\n";
|
|
108
166
|
if (md.length > 0) {
|
|
109
167
|
console.log("\x1B[36m%s\x1B[0m", "*** Automatic generation completed ! ");
|
|
110
168
|
}
|
|
111
|
-
|
|
169
|
+
console.log("\x1B[33m%s\x1B[0m:", coutMd);
|
|
170
|
+
return md + coutMd;
|
|
171
|
+
}
|
|
172
|
+
function wirteMd(data, filePath) {
|
|
173
|
+
const file = path.resolve(__dirname, filePath);
|
|
174
|
+
fs.writeFile(file, data, { encoding: "utf8" }, (err) => {
|
|
175
|
+
console.error(err);
|
|
176
|
+
});
|
|
112
177
|
}
|
|
113
178
|
export {
|
|
114
179
|
getFileNodes,
|
|
115
|
-
getMd
|
|
180
|
+
getMd,
|
|
181
|
+
wirteMd
|
|
116
182
|
};
|
|
117
183
|
//# sourceMappingURL=index.esm.js.map
|
package/lib/index.esm.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs'\r\nimport path from 'path'\r\n\r\n/**\r\n * @description:Gets the header comment of the file \u83B7\u53D6\u6587\u4EF6\u7684\u5934\u90E8\u6CE8\u91CA\r\n * @param {*} file\r\n * @return {*}\r\n */\r\nfunction getFile(file: fs.PathOrFileDescriptor) {\r\n const str = fs.readFileSync(file, 'utf-8')\r\n const sarr = str.split(/[\\n,]/g)\r\n
|
|
5
|
-
"mappings": ";;;;;;AAAA;AACA;AAOA,iBAAiB,MAA+B;AAC9C,QAAM,MAAM,GAAG,aAAa,MAAM;AAClC,QAAM,OAAO,IAAI,MAAM;
|
|
4
|
+
"sourcesContent": ["import fs from 'fs'\r\nimport path from 'path'\r\n\r\n/**\r\n * @description:Gets the header comment of the file \u83B7\u53D6\u6587\u4EF6\u7684\u5934\u90E8\u6CE8\u91CA\r\n * @param {*} file\r\n * @return {*}\r\n */\r\nfunction getFile(file: fs.PathOrFileDescriptor) {\r\n const str = fs.readFileSync(file, 'utf-8')\r\n const size = str.length\r\n const sarr = str.split(/[\\n,]/g)\r\n const rowSize = sarr.length\r\n const f =\r\n sarr[0].indexOf('eslint') === -1 &&\r\n (sarr[0].indexOf('-->') > -1 || sarr[0].indexOf('*/') > -1 || sarr[0].indexOf('//') > -1)\r\n ? sarr[0]\r\n : ''\r\n return { note: f, size, rowSize }\r\n}\r\n\r\ntype ItemType = {\r\n name: string\r\n isDir: boolean\r\n level: number\r\n note: string\r\n size: number\r\n suffix: string\r\n rowSize: number\r\n children?: ItemType[]\r\n}\r\n\r\ntype secoutType = { rowTotleNumber: number; sizeTotleNumber: number; coutObj: { [key: string]: number } }\r\n\r\n/**\r\n * @description:Generate node information for all files \u751F\u6210\u6240\u6709\u6587\u4EF6\u7684node\u4FE1\u606F\r\n * @param {Array} nodes\r\n * @param {*} dir\r\n * @param {Number} level\r\n * @return {*}\r\n */\r\nexport function getFileNodes(\r\n option: { ignore: string[] | undefined; include: string[] | undefined } | undefined,\r\n nodes: Array<ItemType> = [],\r\n dir = path.resolve('./'),\r\n level = 0\r\n): Array<ItemType> {\r\n //File filtering -- full name with suffix required \u6587\u4EF6\u8FC7\u6EE4--\u9700\u8981\u5168\u79F0\u5E26\u540E\u7F00\r\n let ignore = [\r\n 'img',\r\n 'styles',\r\n 'node_modules',\r\n 'LICENSE',\r\n '.git',\r\n '.github',\r\n 'dist',\r\n '.husky',\r\n '.vscode',\r\n 'readme-file.js',\r\n 'readme-md.js'\r\n ]\r\n //File suffix contains only \u6587\u4EF6\u540E\u7F00\u53EA\u5305\u542B\r\n let include = ['.js', '.vue', '.ts']\r\n\r\n if (option) {\r\n ignore = option.ignore || ignore\r\n include = option.include || include\r\n }\r\n const files = fs\r\n .readdirSync(dir)\r\n .map((item) => {\r\n const fullPath = path.join(dir, item)\r\n const isDir = fs.lstatSync(fullPath).isDirectory()\r\n return {\r\n name: item,\r\n isDir,\r\n level,\r\n note: ''\r\n } as ItemType\r\n })\r\n //Sort folders and files, otherwise the generated will not correspond to the opening order of the editor \u5BF9\u6587\u4EF6\u5939\u548C\u6587\u4EF6\u8FDB\u884C\u6392\u5E8F,\u8981\u4E0D\u7136\u751F\u6210\u7684\u548C\u7F16\u8F91\u5668\u6253\u5F00\u7684\u987A\u5E8F\u4E0D\u5BF9\u5E94\r\n .sort((a, b) => {\r\n if (!a.isDir && b.isDir) return 1\r\n if (a.isDir && !b.isDir) return -1\r\n if ((a.isDir && b.isDir) || (!a.isDir && !b.isDir)) return 0\r\n return 0\r\n })\r\n for (let index = 0; index < files.length; index += 1) {\r\n const item = files[index]\r\n //Folder filtering is handled here \u8FD9\u91CC\u5904\u7406\u6587\u4EF6\u5939\u8FC7\u6EE4\r\n const foldFlag = ignore.findIndex((obj: string) => obj === item.name)\r\n if (foldFlag === -1) {\r\n const fullPath = path.join(dir, item.name)\r\n const isDir = fs.lstatSync(fullPath).isDirectory()\r\n if (isDir) {\r\n //recursion \u9012\u5F52\r\n getFileNodes(option, (item.children = []), fullPath, level + 1)\r\n nodes.push(item)\r\n } else {\r\n const i = fullPath.lastIndexOf('.')\r\n const lastName = fullPath.substring(i)\r\n //File filtering is handled here \u8FD9\u91CC\u5904\u7406\u6587\u4EF6\u8FC7\u6EE4\r\n if (include.includes(lastName)) {\r\n const obj = getFile(fullPath)\r\n Object.assign(item, obj)\r\n item.suffix = lastName\r\n nodes.push(item)\r\n }\r\n }\r\n }\r\n }\r\n return nodes\r\n}\r\n\r\n/**\r\n * @description:Recursive file name + note \u9012\u5F52\u5F97\u5230\u6587\u4EF6\u540D+note\r\n * @param {Array} datas\r\n * @param {string} keys\r\n * @return {*}\r\n */\r\nfunction getNote(datas: Array<ItemType>, keys?: string[]) {\r\n const nodes = keys || []\r\n datas.forEach((obj: ItemType, index: Number) => {\r\n const last = index === datas.length - 1\r\n if (obj.children) {\r\n //fold\r\n const md = setMd(obj, last)\r\n nodes.push(md)\r\n getNote(obj.children, nodes)\r\n }\r\n // file\r\n else {\r\n const md = setMd(obj, last)\r\n nodes.push(md)\r\n }\r\n })\r\n return nodes\r\n}\r\n\r\n/**\r\n * @description:One obj generates one line of text \u4E00\u4E2Aobj\u751F\u6210\u4E00\u4E2A\u4E00\u884C\u6587\u5B57\r\n * @param {ItemType} obj\r\n * @param {Boolean} last Is it the last one \u662F\u4E0D\u662F\u6700\u540E\u4E00\u4E2A\r\n * @return {*}\r\n */\r\nfunction setMd(obj: ItemType, last: Boolean): string {\r\n let filesString = ''\r\n const blank = '\u2502 '.repeat(obj.level) // \u91CD\u590D\u7A7A\u767D\r\n const pre = `${blank}${last ? '\u2514\u2500\u2500' : '\u251C\u2500\u2500'} ${obj.name}`\r\n if (obj.isDir) {\r\n filesString += `${pre}\\n`\r\n } else {\r\n filesString += `${pre} ${obj.note}\\n`\r\n }\r\n return filesString\r\n}\r\n\r\n/**\r\n * @description: Write the result to JS file \u628A\u7ED3\u679C\u5199\u5165\u5230js\u6587\u4EF6\r\n * @param {data} \u8981\u5199\u7684\u6570\u636E\r\n * @return {fileName} \u8981\u5199\u5165\u6587\u4EF6\u5730\u5740\r\n */\r\nfunction wirteJs(data: string, filePath: string) {\r\n const file = path.resolve(__dirname, filePath)\r\n const pre = 'export default'\r\n // \u5F02\u6B65\u5199\u5165\u6570\u636E\u5230\u6587\u4EF6\r\n fs.writeFile(file, pre + data, { encoding: 'utf8' }, (err) => {\r\n console.error(err)\r\n })\r\n}\r\n/**\r\n * @description:Thousands format \u5343\u5206\u4F4D\u683C\u5F0F\u5316\r\n * @param {num} To format a number \u8981\u683C\u5F0F\u5316\u6570\u5B57\r\n * @return {string}\r\n */\r\nfunction format(num: number) {\r\n var reg = /\\d{1,3}(?=(\\d{3})+$)/g\r\n return (num + '').replace(reg, '$&,')\r\n}\r\n/**\r\n * @description: Generate statistics MD \u751F\u6210\u7EDF\u8BA1md\r\n * @param {object} option\r\n * @return {*}\r\n */\r\nfunction setCountMd(obj: secoutType) {\r\n const { rowTotleNumber, sizeTotleNumber, coutObj } = obj\r\n let countMd = ''\r\n let totle=0\r\n for (const key in coutObj) {\r\n const ele = coutObj[key]\r\n totle += ele\r\n countMd += `The suffix is ${key} has ${ele} files\\n`\r\n }\r\n countMd += `The totle has ${totle} files\\n`\r\n let md = `Total number of file lines: ${format(rowTotleNumber)},\r\nTotal number of codes: ${format(sizeTotleNumber)} \\n`\r\n md = countMd + md\r\n return md\r\n // wirteMd(md, `${path.resolve('./')}\\\\count-md.md`)\r\n}\r\n/**\r\n * @description: Get statistics \u5F97\u5230\u7EDF\u8BA1\r\n * @param {Array} nodes\r\n * @return {*}\r\n */\r\nfunction getCountMd(datas: Array<ItemType>) {\r\n let rowTotleNumber = 0\r\n let sizeTotleNumber = 0\r\n const coutObj: { [key: string]: number } = {}\r\n function getDeatle(nodes: Array<ItemType>) {\r\n nodes.forEach((obj: ItemType) => {\r\n if (obj.children) getDeatle(obj.children)\r\n else {\r\n if (!coutObj.hasOwnProperty(obj.suffix)) coutObj[obj.suffix] = 0\r\n coutObj[obj.suffix]++\r\n rowTotleNumber += obj.rowSize\r\n sizeTotleNumber += obj.size\r\n }\r\n })\r\n }\r\n getDeatle(datas)\r\n return {\r\n rowTotleNumber,\r\n sizeTotleNumber,\r\n coutObj\r\n }\r\n}\r\n\r\n/**\r\n * @description: Generate MD \u751F\u6210md\r\n * @param {object} option\r\n * @return {*}\r\n */\r\nexport function getMd(option?: { ignore: string[] | undefined; include: string[] | undefined } | undefined) {\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** run location: ', path.resolve('./'))\r\n const nodes = getFileNodes(option)\r\n // \u5F97\u5230md\u5BF9\u8C61\r\n wirteJs(JSON.stringify(nodes), __dirname + '\\\\readme-file.js')\r\n const countMdObj = getCountMd(nodes)\r\n const coutMd= setCountMd(countMdObj)\r\n const note = getNote(nodes) // \u5F97\u5230\u6240\u6709note\u7684\u6570\u7EC4\r\n const md = note.join('')+'\\n' // \u6570\u7EC4\u8F6C\u5B57\u7B26\u4E32\r\n if (md.length > 0) {\r\n console.log('\\x1B[36m%s\\x1B[0m', '*** Automatic generation completed ! ')\r\n }\r\n console.log('\\x1B[33m%s\\x1b[0m:', coutMd)\r\n return md + coutMd\r\n}\r\n\r\n/**\r\n * @description:Write the result to JS file \u628A\u7ED3\u679C\u5199\u5165\u5230js\u6587\u4EF6\r\n * @param {data} \u8981\u5199\u7684\u6570\u636E\r\n * @return {fileName} \u8981\u5199\u5165\u6587\u4EF6\u5730\u5740\r\n */\r\nexport function wirteMd(data: string, filePath: string) {\r\n const file = path.resolve(__dirname, filePath)\r\n // \u5F02\u6B65\u5199\u5165\u6570\u636E\u5230\u6587\u4EF6\r\n fs.writeFile(file, data, { encoding: 'utf8' }, (err) => {\r\n console.error(err)\r\n })\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agmd",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "auto generate markdown for node",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"node",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"lint-staged": "^11.1.2",
|
|
45
45
|
"nodemon": "^2.0.15",
|
|
46
46
|
"prettier": "^2.5.1",
|
|
47
|
+
"ts-node": "^10.7.0",
|
|
47
48
|
"typescript": "^4.5.5"
|
|
48
49
|
},
|
|
49
50
|
"lint-staged": {
|