readme-author 0.1.2

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 ADDED
@@ -0,0 +1,11 @@
1
+ # readme-author
2
+
3
+ ## Description
4
+
5
+
6
+ ## Installation
7
+ npm install
8
+
9
+ ## Available Scripts
10
+ - npm run test
11
+ - npm run build
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ const readline = require("readline");
7
+ const chalk_1 = require("chalk");
8
+ const ora_1 = require("ora");
9
+ const commander_1 = require("commander");
10
+ const stack_detector_1 = require("./core/stack-detector");
11
+ const package_parser_1 = require("./core/package-parser");
12
+ const markdown_generator_1 = require("./generator/markdown-generator");
13
+ const nodeFiglet = require("figlet");
14
+ const gradient_string_1 = require("gradient-string");
15
+ const program = new commander_1.Command();
16
+ function sleep(ms) {
17
+ return new Promise((resolve) => setTimeout(resolve, ms));
18
+ }
19
+ program
20
+ .name("readme-author")
21
+ .description("Auto generate README.md from project")
22
+ .version("1.0.0");
23
+ console.log(gradient_string_1.default.rainbow(nodeFiglet.textSync("README AUTHOR", {
24
+ horizontalLayout: "default",
25
+ })));
26
+ function askOverwrite(filePath) {
27
+ return new Promise((resolve) => {
28
+ const rl = readline.createInterface({
29
+ input: process.stdin,
30
+ output: process.stdout,
31
+ });
32
+ rl.question(`A README.md already exists at "${filePath}". Overwrite? (y/n) `, (answer) => {
33
+ rl.close();
34
+ const normalized = answer.trim().toLowerCase();
35
+ resolve(normalized === "y" || normalized === "yes");
36
+ });
37
+ });
38
+ }
39
+ program
40
+ .argument("[projectPath]", "Path to project directory", ".")
41
+ .action(async (projectPathArg) => {
42
+ const projectPath = path.resolve(process.cwd(), projectPathArg);
43
+ let spinner = null;
44
+ try {
45
+ spinner = (0, ora_1.default)(chalk_1.default.cyan("Analyzing project...")).start();
46
+ await sleep(500);
47
+ if (!(0, stack_detector_1.detectNodeProject)(projectPath)) {
48
+ spinner.fail(chalk_1.default.yellow("No supported project detected in the provided directory."));
49
+ return;
50
+ }
51
+ spinner.succeed(chalk_1.default.green("Project detected."));
52
+ spinner = (0, ora_1.default)(chalk_1.default.cyan("Reading package.json...")).start();
53
+ await sleep(500);
54
+ const pkg = (0, package_parser_1.parsePackageJson)(projectPath);
55
+ spinner.succeed(chalk_1.default.green("package.json read successfully."));
56
+ spinner = (0, ora_1.default)(chalk_1.default.cyan("Generating README content...")).start();
57
+ await sleep(500);
58
+ const markdown = (0, markdown_generator_1.generateReadmeMarkdown)(pkg);
59
+ spinner.succeed(chalk_1.default.green("README content generated."));
60
+ const readmePath = path.join(projectPath, "README.md");
61
+ const creatingNew = !fs.existsSync(readmePath);
62
+ if (!creatingNew) {
63
+ if (spinner)
64
+ spinner.stop();
65
+ const shouldOverwrite = await askOverwrite(readmePath);
66
+ if (!shouldOverwrite) {
67
+ console.log(chalk_1.default.yellow("Aborted. Existing README.md was not overwritten."));
68
+ return;
69
+ }
70
+ spinner = (0, ora_1.default)(chalk_1.default.cyan("Updating existing README.md...")).start();
71
+ }
72
+ else {
73
+ spinner = (0, ora_1.default)(chalk_1.default.cyan("Creating README.md...")).start();
74
+ }
75
+ await sleep(500);
76
+ fs.writeFileSync(readmePath, markdown, "utf8");
77
+ spinner.succeed(chalk_1.default.green(creatingNew
78
+ ? "README.md created successfully!"
79
+ : "README.md updated successfully!"));
80
+ }
81
+ catch (error) {
82
+ if (spinner) {
83
+ spinner.fail(chalk_1.default.red("Failed to generate README.md."));
84
+ }
85
+ else {
86
+ console.error(chalk_1.default.red("Failed to generate README.md."));
87
+ }
88
+ if (error instanceof Error) {
89
+ console.error(chalk_1.default.red(error.message));
90
+ }
91
+ process.exitCode = 1;
92
+ }
93
+ });
94
+ program.parse(process.argv);
95
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yBAAyB;AACzB,6BAA6B;AAC7B,qCAAqC;AACrC,iCAA0B;AAC1B,6BAA+B;AAC/B,yCAAoC;AACpC,0DAA0D;AAC1D,0DAAyD;AACzD,uEAAwE;AACxE,qCAAsC;AACtC,qDAAuC;AAEvC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,GAAG,CACP,yBAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,EAAE;IAClD,gBAAgB,EAAE,SAAS;CAC5B,CAAC,CACH,CAAC,CAAA;AAGN,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CACT,kCAAkC,QAAQ,sBAAsB,EAChE,CAAC,MAAM,EAAE,EAAE;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC/C,OAAO,CAAC,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,CAAC,CAAC;QACtD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO;KACJ,QAAQ,CAAC,eAAe,EAAE,2BAA2B,EAAE,GAAG,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,cAAsB,EAAE,EAAE;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAEhE,IAAI,OAAO,GAAe,IAAI,CAAC;IAE/B,IAAI,CAAC;QACH,OAAO,GAAG,IAAA,aAAG,EAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1D,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjB,IAAI,CAAC,IAAA,kCAAiB,EAAC,WAAW,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CACV,eAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CACzE,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAElD,OAAO,GAAG,IAAA,aAAG,EAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7D,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjB,MAAM,GAAG,GAAG,IAAA,iCAAgB,EAAC,WAAW,CAAC,CAAC;QAE1C,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAEhE,OAAO,GAAG,IAAA,aAAG,EAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAClE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjB,MAAM,QAAQ,GAAG,IAAA,2CAAsB,EAAC,GAAG,CAAC,CAAC;QAE7C,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAE1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAE5B,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;YAEvD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CACjE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,OAAO,GAAG,IAAA,aAAG,EAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAA,aAAG,EAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7D,CAAC;QAED,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE/C,OAAO,CAAC,OAAO,CACb,eAAK,CAAC,KAAK,CACT,WAAW;YACT,CAAC,CAAC,iCAAiC;YACnC,CAAC,CAAC,iCAAiC,CACtC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type PackageJson = {
2
+ name: string;
3
+ description: string;
4
+ scripts: Record<string, string>;
5
+ dependencies: Record<string, string>;
6
+ };
7
+ export declare function parsePackageJson(projectPath: string): PackageJson;
8
+ //# sourceMappingURL=package-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-parser.d.ts","sourceRoot":"","sources":["../../src/core/package-parser.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAUjE"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parsePackageJson = parsePackageJson;
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ function parsePackageJson(projectPath) {
7
+ const packageJsonPath = path.join(projectPath, "package.json");
8
+ const packageJson = fs.readFileSync(packageJsonPath, "utf8");
9
+ const packageStructure = JSON.parse(packageJson);
10
+ return {
11
+ name: packageStructure.name,
12
+ description: packageStructure.description,
13
+ scripts: packageStructure.scripts,
14
+ dependencies: packageStructure.dependencies,
15
+ };
16
+ }
17
+ //# sourceMappingURL=package-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-parser.js","sourceRoot":"","sources":["../../src/core/package-parser.ts"],"names":[],"mappings":";;AAUA,4CAUC;AApBD,yBAAyB;AACzB,6BAA6B;AAS7B,SAAgB,gBAAgB,CAAC,WAAmB;IAClD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAgB,CAAC;IAChE,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,IAAI;QAC3B,WAAW,EAAE,gBAAgB,CAAC,WAAW;QACzC,OAAO,EAAE,gBAAgB,CAAC,OAAO;QACjC,YAAY,EAAE,gBAAgB,CAAC,YAAY;KAC5C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function detectNodeProject(projectPath: string): boolean;
2
+ //# sourceMappingURL=stack-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-detector.d.ts","sourceRoot":"","sources":["../../src/core/stack-detector.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectNodeProject = detectNodeProject;
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ function detectNodeProject(projectPath) {
7
+ return fs.existsSync(path.join(projectPath, "package.json"));
8
+ }
9
+ //# sourceMappingURL=stack-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-detector.js","sourceRoot":"","sources":["../../src/core/stack-detector.ts"],"names":[],"mappings":";;AAGA,8CAEC;AALD,yBAAyB;AACzB,6BAA6B;AAE7B,SAAgB,iBAAiB,CAAC,WAAmB;IACnD,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PackageJson } from "../core/package-parser";
2
+ export declare function generateReadmeMarkdown(pkg: PackageJson): string;
3
+ //# sourceMappingURL=markdown-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-generator.d.ts","sourceRoot":"","sources":["../../src/generator/markdown-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CA2B/D"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateReadmeMarkdown = generateReadmeMarkdown;
4
+ function generateReadmeMarkdown(pkg) {
5
+ const lines = [];
6
+ const projectName = pkg.name || "Project Name";
7
+ const description = pkg.description || "";
8
+ lines.push(`# ${projectName}`);
9
+ lines.push("");
10
+ lines.push("## Description");
11
+ lines.push(description);
12
+ lines.push("");
13
+ lines.push("## Installation");
14
+ lines.push("npm install");
15
+ lines.push("");
16
+ lines.push("## Available Scripts");
17
+ const scriptNames = Object.keys(pkg.scripts ?? {});
18
+ if (scriptNames.length === 0) {
19
+ lines.push("- (no npm scripts defined)");
20
+ }
21
+ else {
22
+ for (const name of scriptNames) {
23
+ lines.push(`- npm run ${name}`);
24
+ }
25
+ }
26
+ return lines.join("\n");
27
+ }
28
+ //# sourceMappingURL=markdown-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-generator.js","sourceRoot":"","sources":["../../src/generator/markdown-generator.ts"],"names":[],"mappings":";;AAEA,wDA2BC;AA3BD,SAAgB,sBAAsB,CAAC,GAAgB;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,cAAc,CAAC;IAC/C,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAE1C,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAEnC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAEnD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "readme-author",
3
+ "version": "0.1.2",
4
+ "description": "Zero-config CLI tool to auto-generate README.md from your project",
5
+ "main": "dist/cli.js",
6
+ "type": "commonjs",
7
+ "bin": {
8
+ "readme-author": "dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/tallman1O/readme-author.git"
19
+ },
20
+ "keywords": [
21
+ "cli",
22
+ "readme",
23
+ "documentation",
24
+ "nodejs",
25
+ "developer-tools"
26
+ ],
27
+ "author": "Mehul Uttam",
28
+ "license": "ISC",
29
+ "engines": {
30
+ "node": ">=18"
31
+ },
32
+ "dependencies": {
33
+ "chalk": "^5.6.2",
34
+ "commander": "^14.0.3",
35
+ "figlet": "^1.10.0",
36
+ "fs-extra": "^11.3.3",
37
+ "gradient-string": "^3.0.0",
38
+ "ora": "^9.3.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/figlet": "^1.7.0",
42
+ "@types/gradient-string": "^1.1.6",
43
+ "@types/node": "^25.3.0",
44
+ "ts-node": "^10.9.2",
45
+ "typescript": "^5.9.3"
46
+ }
47
+ }