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,271 @@
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.readPackageJson = readPackageJson;
7
+ exports.detectStack = detectStack;
8
+ exports.generateExampleValue = generateExampleValue;
9
+ exports.scanEnvFile = scanEnvFile;
10
+ exports.detectProjectType = detectProjectType;
11
+ exports.extractScripts = extractScripts;
12
+ exports.detectConfigs = detectConfigs;
13
+ exports.resolveRepository = resolveRepository;
14
+ exports.scanProject = scanProject;
15
+ const fs_1 = __importDefault(require("fs"));
16
+ const path_1 = __importDefault(require("path"));
17
+ /**
18
+ * Reads and parses package.json from the target project root.
19
+ */
20
+ function readPackageJson(projectRoot) {
21
+ const pkgPath = path_1.default.join(projectRoot, "package.json");
22
+ if (!fs_1.default.existsSync(pkgPath))
23
+ return null;
24
+ try {
25
+ return JSON.parse(fs_1.default.readFileSync(pkgPath, "utf-8"));
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ const STACK_MAP = {
32
+ React: ["react"],
33
+ Vue: ["vue"],
34
+ Angular: ["@angular/core"],
35
+ "Next.js": ["next"],
36
+ "Nuxt.js": ["nuxt"],
37
+ Svelte: ["svelte"],
38
+ Express: ["express"],
39
+ Fastify: ["fastify"],
40
+ Koa: ["koa"],
41
+ NestJS: ["@nestjs/core"],
42
+ TypeScript: ["typescript"],
43
+ Tailwind: ["tailwindcss"],
44
+ Prisma: ["prisma", "@prisma/client"],
45
+ MongoDB: ["mongoose", "mongodb"],
46
+ PostgreSQL: ["pg", "postgres"],
47
+ MySQL: ["mysql", "mysql2"],
48
+ Redis: ["redis", "ioredis"],
49
+ GraphQL: ["graphql", "apollo-server"],
50
+ Jest: ["jest"],
51
+ Vitest: ["vitest"],
52
+ Vite: ["vite"],
53
+ Webpack: ["webpack"],
54
+ Electron: ["electron"],
55
+ "Socket.io": ["socket.io"],
56
+ Stripe: ["stripe"],
57
+ JWT: ["jsonwebtoken"],
58
+ Zod: ["zod"],
59
+ "React Query": ["@tanstack/react-query"],
60
+ Zustand: ["zustand"],
61
+ Redux: ["redux", "@reduxjs/toolkit"],
62
+ Drizzle: ["drizzle-orm"],
63
+ tRPC: ["@trpc/server"],
64
+ Hono: ["hono"],
65
+ };
66
+ /**
67
+ * Detects the tech stack / frameworks used based on package.json dependencies.
68
+ */
69
+ function detectStack(pkg) {
70
+ var _a, _b;
71
+ if (!pkg)
72
+ return [];
73
+ const allDeps = {
74
+ ...((_a = pkg.dependencies) !== null && _a !== void 0 ? _a : {}),
75
+ ...((_b = pkg.devDependencies) !== null && _b !== void 0 ? _b : {}),
76
+ };
77
+ return Object.entries(STACK_MAP)
78
+ .filter(([, packages]) => packages.some((p) => p in allDeps))
79
+ .map(([name]) => name);
80
+ }
81
+ /**
82
+ * Generate a safe example value based on the env key name.
83
+ */
84
+ function generateExampleValue(key) {
85
+ const lower = key.toLowerCase();
86
+ if (lower.includes("secret") ||
87
+ lower.includes("password") ||
88
+ lower.includes("pass")) {
89
+ return "your_secret_here";
90
+ }
91
+ if ((lower.includes("api") || lower.includes("private")) &&
92
+ lower.includes("key")) {
93
+ return "your_api_key_here";
94
+ }
95
+ if (lower.includes("token"))
96
+ return "your_token_here";
97
+ if (lower.includes("url") || lower.includes("uri")) {
98
+ if (lower.includes("database") ||
99
+ lower.includes("db") ||
100
+ lower.includes("mongo")) {
101
+ return "mongodb://localhost:27017/your_db";
102
+ }
103
+ if (lower.includes("redis"))
104
+ return "redis://localhost:6379";
105
+ if (lower.includes("postgres") || lower.includes("pg")) {
106
+ return "postgresql://user:password@localhost:5432/your_db";
107
+ }
108
+ return "https://your-url-here.com";
109
+ }
110
+ if (lower.includes("host"))
111
+ return "localhost";
112
+ if (lower.includes("port"))
113
+ return "3000";
114
+ if (lower.includes("email") || lower.includes("mail"))
115
+ return "your@email.com";
116
+ if (lower.includes("name"))
117
+ return "your_name_here";
118
+ if (lower.includes("id"))
119
+ return "your_id_here";
120
+ if (lower.includes("debug") ||
121
+ lower.includes("enable") ||
122
+ lower.includes("disable")) {
123
+ return "false";
124
+ }
125
+ if (lower.includes("env") || lower.includes("mode"))
126
+ return "development";
127
+ if (lower.includes("expire") ||
128
+ lower.includes("ttl") ||
129
+ lower.includes("timeout")) {
130
+ return "3600";
131
+ }
132
+ return "your_value_here";
133
+ }
134
+ /**
135
+ * Scans .env / .env.example and returns safe example env vars.
136
+ */
137
+ function scanEnvFile(projectRoot) {
138
+ const envFiles = [".env.example", ".env.sample", ".env"];
139
+ for (const envFile of envFiles) {
140
+ const envPath = path_1.default.join(projectRoot, envFile);
141
+ if (!fs_1.default.existsSync(envPath))
142
+ continue;
143
+ const lines = fs_1.default.readFileSync(envPath, "utf-8").split("\n");
144
+ const result = [];
145
+ for (const line of lines) {
146
+ const trimmed = line.trim();
147
+ if (!trimmed || trimmed.startsWith("#")) {
148
+ result.push(line);
149
+ continue;
150
+ }
151
+ const eqIndex = trimmed.indexOf("=");
152
+ if (eqIndex === -1) {
153
+ result.push(line);
154
+ continue;
155
+ }
156
+ const key = trimmed.substring(0, eqIndex).trim();
157
+ result.push(`${key}=${generateExampleValue(key)}`);
158
+ }
159
+ return { found: true, content: result.join("\n"), sourceFile: envFile };
160
+ }
161
+ return { found: false };
162
+ }
163
+ /**
164
+ * Detect the broad project type from package.json structure.
165
+ * Note: projectRoot param kept for future use (e.g. checking file structure).
166
+ */
167
+ function detectProjectType(_projectRoot, pkg) {
168
+ var _a, _b, _c;
169
+ if (!pkg)
170
+ return "Node.js Project";
171
+ const deps = {
172
+ ...((_a = pkg.dependencies) !== null && _a !== void 0 ? _a : {}),
173
+ ...((_b = pkg.devDependencies) !== null && _b !== void 0 ? _b : {}),
174
+ };
175
+ if (pkg.bin)
176
+ return "CLI Tool";
177
+ if (deps["electron"])
178
+ return "Desktop App";
179
+ if (deps["next"] || deps["nuxt"])
180
+ return "Full-Stack Web App";
181
+ if (deps["react"] ||
182
+ deps["vue"] ||
183
+ deps["svelte"] ||
184
+ deps["@angular/core"]) {
185
+ return "Frontend Web App";
186
+ }
187
+ if (Object.keys(deps).some((d) => [
188
+ "express",
189
+ "fastify",
190
+ "koa",
191
+ "hapi",
192
+ "@nestjs/core",
193
+ "hono",
194
+ ].includes(d))) {
195
+ return "Backend API";
196
+ }
197
+ if ((_c = pkg.keywords) === null || _c === void 0 ? void 0 : _c.includes("cli"))
198
+ return "CLI Tool";
199
+ if (pkg.main)
200
+ return "Node.js Library";
201
+ return "Node.js Project";
202
+ }
203
+ /**
204
+ * Extract non-internal scripts from package.json.
205
+ */
206
+ function extractScripts(pkg) {
207
+ if (!(pkg === null || pkg === void 0 ? void 0 : pkg.scripts))
208
+ return {};
209
+ const ignore = new Set([
210
+ "postinstall",
211
+ "prepare",
212
+ "prepublishOnly",
213
+ "prepack",
214
+ ]);
215
+ return Object.fromEntries(Object.entries(pkg.scripts).filter(([name]) => !ignore.has(name)));
216
+ }
217
+ /**
218
+ * Detect which config files exist in the project root.
219
+ */
220
+ function detectConfigs(projectRoot) {
221
+ const exists = (...files) => files.some((f) => fs_1.default.existsSync(path_1.default.join(projectRoot, f)));
222
+ return {
223
+ docker: exists("Dockerfile", "docker-compose.yml", "docker-compose.yaml"),
224
+ eslint: exists(".eslintrc", ".eslintrc.js", ".eslintrc.json", ".eslintrc.yml"),
225
+ prettier: exists(".prettierrc", ".prettierrc.js", "prettier.config.js"),
226
+ ci: exists(".github/workflows", ".travis.yml", "circle.yml", ".gitlab-ci.yml"),
227
+ license: exists("LICENSE", "LICENSE.md", "LICENSE.txt"),
228
+ contributing: exists("CONTRIBUTING.md", "CONTRIBUTING"),
229
+ changelog: exists("CHANGELOG.md", "CHANGELOG"),
230
+ };
231
+ }
232
+ /**
233
+ * Resolve the repository URL from various package.json repository formats.
234
+ */
235
+ function resolveRepository(repository) {
236
+ var _a;
237
+ if (!repository)
238
+ return null;
239
+ if (typeof repository === "string")
240
+ return repository;
241
+ return (_a = repository.url) !== null && _a !== void 0 ? _a : null;
242
+ }
243
+ /**
244
+ * Main scanner — aggregates all project information.
245
+ */
246
+ function scanProject(projectRoot = process.cwd()) {
247
+ var _a, _b, _c, _d, _e, _f, _g;
248
+ const pkg = readPackageJson(projectRoot);
249
+ const stack = detectStack(pkg);
250
+ const envInfo = scanEnvFile(projectRoot);
251
+ const projectType = detectProjectType(projectRoot, pkg);
252
+ const scripts = extractScripts(pkg);
253
+ const configs = detectConfigs(projectRoot);
254
+ return {
255
+ name: (_a = pkg === null || pkg === void 0 ? void 0 : pkg.name) !== null && _a !== void 0 ? _a : path_1.default.basename(projectRoot),
256
+ version: (_b = pkg === null || pkg === void 0 ? void 0 : pkg.version) !== null && _b !== void 0 ? _b : "1.0.0",
257
+ description: (_c = pkg === null || pkg === void 0 ? void 0 : pkg.description) !== null && _c !== void 0 ? _c : null,
258
+ projectType,
259
+ stack,
260
+ scripts,
261
+ envInfo,
262
+ configs,
263
+ pkg,
264
+ author: (_d = pkg === null || pkg === void 0 ? void 0 : pkg.author) !== null && _d !== void 0 ? _d : null,
265
+ license: (_e = pkg === null || pkg === void 0 ? void 0 : pkg.license) !== null && _e !== void 0 ? _e : "MIT",
266
+ repository: resolveRepository(pkg === null || pkg === void 0 ? void 0 : pkg.repository),
267
+ homepage: (_f = pkg === null || pkg === void 0 ? void 0 : pkg.homepage) !== null && _f !== void 0 ? _f : null,
268
+ keywords: (_g = pkg === null || pkg === void 0 ? void 0 : pkg.keywords) !== null && _g !== void 0 ? _g : [],
269
+ };
270
+ }
271
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ export interface PackageJson {
2
+ name?: string;
3
+ version?: string;
4
+ description?: string;
5
+ main?: string;
6
+ bin?: string | Record<string, string>;
7
+ scripts?: Record<string, string>;
8
+ dependencies?: Record<string, string>;
9
+ devDependencies?: Record<string, string>;
10
+ peerDependencies?: Record<string, string>;
11
+ keywords?: string[];
12
+ author?: string | {
13
+ name: string;
14
+ email?: string;
15
+ url?: string;
16
+ };
17
+ license?: string;
18
+ repository?: string | {
19
+ type: string;
20
+ url: string;
21
+ };
22
+ homepage?: string;
23
+ private?: boolean;
24
+ }
25
+ export interface EnvInfo {
26
+ found: boolean;
27
+ content?: string;
28
+ sourceFile?: string;
29
+ }
30
+ export interface DetectedConfigs {
31
+ docker: boolean;
32
+ eslint: boolean;
33
+ prettier: boolean;
34
+ ci: boolean;
35
+ license: boolean;
36
+ contributing: boolean;
37
+ changelog: boolean;
38
+ }
39
+ export type ProjectType = "CLI Tool" | "Backend API" | "Node.js Library" | "Full-Stack Web App" | "Frontend Web App" | "Desktop App" | "Node.js Project";
40
+ export interface ProjectData {
41
+ name: string;
42
+ version: string;
43
+ description: string | null;
44
+ projectType: ProjectType;
45
+ stack: string[];
46
+ scripts: Record<string, string>;
47
+ envInfo: EnvInfo;
48
+ configs: DetectedConfigs;
49
+ pkg: PackageJson | null;
50
+ author: string | {
51
+ name: string;
52
+ email?: string;
53
+ url?: string;
54
+ } | null;
55
+ license: string;
56
+ repository: string | null;
57
+ homepage: string | null;
58
+ keywords: string[];
59
+ }
60
+ export interface RunOptions {
61
+ output?: string;
62
+ overwrite?: boolean;
63
+ }
64
+ export interface RunResult {
65
+ outPath: string;
66
+ data: ProjectData;
67
+ markdown: string;
68
+ }
69
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,WAAW,GACjB,UAAU,GACV,aAAa,GACb,iBAAiB,GACjB,oBAAoB,GACpB,kBAAkB,GAClB,aAAa,GACb,iBAAiB,CAAC;AAExB,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,eAAe,CAAC;IACzB,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../test/test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,138 @@
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
+ const path_1 = __importDefault(require("path"));
7
+ const scanner_1 = require("../src/scanner");
8
+ const generator_1 = require("../src/generator");
9
+ console.log("\n🧪 Running smartreadme TypeScript tests...\n");
10
+ let passed = 0;
11
+ let failed = 0;
12
+ function test(label, fn) {
13
+ try {
14
+ fn();
15
+ console.log(` ✅ ${label}`);
16
+ passed++;
17
+ }
18
+ catch (err) {
19
+ const msg = err instanceof Error ? err.message : String(err);
20
+ console.log(` ❌ ${label}`);
21
+ console.log(` ${msg}`);
22
+ failed++;
23
+ }
24
+ }
25
+ function assert(condition, msg) {
26
+ if (!condition)
27
+ throw new Error(msg);
28
+ }
29
+ // ── Scanner tests ─────────────────────────────────────────────────────────────
30
+ const projectRoot = path_1.default.join(__dirname, "..");
31
+ const data = (0, scanner_1.scanProject)(projectRoot);
32
+ test("scanProject returns an object", () => {
33
+ assert(typeof data === "object" && data !== null, "Expected object");
34
+ });
35
+ test("scanProject.name is a non-empty string", () => {
36
+ assert(typeof data.name === "string" && data.name.length > 0, `name="${data.name}"`);
37
+ });
38
+ test("scanProject.version is a semver-like string", () => {
39
+ assert(/^\d+\.\d+\.\d+/.test(data.version), `version="${data.version}"`);
40
+ });
41
+ test("scanProject.projectType is a valid type", () => {
42
+ const validTypes = [
43
+ "CLI Tool",
44
+ "Backend API",
45
+ "Node.js Library",
46
+ "Full-Stack Web App",
47
+ "Frontend Web App",
48
+ "Desktop App",
49
+ "Node.js Project",
50
+ ];
51
+ assert(validTypes.includes(data.projectType), `Got: ${data.projectType}`);
52
+ });
53
+ test("scanProject.scripts is a plain object", () => {
54
+ assert(typeof data.scripts === "object" && !Array.isArray(data.scripts), "scripts is not an object");
55
+ });
56
+ test("scanProject.stack is an array", () => {
57
+ assert(Array.isArray(data.stack), "stack is not an array");
58
+ });
59
+ test("scanProject.envInfo has a found boolean", () => {
60
+ assert(typeof data.envInfo.found === "boolean", "envInfo.found not boolean");
61
+ });
62
+ test("scanProject.configs has all expected keys", () => {
63
+ const keys = [
64
+ "docker",
65
+ "eslint",
66
+ "prettier",
67
+ "ci",
68
+ "license",
69
+ "contributing",
70
+ "changelog",
71
+ ];
72
+ for (const k of keys) {
73
+ assert(k in data.configs, `Missing configs.${k}`);
74
+ }
75
+ });
76
+ // ── generateExampleValue tests ────────────────────────────────────────────────
77
+ test("masks DB_PASSWORD as secret", () => {
78
+ assert((0, scanner_1.generateExampleValue)("DB_PASSWORD") === "your_secret_here", "wrong value");
79
+ });
80
+ test("masks OPENAI_API_KEY correctly", () => {
81
+ assert((0, scanner_1.generateExampleValue)("OPENAI_API_KEY") === "your_api_key_here", "wrong value");
82
+ });
83
+ test("masks JWT_TOKEN correctly", () => {
84
+ assert((0, scanner_1.generateExampleValue)("JWT_TOKEN") === "your_token_here", "wrong value");
85
+ });
86
+ test("masks PORT correctly", () => {
87
+ assert((0, scanner_1.generateExampleValue)("PORT") === "3000", "wrong value");
88
+ });
89
+ test("masks DATABASE_URL with mongo placeholder", () => {
90
+ const val = (0, scanner_1.generateExampleValue)("DATABASE_URL");
91
+ assert(val.startsWith("mongodb://") || val.startsWith("postgresql://"), `Got: ${val}`);
92
+ });
93
+ test("masks REDIS_URL correctly", () => {
94
+ const val = (0, scanner_1.generateExampleValue)("REDIS_URL");
95
+ assert(val.startsWith("redis://"), `Got: ${val}`);
96
+ });
97
+ test("masks NODE_ENV correctly", () => {
98
+ assert((0, scanner_1.generateExampleValue)("NODE_ENV") === "development", "wrong value");
99
+ });
100
+ // ── scanEnvFile tests ─────────────────────────────────────────────────────────
101
+ test("scanEnvFile returns found:false when no .env exists", () => {
102
+ const result = (0, scanner_1.scanEnvFile)("/tmp/nonexistent-project-xyz");
103
+ assert(result.found === false, `Expected found:false, got ${result.found}`);
104
+ });
105
+ // ── generateReadme tests ──────────────────────────────────────────────────────
106
+ const readme = (0, generator_1.generateReadme)(data);
107
+ test("generateReadme returns a non-empty string", () => {
108
+ assert(typeof readme === "string" && readme.length > 100, "Too short or not a string");
109
+ });
110
+ test("README starts with a # heading", () => {
111
+ assert(readme.startsWith("#"), "Does not start with #");
112
+ });
113
+ test("README contains About section", () => {
114
+ assert(readme.includes("## 📋 About"), "Missing About section");
115
+ });
116
+ test("README contains Getting Started section", () => {
117
+ assert(readme.includes("Getting Started"), "Missing Getting Started section");
118
+ });
119
+ test("README contains License section", () => {
120
+ assert(readme.includes("## 📄 License"), "Missing License section");
121
+ });
122
+ test("README contains Contributing section", () => {
123
+ assert(readme.includes("## 🤝 Contributing"), "Missing Contributing section");
124
+ });
125
+ test("README does not leak real env secrets", () => {
126
+ assert(!readme.includes("sk-real"), "Leaked real env value");
127
+ assert(!readme.includes("super_secret_key"), "Leaked real env value");
128
+ });
129
+ test("README has valid markdown heading structure", () => {
130
+ var _a;
131
+ const h2Count = ((_a = readme.match(/^## /gm)) !== null && _a !== void 0 ? _a : []).length;
132
+ assert(h2Count >= 3, `Expected at least 3 h2 sections, got ${h2Count}`);
133
+ });
134
+ // ── Summary ───────────────────────────────────────────────────────────────────
135
+ console.log(`\n ${passed} passed, ${failed} failed\n`);
136
+ if (failed > 0)
137
+ process.exit(1);
138
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../test/test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "smartreadme",
3
+ "version": "1.0.0",
4
+ "description": "Generate a professional README.md by scanning your project — zero config, zero dependencies",
5
+ "main": "dist/src/index.js",
6
+ "types": "dist/src/index.d.ts",
7
+ "bin": {
8
+ "smartreadme": "./dist/bin/cli.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc --project tsconfig.json",
12
+ "dev": "tsc --project tsconfig.json --watch",
13
+ "start": "node dist/bin/cli.js",
14
+ "test": "ts-node --project tsconfig.json test/test.ts",
15
+ "typecheck": "tsc --noEmit",
16
+ "prepublishOnly": "npm run build"
17
+ },
18
+ "engines": {
19
+ "node": ">=18.0.0",
20
+ "npm": ">=9.0.0"
21
+ },
22
+ "keywords": [
23
+ "readme",
24
+ "generator",
25
+ "cli",
26
+ "documentation",
27
+ "markdown",
28
+ "typescript",
29
+ "scaffold"
30
+ ],
31
+ "author": "Syed Mohiuddin Meshal <syedmohiuddinmeshal24@gmail.com>",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/meshal10613/smartreadme.git"
35
+ },
36
+ "homepage": "https://www.npmjs.com/package/smartreadme",
37
+ "bugs": {
38
+ "url": "https://github.com/meshal10613/smartreadme/issues"
39
+ },
40
+ "license": "MIT",
41
+ "devDependencies": {
42
+ "@types/node": "^20.12.0",
43
+ "ts-node": "^10.9.2",
44
+ "typescript": "^6.0.2"
45
+ },
46
+ "files": [
47
+ "dist",
48
+ "README.md"
49
+ ]
50
+ }