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.
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateReadme = generateReadme;
4
+ /**
5
+ * Generates a professional README.md from scanned project data.
6
+ */
7
+ function generateReadme(data) {
8
+ const sections = [
9
+ buildHeader(data),
10
+ buildBadges(data),
11
+ buildDescription(data),
12
+ buildFeatures(),
13
+ buildStack(data),
14
+ buildPrerequisites(data),
15
+ buildInstallation(data),
16
+ buildEnvSection(data),
17
+ buildUsage(data),
18
+ buildScripts(data),
19
+ buildDocker(data),
20
+ buildApiReference(data),
21
+ buildContributing(),
22
+ buildLicense(data),
23
+ ].filter((s) => s.length > 0);
24
+ return sections.join("\n\n---\n\n");
25
+ }
26
+ // ── Section builders ──────────────────────────────────────────────────────────
27
+ function buildHeader(data) {
28
+ const topThree = data.stack.slice(0, 3).join(", ") || "Node.js";
29
+ const subtitle = data.description
30
+ ? `> ${data.description}`
31
+ : `> A ${data.projectType} built with ${topThree}.`;
32
+ return [`# ${formatName(data.name)}`, "", subtitle].join("\n");
33
+ }
34
+ function buildBadges(data) {
35
+ var _a;
36
+ const badges = [];
37
+ if (((_a = data.pkg) === null || _a === void 0 ? void 0 : _a.name) && !data.pkg.private) {
38
+ const encoded = encodeURIComponent(data.name);
39
+ badges.push(`[![npm version](https://badge.fury.io/js/${encoded}.svg)](https://www.npmjs.com/package/${data.name})`, `[![npm downloads](https://img.shields.io/npm/dm/${data.name}.svg)](https://www.npmjs.com/package/${data.name})`);
40
+ }
41
+ badges.push(`[![License: ${data.license}](https://img.shields.io/badge/License-${encodeURIComponent(data.license)}-yellow.svg)](https://opensource.org/licenses/${data.license})`);
42
+ const stackBadges = {
43
+ React: "![React](https://img.shields.io/badge/React-20232A?style=flat&logo=react&logoColor=61DAFB)",
44
+ Vue: "![Vue](https://img.shields.io/badge/Vue.js-35495E?style=flat&logo=vue.js&logoColor=4FC08D)",
45
+ "Next.js": "![Next.js](https://img.shields.io/badge/Next.js-000000?style=flat&logo=next.js&logoColor=white)",
46
+ TypeScript: "![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat&logo=typescript&logoColor=white)",
47
+ Express: "![Express](https://img.shields.io/badge/Express-000000?style=flat&logo=express&logoColor=white)",
48
+ MongoDB: "![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=flat&logo=mongodb&logoColor=white)",
49
+ PostgreSQL: "![PostgreSQL](https://img.shields.io/badge/PostgreSQL-316192?style=flat&logo=postgresql&logoColor=white)",
50
+ Tailwind: "![Tailwind](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=flat&logo=tailwind-css&logoColor=white)",
51
+ Redis: "![Redis](https://img.shields.io/badge/Redis-DC382D?style=flat&logo=redis&logoColor=white)",
52
+ NestJS: "![NestJS](https://img.shields.io/badge/NestJS-E0234E?style=flat&logo=nestjs&logoColor=white)",
53
+ GraphQL: "![GraphQL](https://img.shields.io/badge/GraphQL-E10098?style=flat&logo=graphql&logoColor=white)",
54
+ Docker: "![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat&logo=docker&logoColor=white)",
55
+ };
56
+ for (const tech of data.stack) {
57
+ const badge = stackBadges[tech];
58
+ if (badge)
59
+ badges.push(badge);
60
+ }
61
+ if (data.configs.docker) {
62
+ const dockerBadge = stackBadges["Docker"];
63
+ if (dockerBadge && !data.stack.includes("Docker"))
64
+ badges.push(dockerBadge);
65
+ }
66
+ return badges.join(" ");
67
+ }
68
+ function buildDescription(data) {
69
+ var _a;
70
+ const topStack = data.stack.length > 0 ? ` built using ${data.stack.join(", ")}` : "";
71
+ const body = (_a = data.description) !== null && _a !== void 0 ? _a : `**${formatName(data.name)}** is a ${data.projectType.toLowerCase()}${topStack}. Add a more detailed description here.`;
72
+ return ["## 📋 About", "", body].join("\n");
73
+ }
74
+ function buildFeatures() {
75
+ return [
76
+ "## ✨ Features",
77
+ "",
78
+ "- ✅ Feature one — describe it here",
79
+ "- ✅ Feature two — describe it here",
80
+ "- ✅ Feature three — describe it here",
81
+ "- 🚧 Upcoming feature — coming soon",
82
+ ].join("\n");
83
+ }
84
+ function buildStack(data) {
85
+ if (data.stack.length === 0)
86
+ return "";
87
+ return [
88
+ "## 🛠️ Tech Stack",
89
+ "",
90
+ ...data.stack.map((t) => `- **${t}**`),
91
+ ].join("\n");
92
+ }
93
+ function buildPrerequisites(data) {
94
+ var _a, _b, _c, _d;
95
+ const deps = {
96
+ ...((_b = (_a = data.pkg) === null || _a === void 0 ? void 0 : _a.dependencies) !== null && _b !== void 0 ? _b : {}),
97
+ ...((_d = (_c = data.pkg) === null || _c === void 0 ? void 0 : _c.devDependencies) !== null && _d !== void 0 ? _d : {}),
98
+ };
99
+ const lines = [
100
+ "## 📦 Prerequisites",
101
+ "",
102
+ "Make sure you have the following installed:",
103
+ "",
104
+ "- [Node.js](https://nodejs.org/) v18 or higher",
105
+ "- [npm](https://www.npmjs.com/) v9 or higher",
106
+ ];
107
+ if (data.configs.docker)
108
+ lines.push("- [Docker](https://www.docker.com/) & Docker Compose");
109
+ if (deps["mongodb"] || deps["mongoose"])
110
+ lines.push("- [MongoDB](https://www.mongodb.com/) instance");
111
+ if (deps["pg"] || deps["postgres"])
112
+ lines.push("- [PostgreSQL](https://www.postgresql.org/) instance");
113
+ if (deps["mysql"] || deps["mysql2"])
114
+ lines.push("- [MySQL](https://www.mysql.com/) instance");
115
+ if (deps["redis"] || deps["ioredis"])
116
+ lines.push("- [Redis](https://redis.io/) instance");
117
+ return lines.join("\n");
118
+ }
119
+ function buildInstallation(data) {
120
+ var _a;
121
+ const repoUrl = data.repository
122
+ ? data.repository.replace("git+", "").replace(/\.git$/, "")
123
+ : `https://github.com/yourusername/${data.name}`;
124
+ const lines = [
125
+ "## 🚀 Getting Started",
126
+ "",
127
+ "### Installation",
128
+ "",
129
+ "```bash",
130
+ "# Clone the repository",
131
+ `git clone ${repoUrl}.git`,
132
+ `cd ${data.name}`,
133
+ "",
134
+ "# Install dependencies",
135
+ "npm install",
136
+ "```",
137
+ ];
138
+ if (data.projectType === "CLI Tool" && ((_a = data.pkg) === null || _a === void 0 ? void 0 : _a.name)) {
139
+ lines.push("", "### Or install globally via npm", "", "```bash", `npm install -g ${data.name}`, "```");
140
+ }
141
+ return lines.join("\n");
142
+ }
143
+ function buildEnvSection(data) {
144
+ if (!data.envInfo.found || !data.envInfo.content)
145
+ return "";
146
+ return [
147
+ "## 🔐 Environment Variables",
148
+ "",
149
+ "Copy the example environment file and fill in your values:",
150
+ "",
151
+ "```bash",
152
+ "cp .env.example .env",
153
+ "```",
154
+ "",
155
+ "Then edit `.env` with your configuration:",
156
+ "",
157
+ "```env",
158
+ data.envInfo.content,
159
+ "```",
160
+ "",
161
+ "> ⚠️ **Never commit your real `.env` file.** Make sure `.env` is in your `.gitignore`.",
162
+ ].join("\n");
163
+ }
164
+ function buildUsage(data) {
165
+ const devCmd = data.scripts["dev"]
166
+ ? "npm run dev"
167
+ : data.scripts["start"]
168
+ ? "npm start"
169
+ : "npm run serve";
170
+ const lines = ["## 💻 Usage", ""];
171
+ if (data.projectType === "CLI Tool") {
172
+ lines.push("```bash", `${data.name} [options]`, "", "# Show help", `${data.name} --help`, "```");
173
+ }
174
+ else if (data.projectType === "Backend API") {
175
+ lines.push("```bash", "# Start the server", devCmd, "```", "", "The server will be running at `http://localhost:3000`", "", "### Example API Request", "", "```bash", "curl -X GET http://localhost:3000/api/health", "```");
176
+ }
177
+ else if (data.projectType === "Node.js Library") {
178
+ const camel = camelCase(data.name);
179
+ lines.push("```typescript", `import ${camel} from '${data.name}';`, "", "// Example usage", `const result = ${camel}.doSomething();`, "console.log(result);", "```");
180
+ }
181
+ else {
182
+ lines.push("```bash", "# Start development server", devCmd, "```", "", "Open [http://localhost:3000](http://localhost:3000) in your browser.");
183
+ }
184
+ return lines.join("\n");
185
+ }
186
+ const SCRIPT_DESCRIPTIONS = {
187
+ dev: "Start development server with hot reload",
188
+ start: "Start the production server",
189
+ build: "Build the project for production",
190
+ test: "Run the test suite",
191
+ lint: "Lint and check code style",
192
+ format: "Format code with Prettier",
193
+ preview: "Preview the production build locally",
194
+ deploy: "Deploy to production",
195
+ seed: "Seed the database with sample data",
196
+ migrate: "Run database migrations",
197
+ generate: "Generate code / types",
198
+ typecheck: "Run TypeScript type checking",
199
+ };
200
+ function buildScripts(data) {
201
+ const entries = Object.entries(data.scripts);
202
+ if (entries.length === 0)
203
+ return "";
204
+ const rows = entries.map(([name, cmd]) => {
205
+ var _a;
206
+ const desc = (_a = SCRIPT_DESCRIPTIONS[name]) !== null && _a !== void 0 ? _a : "Run this script";
207
+ return `| \`npm run ${name}\` | \`${cmd}\` | ${desc} |`;
208
+ });
209
+ return [
210
+ "## 📜 Available Scripts",
211
+ "",
212
+ "| Script | Command | Description |",
213
+ "|--------|---------|-------------|",
214
+ ...rows,
215
+ ].join("\n");
216
+ }
217
+ function buildDocker(data) {
218
+ if (!data.configs.docker)
219
+ return "";
220
+ return [
221
+ "## 🐳 Docker",
222
+ "",
223
+ "```bash",
224
+ "# Build and start containers",
225
+ "docker-compose up --build",
226
+ "",
227
+ "# Run in detached mode",
228
+ "docker-compose up -d",
229
+ "",
230
+ "# Stop containers",
231
+ "docker-compose down",
232
+ "```",
233
+ ].join("\n");
234
+ }
235
+ function buildApiReference(data) {
236
+ const apiTypes = ["Backend API", "Node.js Library"];
237
+ if (!apiTypes.includes(data.projectType))
238
+ return "";
239
+ return [
240
+ "## 📡 API Reference",
241
+ "",
242
+ "### Base URL",
243
+ "",
244
+ "```",
245
+ "http://localhost:3000/api",
246
+ "```",
247
+ "",
248
+ "### Endpoints",
249
+ "",
250
+ "| Method | Endpoint | Description |",
251
+ "|--------|----------|-------------|",
252
+ "| `GET` | `/health` | Health check |",
253
+ "| `GET` | `/your-endpoint` | Add your endpoints here |",
254
+ "| `POST` | `/your-endpoint` | Add your endpoints here |",
255
+ "",
256
+ "> 📘 Expand this section as your API grows.",
257
+ ].join("\n");
258
+ }
259
+ function buildContributing() {
260
+ return [
261
+ "## 🤝 Contributing",
262
+ "",
263
+ "Contributions are welcome! Please follow these steps:",
264
+ "",
265
+ "1. Fork the repository",
266
+ "2. Create your feature branch: `git checkout -b feature/amazing-feature`",
267
+ '3. Commit your changes: `git commit -m "feat: add amazing feature"`',
268
+ "4. Push to the branch: `git push origin feature/amazing-feature`",
269
+ "5. Open a Pull Request",
270
+ "",
271
+ "Please make sure to update tests as appropriate.",
272
+ ].join("\n");
273
+ }
274
+ function buildLicense(data) {
275
+ var _a, _b;
276
+ const authorName = typeof data.author === "string"
277
+ ? data.author
278
+ : ((_b = (_a = data.author) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : null);
279
+ const lines = [
280
+ "## 📄 License",
281
+ "",
282
+ `This project is licensed under the **${data.license} License** — see the [LICENSE](LICENSE) file for details.`,
283
+ ];
284
+ if (authorName) {
285
+ lines.push("", `© ${new Date().getFullYear()} ${authorName}`);
286
+ }
287
+ return lines.join("\n");
288
+ }
289
+ // ── Helpers ───────────────────────────────────────────────────────────────────
290
+ function formatName(name) {
291
+ return name.replace(/[-_]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
292
+ }
293
+ function camelCase(str) {
294
+ return str.replace(/[-_](.)/g, (_, c) => c.toUpperCase());
295
+ }
296
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { scanProject } from "./scanner";
2
+ import { generateReadme } from "./generator";
3
+ import type { ProjectData, RunOptions, RunResult } from "./types";
4
+ export type { ProjectData, RunOptions, RunResult };
5
+ export type { PackageJson, EnvInfo, DetectedConfigs, ProjectType, } from "./types";
6
+ export { scanProject, generateReadme };
7
+ export { generateExampleValue, detectStack, scanEnvFile } from "./scanner";
8
+ /**
9
+ * Scan a project directory and return structured project data.
10
+ * @param projectRoot - Root directory to scan (defaults to cwd)
11
+ */
12
+ export declare function scan(projectRoot?: string): ProjectData;
13
+ /**
14
+ * Generate README markdown string from project data.
15
+ * @param data - Project data returned by scan()
16
+ */
17
+ export declare function generate(data: ProjectData): string;
18
+ /**
19
+ * Scan a project and write README.md to disk.
20
+ * Backs up any existing README before overwriting.
21
+ *
22
+ * @param projectRoot - Root directory to scan (defaults to cwd)
23
+ * @param options - { output, overwrite }
24
+ */
25
+ export declare function run(projectRoot?: string, options?: RunOptions): RunResult;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAElE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnD,YAAY,EACR,WAAW,EACX,OAAO,EACP,eAAe,EACf,WAAW,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,IAAI,CAAC,WAAW,GAAE,MAAsB,GAAG,WAAW,CAErE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CACf,WAAW,GAAE,MAAsB,EACnC,OAAO,GAAE,UAAe,GACzB,SAAS,CAkBX"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.scanEnvFile = exports.detectStack = exports.generateExampleValue = exports.generateReadme = exports.scanProject = void 0;
7
+ exports.scan = scan;
8
+ exports.generate = generate;
9
+ exports.run = run;
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const scanner_1 = require("./scanner");
13
+ Object.defineProperty(exports, "scanProject", { enumerable: true, get: function () { return scanner_1.scanProject; } });
14
+ const generator_1 = require("./generator");
15
+ Object.defineProperty(exports, "generateReadme", { enumerable: true, get: function () { return generator_1.generateReadme; } });
16
+ var scanner_2 = require("./scanner");
17
+ Object.defineProperty(exports, "generateExampleValue", { enumerable: true, get: function () { return scanner_2.generateExampleValue; } });
18
+ Object.defineProperty(exports, "detectStack", { enumerable: true, get: function () { return scanner_2.detectStack; } });
19
+ Object.defineProperty(exports, "scanEnvFile", { enumerable: true, get: function () { return scanner_2.scanEnvFile; } });
20
+ /**
21
+ * Scan a project directory and return structured project data.
22
+ * @param projectRoot - Root directory to scan (defaults to cwd)
23
+ */
24
+ function scan(projectRoot = process.cwd()) {
25
+ return (0, scanner_1.scanProject)(projectRoot);
26
+ }
27
+ /**
28
+ * Generate README markdown string from project data.
29
+ * @param data - Project data returned by scan()
30
+ */
31
+ function generate(data) {
32
+ return (0, generator_1.generateReadme)(data);
33
+ }
34
+ /**
35
+ * Scan a project and write README.md to disk.
36
+ * Backs up any existing README before overwriting.
37
+ *
38
+ * @param projectRoot - Root directory to scan (defaults to cwd)
39
+ * @param options - { output, overwrite }
40
+ */
41
+ function run(projectRoot = process.cwd(), options = {}) {
42
+ const { output = "README.md", overwrite = false } = options;
43
+ const data = scan(projectRoot);
44
+ const markdown = generate(data);
45
+ const outPath = path_1.default.join(projectRoot, output);
46
+ if (fs_1.default.existsSync(outPath) && !overwrite) {
47
+ const ts = Date.now();
48
+ const backup = outPath.replace(/\.md$/i, `.backup.${ts}.md`);
49
+ fs_1.default.renameSync(outPath, backup);
50
+ console.log(`📦 Existing README backed up to: ${path_1.default.basename(backup)}`);
51
+ }
52
+ fs_1.default.writeFileSync(outPath, markdown, "utf-8");
53
+ return { outPath, data, markdown };
54
+ }
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAoBA,oBAEC;AAMD,4BAEC;AASD,kBAqBC;AA5DD,4CAAoB;AACpB,gDAAwB;AACxB,uCAAwC;AAW/B,4FAXA,qBAAW,OAWA;AAVpB,2CAA6C;AAUvB,+FAVb,0BAAc,OAUa;AACpC,qCAA2E;AAAlE,+GAAA,oBAAoB,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AAEvD;;;GAGG;AACH,SAAgB,IAAI,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IACpD,OAAO,IAAA,qBAAW,EAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,IAAiB;IACtC,OAAO,IAAA,0BAAc,EAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,GAAG,CACf,cAAsB,OAAO,CAAC,GAAG,EAAE,EACnC,UAAsB,EAAE;IAExB,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE5D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAC7D,YAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CACP,oCAAoC,cAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAC9D,CAAC;IACN,CAAC;IAED,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { PackageJson, EnvInfo, DetectedConfigs, ProjectType, ProjectData } from "./types";
2
+ /**
3
+ * Reads and parses package.json from the target project root.
4
+ */
5
+ export declare function readPackageJson(projectRoot: string): PackageJson | null;
6
+ /**
7
+ * Detects the tech stack / frameworks used based on package.json dependencies.
8
+ */
9
+ export declare function detectStack(pkg: PackageJson | null): string[];
10
+ /**
11
+ * Generate a safe example value based on the env key name.
12
+ */
13
+ export declare function generateExampleValue(key: string): string;
14
+ /**
15
+ * Scans .env / .env.example and returns safe example env vars.
16
+ */
17
+ export declare function scanEnvFile(projectRoot: string): EnvInfo;
18
+ /**
19
+ * Detect the broad project type from package.json structure.
20
+ * Note: projectRoot param kept for future use (e.g. checking file structure).
21
+ */
22
+ export declare function detectProjectType(_projectRoot: string, pkg: PackageJson | null): ProjectType;
23
+ /**
24
+ * Extract non-internal scripts from package.json.
25
+ */
26
+ export declare function extractScripts(pkg: PackageJson | null): Record<string, string>;
27
+ /**
28
+ * Detect which config files exist in the project root.
29
+ */
30
+ export declare function detectConfigs(projectRoot: string): DetectedConfigs;
31
+ /**
32
+ * Resolve the repository URL from various package.json repository formats.
33
+ */
34
+ export declare function resolveRepository(repository: PackageJson["repository"]): string | null;
35
+ /**
36
+ * Main scanner — aggregates all project information.
37
+ */
38
+ export declare function scanProject(projectRoot?: string): ProjectData;
39
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,WAAW,EACX,OAAO,EACP,eAAe,EACf,WAAW,EACX,WAAW,EACd,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQvE;AAsCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,EAAE,CAW7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqDxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CA6BxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,WAAW,GAAG,IAAI,GACxB,WAAW,CAqCb;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,GAAG,EAAE,WAAW,GAAG,IAAI,GACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CA2BlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,GACtC,MAAM,GAAG,IAAI,CAIf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,GAAE,MAAsB,GAAG,WAAW,CAwB5E"}