agmd 0.1.4 → 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/LICENSE +21 -21
- package/README.EN.md +175 -108
- package/README.md +103 -57
- package/bin/agmd.js +19 -134
- package/bin/agmd.js.map +3 -3
- package/bin/readme-file.js +1 -0
- package/lib/index.cjs.js +116 -34
- package/lib/index.cjs.js.map +2 -2
- package/lib/index.d.ts +14 -3
- package/lib/index.esm.js +114 -33
- package/lib/index.esm.js.map +2 -2
- package/package.json +11 -6
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'\nimport path from 'path'\n\n/**\n * @description: \u83B7\u53D6\u6587\u4EF6\u7684\u5934\u90E8\u6CE8\u91CA\n * @param {*} file\n * @return {*}\n */\nfunction getFile(file: fs.PathOrFileDescriptor) {\n const str = fs.readFileSync(file, 'utf-8')\n const sarr = str.split(/[\\n,]/g)\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.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "auto generate markdown for node",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"node",
|
|
@@ -16,13 +16,15 @@
|
|
|
16
16
|
"agmd": "./bin/agmd.js"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
|
+
"dev": "npx nodemon src/agmd.ts",
|
|
20
|
+
"agmd": "npx agmd --ignore lib,node_modules,dist --include .js,.ts,.vue",
|
|
19
21
|
"lint": "eslint \"src/**/*.{ts}\" --max-warnings=0",
|
|
20
|
-
"build": "node
|
|
22
|
+
"build": "node script/build.js",
|
|
21
23
|
"prepare": "husky install",
|
|
22
24
|
"lint-fix": "eslint --fix --ext .js,.ts",
|
|
23
25
|
"test": "npm run build && node bin/agmd"
|
|
24
26
|
},
|
|
25
|
-
"author": "
|
|
27
|
+
"author": "kakajun <253495832@qq.com>",
|
|
26
28
|
"repository": {
|
|
27
29
|
"type": "git",
|
|
28
30
|
"url": "git@github.com:kakajun/auto-generate-md.git"
|
|
@@ -31,16 +33,19 @@
|
|
|
31
33
|
"@types/node": "^17.0.0",
|
|
32
34
|
"@typescript-eslint/eslint-plugin": "^4.31.0",
|
|
33
35
|
"@typescript-eslint/parser": "^4.31.0",
|
|
34
|
-
"agmd": "0.
|
|
36
|
+
"agmd": "^0.2.2",
|
|
37
|
+
"arg": "5.0.1",
|
|
35
38
|
"esbuild": "^0.14.5",
|
|
36
39
|
"esbuild-plugin-d.ts": "^1.1.0",
|
|
37
|
-
"eslint": "^
|
|
40
|
+
"eslint": "^8.8.0",
|
|
38
41
|
"eslint-config-prettier": "^8.3.0",
|
|
39
42
|
"fs-extra": "^10.0.0",
|
|
40
43
|
"husky": "^7.0.2",
|
|
41
44
|
"lint-staged": "^11.1.2",
|
|
45
|
+
"nodemon": "^2.0.15",
|
|
42
46
|
"prettier": "^2.5.1",
|
|
43
|
-
"
|
|
47
|
+
"ts-node": "^10.7.0",
|
|
48
|
+
"typescript": "^4.5.5"
|
|
44
49
|
},
|
|
45
50
|
"lint-staged": {
|
|
46
51
|
"*.{ts,tsx,js}": "prettier --write",
|