smartreadme 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,270 @@
1
+ # Readme Gen
2
+
3
+ > A zero-dependency CLI tool and Node.js library that scans your project and generates a professional, publish-ready `README.md` β€” written in TypeScript.
4
+
5
+ [![npm version](https://badge.fury.io/js/smartreadme.svg)](https://www.npmjs.com/package/smartreadme)
6
+ [![npm downloads](https://img.shields.io/npm/dm/smartreadme.svg)](https://www.npmjs.com/package/smartreadme)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+ ![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat&logo=typescript&logoColor=white)
9
+
10
+ ---
11
+
12
+ ## πŸ“‹ About
13
+
14
+ **smartreadme** scans your `package.json`, detects your tech stack, reads your scripts, checks for Docker and CI configs, and safely masks any `.env` variables β€” then outputs a polished, structured `README.md` in seconds.
15
+
16
+ - **Zero dependencies** at runtime β€” nothing to install beyond the tool itself.
17
+ - **Safe `.env` handling** β€” real secret values are never written to your README; they are replaced with clearly labelled example placeholders.
18
+ - **Auto backup** β€” if a `README.md` already exists it is renamed to `README.backup.<timestamp>.md` before writing.
19
+ - **Works as a CLI or a programmatic API** β€” import `scan`, `generate`, and `run` directly in your own scripts.
20
+
21
+ ---
22
+
23
+ ## ✨ Features
24
+
25
+ - βœ… Detects 30+ frameworks and libraries (React, Vue, Next.js, Express, Prisma, tRPC, Hono…)
26
+ - βœ… Generates npm badges, license badge, and per-tech-stack shield badges automatically
27
+ - βœ… Masks `.env` / `.env.example` values with safe, contextual placeholders
28
+ - βœ… Produces a scripts table from `package.json`
29
+ - βœ… Adds Docker usage section when `Dockerfile` / `docker-compose.yml` is detected
30
+ - βœ… Adds API Reference section for backend/library project types
31
+ - βœ… Backs up any existing README before overwriting
32
+ - βœ… Fully typed β€” ships with `.d.ts` declaration files
33
+ - 🚧 Plugin system for custom section builders β€” coming soon
34
+
35
+ ---
36
+
37
+ ## πŸ› οΈ Tech Stack
38
+
39
+ - **TypeScript** β€” strict mode, full declaration output
40
+ - **Node.js** β€” CommonJS, no runtime dependencies
41
+ - **ts-node** β€” for running tests directly without a build step
42
+
43
+ ---
44
+
45
+ ## πŸ“¦ Prerequisites
46
+
47
+ - [Node.js](https://nodejs.org/) v18 or higher
48
+ - [npm](https://www.npmjs.com/) v9 or higher
49
+
50
+ ---
51
+
52
+ ## πŸš€ Getting Started
53
+
54
+ ### Install globally (CLI usage)
55
+
56
+ ```bash
57
+ npm install -g smartreadme
58
+ ```
59
+
60
+ ### Install locally (programmatic API)
61
+
62
+ ```bash
63
+ npm install --save-dev readme-gen
64
+ ```
65
+
66
+ ### Clone and develop
67
+
68
+ ```bash
69
+ git clone https://github.com/yourusername/readme-gen.git
70
+ cd readme-gen
71
+
72
+ # Install dev dependencies
73
+ npm install
74
+
75
+ # Build TypeScript β†’ dist/
76
+ npm run build
77
+
78
+ # Run the CLI from dist
79
+ npm start
80
+ ```
81
+
82
+ ---
83
+
84
+ ## πŸ’» Usage
85
+
86
+ ### CLI
87
+
88
+ Run inside any Node.js project directory:
89
+
90
+ ```bash
91
+ smartreadme
92
+ ```
93
+
94
+ This scans the current directory, generates `README.md`, and backs up any existing file.
95
+
96
+ #### CLI Options
97
+
98
+ | Flag | Alias | Description |
99
+ |------|-------|-------------|
100
+ | `--help` | `-h` | Show help message |
101
+ | `--version` | `-v` | Print version number |
102
+ | `--output <file>` | `-o` | Output filename (default: `README.md`) |
103
+ | `--overwrite` | `-f` | Overwrite existing README without backup |
104
+ | `--preview` | `-p` | Print README to terminal, no file written |
105
+ | `--dir <path>` | | Target directory (default: current directory) |
106
+
107
+ #### Examples
108
+
109
+ ```bash
110
+ # Generate README in current directory
111
+ readme-gen
112
+
113
+ # Preview without writing
114
+ readme-gen --preview
115
+
116
+ # Write to a custom file name
117
+ readme-gen --output DOCS.md
118
+
119
+ # Target a different project folder
120
+ readme-gen --dir ./my-other-project
121
+
122
+ # Overwrite without backup
123
+ readme-gen --overwrite
124
+ ```
125
+
126
+ ### Programmatic API
127
+
128
+ ```typescript
129
+ import { scan, generate, run } from 'readme-gen';
130
+
131
+ // Scan + generate in one step (writes README.md to disk)
132
+ const result = run('/path/to/project');
133
+ console.log(result.outPath); // absolute path to the written file
134
+ console.log(result.markdown); // the raw markdown string
135
+
136
+ // Or do it in two steps
137
+ const data = scan('/path/to/project');
138
+ const markdown = generate(data);
139
+ console.log(markdown);
140
+
141
+ // Access individual helpers
142
+ import { scanEnvFile, generateExampleValue, detectStack } from 'readme-gen';
143
+
144
+ const env = scanEnvFile('/path/to/project');
145
+ // { found: true, content: 'DB_URL=mongodb://localhost:27017/your_db\n...', sourceFile: '.env' }
146
+
147
+ const placeholder = generateExampleValue('DATABASE_URL');
148
+ // 'mongodb://localhost:27017/your_db'
149
+ ```
150
+
151
+ ---
152
+
153
+ ## πŸ” Environment Variable Masking
154
+
155
+ `readme-gen` scans `.env.example`, `.env.sample`, or `.env` (in that order of preference). Real values are **never** written to the README β€” instead, each key is matched against a set of patterns and replaced with a descriptive placeholder:
156
+
157
+ | Key pattern | Example output |
158
+ |-------------|----------------|
159
+ | `*PASSWORD*`, `*SECRET*`, `*PASS*` | `your_secret_here` |
160
+ | `*API_KEY*`, `*PRIVATE_KEY*` | `your_api_key_here` |
161
+ | `*TOKEN*` | `your_token_here` |
162
+ | `*DATABASE_URL*`, `*MONGO*` | `mongodb://localhost:27017/your_db` |
163
+ | `*REDIS_URL*` | `redis://localhost:6379` |
164
+ | `*POSTGRES*` | `postgresql://user:password@localhost:5432/your_db` |
165
+ | `PORT` | `3000` |
166
+ | `NODE_ENV` | `development` |
167
+
168
+ > ⚠️ Even if you accidentally paste a `.env` with real secrets, they will not appear in the output README.
169
+
170
+ ---
171
+
172
+ ## πŸ“œ Available Scripts
173
+
174
+ | Script | Command | Description |
175
+ |--------|---------|-------------|
176
+ | `npm run build` | `tsc --project tsconfig.json` | Compile TypeScript to `dist/` |
177
+ | `npm run dev` | `tsc --project tsconfig.json --watch` | Watch mode compilation |
178
+ | `npm start` | `node dist/bin/cli.js` | Run the compiled CLI |
179
+ | `npm test` | `ts-node --project tsconfig.json test/test.ts` | Run the test suite |
180
+ | `npm run typecheck` | `tsc --noEmit` | Type-check without emitting files |
181
+
182
+ ---
183
+
184
+ ## πŸ“ Project Structure
185
+
186
+ ```
187
+ readme-gen/
188
+ β”œβ”€β”€ src/
189
+ β”‚ β”œβ”€β”€ types.ts # All TypeScript interfaces and type definitions
190
+ β”‚ β”œβ”€β”€ scanner.ts # Project scanner (package.json, stack, env, configs)
191
+ β”‚ β”œβ”€β”€ generator.ts # Markdown section builders
192
+ β”‚ └── index.ts # Public API (scan, generate, run) + re-exports
193
+ β”œβ”€β”€ bin/
194
+ β”‚ └── cli.ts # CLI entry point β€” argument parsing and file I/O
195
+ β”œβ”€β”€ demo/
196
+ β”‚ └── index.html # Interactive browser demo β€” open and try it locally
197
+ β”œβ”€β”€ test/
198
+ β”‚ └── test.ts # Test suite (20 assertions, zero test framework deps)
199
+ β”œβ”€β”€ dist/ # Compiled output (generated by `npm run build`)
200
+ β”œβ”€β”€ package.json
201
+ β”œβ”€β”€ tsconfig.json
202
+ └── README.md
203
+ ```
204
+
205
+ ---
206
+
207
+ ## 🌐 Demo
208
+
209
+ Open `demo/index.html` directly in your browser β€” no server needed. Fill in your project details, select your stack, paste a `.env`, and click **Generate README** to see a live preview with masked env values. You can download the result as `README.md`.
210
+
211
+ ---
212
+
213
+ ## πŸ“‘ API Reference
214
+
215
+ ### `scan(projectRoot?: string): ProjectData`
216
+
217
+ Scans the given directory (default: `process.cwd()`) and returns a `ProjectData` object.
218
+
219
+ ### `generate(data: ProjectData): string`
220
+
221
+ Takes `ProjectData` and returns a complete README markdown string.
222
+
223
+ ### `run(projectRoot?: string, options?: RunOptions): RunResult`
224
+
225
+ Combines `scan` + `generate` + file write in one call. Backs up any existing README.
226
+
227
+ ```typescript
228
+ interface RunOptions {
229
+ output?: string; // default: 'README.md'
230
+ overwrite?: boolean; // default: false
231
+ }
232
+
233
+ interface RunResult {
234
+ outPath: string;
235
+ data: ProjectData;
236
+ markdown: string;
237
+ }
238
+ ```
239
+
240
+ ### `generateExampleValue(key: string): string`
241
+
242
+ Returns a safe placeholder value for the given env variable key name.
243
+
244
+ ### `scanEnvFile(projectRoot: string): EnvInfo`
245
+
246
+ Reads `.env.example` / `.env.sample` / `.env` and returns masked content.
247
+
248
+ ### `detectStack(pkg: PackageJson | null): string[]`
249
+
250
+ Returns an array of detected framework/library names from `package.json` deps.
251
+
252
+ ---
253
+
254
+ ## 🀝 Contributing
255
+
256
+ Contributions are welcome! Please follow these steps:
257
+
258
+ 1. Fork the repository
259
+ 2. Create your feature branch: `git checkout -b feature/amazing-feature`
260
+ 3. Commit your changes: `git commit -m "feat: add amazing feature"`
261
+ 4. Push to the branch: `git push origin feature/amazing-feature`
262
+ 5. Open a Pull Request
263
+
264
+ Please make sure to run `npm run typecheck` and `npm test` before submitting.
265
+
266
+ ---
267
+
268
+ ## πŸ“„ License
269
+
270
+ This project is licensed under the **MIT License** β€” see the [LICENSE](LICENSE) file for details.
@@ -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":["../../bin/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ var _a, _b, _c, _d;
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const scanner_1 = require("../src/scanner");
11
+ const generator_1 = require("../src/generator");
12
+ // ── Arg parsing ───────────────────────────────────────────────────────────────
13
+ const args = process.argv.slice(2);
14
+ function getFlag(name) {
15
+ var _a;
16
+ const idx = args.indexOf(name);
17
+ if (idx !== -1 && idx + 1 < args.length)
18
+ return (_a = args[idx + 1]) !== null && _a !== void 0 ? _a : null;
19
+ return null;
20
+ }
21
+ function hasFlag(...names) {
22
+ return names.some((n) => args.includes(n));
23
+ }
24
+ const flags = {
25
+ help: hasFlag("--help", "-h"),
26
+ version: hasFlag("--version", "-v"),
27
+ output: (_b = (_a = getFlag("--output")) !== null && _a !== void 0 ? _a : getFlag("-o")) !== null && _b !== void 0 ? _b : "README.md",
28
+ overwrite: hasFlag("--overwrite", "-f"),
29
+ preview: hasFlag("--preview", "-p"),
30
+ dir: (_c = getFlag("--dir")) !== null && _c !== void 0 ? _c : process.cwd(),
31
+ };
32
+ // ── Help ──────────────────────────────────────────────────────────────────────
33
+ if (flags.help) {
34
+ console.log(`
35
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
36
+ β”‚ smartreadme πŸ“„ β”‚
37
+ β”‚ Generate professional README files β”‚
38
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
39
+
40
+ Usage:
41
+ smartreadme [options]
42
+
43
+ Options:
44
+ -h, --help Show this help message
45
+ -v, --version Show version number
46
+ -o, --output FILE Output file name (default: README.md)
47
+ -f, --overwrite Overwrite existing README without backup
48
+ -p, --preview Print README to terminal, no file written
49
+ --dir PATH Target project directory (default: cwd)
50
+
51
+ Examples:
52
+ smartreadme
53
+ smartreadme --output DOCS.md
54
+ smartreadme --dir ./my-project --overwrite
55
+ smartreadme --preview
56
+ `);
57
+ process.exit(0);
58
+ }
59
+ // ── Version ───────────────────────────────────────────────────────────────────
60
+ if (flags.version) {
61
+ // Walk up from dist/bin/ to find package.json
62
+ const pkgPath = path_1.default.join(__dirname, "..", "package.json");
63
+ try {
64
+ const pkg = JSON.parse(fs_1.default.readFileSync(pkgPath, "utf-8"));
65
+ console.log(`smartreadme v${pkg.version}`);
66
+ }
67
+ catch {
68
+ console.error("❌ Could not read version from package.json");
69
+ process.exit(1);
70
+ }
71
+ process.exit(0);
72
+ }
73
+ // ── Main ──────────────────────────────────────────────────────────────────────
74
+ console.log("\n πŸ“‘ smartreadme β€” Scanning your project...\n");
75
+ const projectRoot = path_1.default.resolve(flags.dir);
76
+ if (!fs_1.default.existsSync(projectRoot)) {
77
+ console.error(` ❌ Directory not found: ${projectRoot}`);
78
+ process.exit(1);
79
+ }
80
+ const data = (0, scanner_1.scanProject)(projectRoot);
81
+ console.log(` βœ… Project : ${data.name} (${data.projectType})`);
82
+ if (data.stack.length > 0) {
83
+ console.log(` βœ… Stack : ${data.stack.join(", ")}`);
84
+ }
85
+ if (data.envInfo.found) {
86
+ console.log(` βœ… Env file: ${(_d = data.envInfo.sourceFile) !== null && _d !== void 0 ? _d : ".env"} (values replaced with examples)`);
87
+ }
88
+ if (data.configs.docker) {
89
+ console.log(" βœ… Docker config detected");
90
+ }
91
+ console.log("");
92
+ const markdown = (0, generator_1.generateReadme)(data);
93
+ // Preview mode β€” just print, no file write
94
+ if (flags.preview) {
95
+ console.log("─".repeat(60));
96
+ console.log(markdown);
97
+ console.log("─".repeat(60));
98
+ console.log("\n ℹ️ Preview mode β€” no file written.\n");
99
+ process.exit(0);
100
+ }
101
+ const outPath = path_1.default.join(projectRoot, flags.output);
102
+ if (fs_1.default.existsSync(outPath) && !flags.overwrite) {
103
+ const backup = outPath.replace(/\.md$/i, `.backup.${Date.now()}.md`);
104
+ try {
105
+ fs_1.default.renameSync(outPath, backup);
106
+ console.log(` πŸ“¦ Existing README backed up to: ${path_1.default.basename(backup)}`);
107
+ }
108
+ catch (err) {
109
+ console.error(` ❌ Failed to backup existing README: ${err instanceof Error ? err.message : String(err)}`);
110
+ process.exit(1);
111
+ }
112
+ }
113
+ try {
114
+ fs_1.default.writeFileSync(outPath, markdown, "utf-8");
115
+ }
116
+ catch (err) {
117
+ console.error(` ❌ Failed to write README: ${err instanceof Error ? err.message : String(err)}`);
118
+ process.exit(1);
119
+ }
120
+ console.log(` ✨ README generated successfully β†’ ${flags.output}`);
121
+ console.log(" πŸ“ Don't forget to fill in the placeholder sections!\n");
122
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";;;;;;;AACA,4CAAoB;AACpB,gDAAwB;AACxB,4CAA6C;AAC7C,gDAAkD;AAElD,iFAAiF;AAEjF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,SAAS,OAAO,CAAC,IAAY;;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,mCAAI,IAAI,CAAC;IACtE,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,GAAG,KAAe;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,KAAK,GAAG;IACV,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;IACnC,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,UAAU,CAAC,mCAAI,OAAO,CAAC,IAAI,CAAC,mCAAI,WAAW;IAC3D,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;IACnC,GAAG,EAAE,MAAA,OAAO,CAAC,OAAO,CAAC,mCAAI,OAAO,CAAC,GAAG,EAAE;CACzC,CAAC;AAEF,iFAAiF;AAEjF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBf,CAAC,CAAC;IACC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,iFAAiF;AAEjF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IAChB,8CAA8C;IAC9C,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAEvD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,iFAAiF;AAEjF,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;AAE/D,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE5C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,WAAW,CAAC,CAAC;AAEtC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AAEhE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,GAAG,CACP,iBAAiB,MAAA,IAAI,CAAC,OAAO,CAAC,UAAU,mCAAI,MAAM,kCAAkC,CACvF,CAAC;AACN,CAAC;AAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC9C,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEhB,MAAM,QAAQ,GAAG,IAAA,0BAAc,EAAC,IAAI,CAAC,CAAC;AAEtC,2CAA2C;AAC3C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAErD,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrE,IAAI,CAAC;QACD,YAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,sCAAsC,cAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,yCAAyC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,CAAC;IACD,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,uCAAuC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AACnE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ProjectData } from "./types";
2
+ /**
3
+ * Generates a professional README.md from scanned project data.
4
+ */
5
+ export declare function generateReadme(data: ProjectData): string;
6
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AAExD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAmBxD"}