@lakindu_perera/toren 1.0.8 → 1.0.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cli/toren.d.ts +24 -0
  3. package/dist/cli/toren.js +254 -0
  4. package/dist/cli/toren.js.map +1 -0
  5. package/dist/detectors/config-detector.d.ts +3 -0
  6. package/dist/detectors/config-detector.js +58 -0
  7. package/dist/detectors/config-detector.js.map +1 -0
  8. package/dist/detectors/health-detector.d.ts +12 -0
  9. package/dist/detectors/health-detector.js +53 -0
  10. package/dist/detectors/health-detector.js.map +1 -0
  11. package/dist/detectors/important-files-detector.d.ts +51 -0
  12. package/dist/detectors/important-files-detector.js +455 -0
  13. package/dist/detectors/important-files-detector.js.map +1 -0
  14. package/dist/detectors/package-manager-detector.d.ts +7 -0
  15. package/dist/detectors/package-manager-detector.js +35 -0
  16. package/dist/detectors/package-manager-detector.js.map +1 -0
  17. package/dist/detectors/project-info-detector.d.ts +13 -0
  18. package/dist/detectors/project-info-detector.js +97 -0
  19. package/dist/detectors/project-info-detector.js.map +1 -0
  20. package/dist/detectors/script-detector.d.ts +42 -0
  21. package/dist/detectors/script-detector.js +199 -0
  22. package/dist/detectors/script-detector.js.map +1 -0
  23. package/dist/focused-output.d.ts +27 -0
  24. package/dist/focused-output.js +201 -0
  25. package/dist/focused-output.js.map +1 -0
  26. package/dist/lifecycle.d.ts +2 -0
  27. package/dist/lifecycle.js +114 -0
  28. package/dist/lifecycle.js.map +1 -0
  29. package/dist/renderers/console-renderer.d.ts +19 -0
  30. package/dist/renderers/console-renderer.js +361 -0
  31. package/dist/renderers/console-renderer.js.map +1 -0
  32. package/dist/renderers/html-renderer.d.ts +14 -0
  33. package/{src → dist}/renderers/html-renderer.js +181 -241
  34. package/dist/renderers/html-renderer.js.map +1 -0
  35. package/dist/renderers/index.d.ts +6 -0
  36. package/dist/renderers/index.js +12 -0
  37. package/dist/renderers/index.js.map +1 -0
  38. package/dist/renderers/json-renderer.d.ts +10 -0
  39. package/dist/renderers/json-renderer.js +127 -0
  40. package/dist/renderers/json-renderer.js.map +1 -0
  41. package/dist/renderers/markdown-renderer.d.ts +13 -0
  42. package/dist/renderers/markdown-renderer.js +360 -0
  43. package/dist/renderers/markdown-renderer.js.map +1 -0
  44. package/dist/scanner/scan.d.ts +2 -0
  45. package/dist/scanner/scan.js +573 -0
  46. package/dist/scanner/scan.js.map +1 -0
  47. package/dist/types/index.d.ts +85 -0
  48. package/dist/types/index.js +2 -0
  49. package/dist/types/index.js.map +1 -0
  50. package/package.json +11 -6
  51. package/bin/toren.js +0 -311
  52. package/src/detectors/config-detector.js +0 -81
  53. package/src/detectors/health-detector.js +0 -72
  54. package/src/detectors/important-files-detector.js +0 -515
  55. package/src/detectors/package-manager-detector.js +0 -112
  56. package/src/detectors/project-info-detector.js +0 -89
  57. package/src/detectors/script-detector.js +0 -248
  58. package/src/focused-output.js +0 -216
  59. package/src/lifecycle.js +0 -124
  60. package/src/renderers/console-renderer.js +0 -399
  61. package/src/renderers/index.js +0 -41
  62. package/src/renderers/json-renderer.js +0 -168
  63. package/src/renderers/markdown-renderer.js +0 -397
  64. package/src/scanner/scan.js +0 -554
package/CHANGELOG.md CHANGED
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+ ## [1.0.9] - 2026-08-31
8
+ ### Changed
9
+ - **TypeScript Foundation**: Completely migrated the entire Torén codebase from JavaScript to TypeScript.
10
+ - **Zero Runtime Dependencies**: The CLI continues to operate natively on Node.js without needing ts-node or any other runtime bundlers. Source code is compiled to `.js` files using ES2022 targets.
11
+ - **Build & CI Improvements**: Set up robust static type-checking and automated build steps using `tsc`.
12
+
13
+
7
14
 
8
15
  ## [1.0.7] - 2026-08-29
9
16
  ### Added
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @fileoverview Toren CLI — Entry Point
4
+ *
5
+ * Usage:
6
+ * toren [path] Scan <path> (defaults to current directory)
7
+ * toren --format <type> Select output format (default: console)
8
+ * toren --json Legacy alias for --format json
9
+ * toren --version Print version
10
+ * toren --help Print usage
11
+ * toren --doctor Check global installation health
12
+ * toren --uninstall Safely remove global installation
13
+ * toren --include-hidden Include hidden files (dot-files) in scan
14
+ * toren --max-files <N> Override the max file scan limit
15
+ *
16
+ * Adding a new output format
17
+ * ──────────────────────────
18
+ * 1. Create src/renderers/<format>-renderer.js
19
+ * and export: render(result, options?) => void
20
+ * 2. Register it in src/renderers/index.js
21
+ *
22
+ * No changes to this file are required.
23
+ */
24
+ export {};
@@ -0,0 +1,254 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @fileoverview Toren CLI — Entry Point
4
+ *
5
+ * Usage:
6
+ * toren [path] Scan <path> (defaults to current directory)
7
+ * toren --format <type> Select output format (default: console)
8
+ * toren --json Legacy alias for --format json
9
+ * toren --version Print version
10
+ * toren --help Print usage
11
+ * toren --doctor Check global installation health
12
+ * toren --uninstall Safely remove global installation
13
+ * toren --include-hidden Include hidden files (dot-files) in scan
14
+ * toren --max-files <N> Override the max file scan limit
15
+ *
16
+ * Adding a new output format
17
+ * ──────────────────────────
18
+ * 1. Create src/renderers/<format>-renderer.js
19
+ * and export: render(result, options?) => void
20
+ * 2. Register it in src/renderers/index.js
21
+ *
22
+ * No changes to this file are required.
23
+ */
24
+ import { createRequire } from 'node:module';
25
+ import { scan } from '../scanner/scan.js';
26
+ import renderers from '../renderers/index.js';
27
+ import { getFocusedModeInfo, renderFocusedMode, FOCUSED_FLAGS } from '../focused-output.js';
28
+ import { runDoctor, runUninstall } from '../lifecycle.js';
29
+ const require = createRequire(import.meta.url);
30
+ const pkg = require('../../package.json');
31
+ /** Format used when no --format flag is supplied. */
32
+ const DEFAULT_FORMAT = 'console';
33
+ /** Derived from the registry — always in sync with available renderers. */
34
+ const SUPPORTED_FORMATS = Object.keys(renderers);
35
+ // ---------------------------------------------------------------------------
36
+ // Helpers
37
+ // ---------------------------------------------------------------------------
38
+ function printError(title, message, detailLabel, detailValue) {
39
+ console.error(`\x1b[31m✖ ${title}\x1b[0m\n`);
40
+ console.error(`${message}\n`);
41
+ if (detailLabel && detailValue) {
42
+ console.error(`${detailLabel}:\n`);
43
+ console.error(`${detailValue}\n`);
44
+ }
45
+ }
46
+ function printHelp() {
47
+ const formatList = SUPPORTED_FORMATS.map(f => {
48
+ const suffix = f === DEFAULT_FORMAT ? ' (default)' : '';
49
+ return ` --format ${f.padEnd(10)}${suffix}`;
50
+ }).join('\n');
51
+ console.log(`
52
+ \x1b[1mToren\x1b[0m v${pkg.version}
53
+ Fast Repository Discovery CLI
54
+
55
+ \x1b[1mUSAGE\x1b[0m
56
+ toren [path] [options]
57
+
58
+ \x1b[1mCOMMANDS\x1b[0m
59
+ --project-type Show detected project type only
60
+ --frameworks Show detected frameworks only
61
+ --entry-points Show detected entry points only
62
+ --structure Show repository structure only
63
+ --configs Show detected project configuration files
64
+ --scripts Show available package scripts only
65
+ --summary Show project summary only
66
+ --important-files Show important files only
67
+ --health Show project health observations only
68
+ --include-hidden Include hidden files and folders
69
+ --max-files <n> Set scan file limit
70
+ --doctor Run CLI diagnostics
71
+ --uninstall Remove Toren global installation
72
+ --help Show this help message
73
+ --version Show version number
74
+
75
+ \x1b[1mOUTPUT FORMATS\x1b[0m
76
+ ${formatList}
77
+
78
+ \x1b[1mEXAMPLES\x1b[0m
79
+ toren . Scan the current directory
80
+ toren ./my-project Scan a specific project folder
81
+ toren --format json . Output results as JSON
82
+ toren --format markdown . > out.md Save a Markdown report to a file
83
+ toren --format html . > out.html Save an HTML report to a file
84
+ toren . --configs Show project configuration files
85
+ toren . --frameworks Show detected frameworks
86
+ `);
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // Argument parsing
90
+ // ---------------------------------------------------------------------------
91
+ /**
92
+ * @typedef {Object} ParsedArgs
93
+ * @property {'exit'|'wait'|'scan'} action
94
+ * @property {string} [target] - Resolved path to scan
95
+ * @property {string} [format] - Renderer format name
96
+ * @property {boolean} [includeHidden] - Whether to include hidden files
97
+ * @property {number} [maxFiles] - Max files to scan
98
+ */
99
+ /**
100
+ * Parse process.argv into a structured options object.
101
+ *
102
+ * Returns { action: 'exit' } when the process should exit immediately.
103
+ * Returns { action: 'wait' } when an async interactive command is running.
104
+ * Returns { action: 'scan', target, format } for normal scan operations.
105
+ *
106
+ * @returns {ParsedArgs}
107
+ */
108
+ function parseArgs() {
109
+ const args = process.argv.slice(2);
110
+ // ── Informational flags ─────────────────────────────────────────────────
111
+ if (args.includes('--help') || args.includes('-h')) {
112
+ printHelp();
113
+ return { action: 'exit', code: 0 };
114
+ }
115
+ if (args.includes('--version') || args.includes('-V') || args.includes('-v')) {
116
+ console.log(`Toren ${pkg.version}`);
117
+ return { action: 'exit', code: 0 };
118
+ }
119
+ // ── Lifecycle commands ──────────────────────────────────────────────────
120
+ if (args.includes('--doctor')) {
121
+ runDoctor(pkg.version);
122
+ return { action: 'exit', code: 0 };
123
+ }
124
+ if (args.includes('--uninstall')) {
125
+ runUninstall();
126
+ return { action: 'wait' };
127
+ }
128
+ // ── Output format ───────────────────────────────────────────────────────
129
+ // --json is a legacy alias for --format json, kept for backwards
130
+ // compatibility. It will be removed in a future major version.
131
+ let format = DEFAULT_FORMAT;
132
+ const formatIdx = args.indexOf('--format');
133
+ if (formatIdx !== -1) {
134
+ const nextToken = args[formatIdx + 1];
135
+ // If the next token is missing or starts with '-', the user omitted the value.
136
+ if (nextToken === undefined || nextToken.startsWith('-')) {
137
+ printError('Missing value', 'The --format flag requires a valid output format.', 'Supported formats', SUPPORTED_FORMATS.join(', '));
138
+ return { action: 'exit', code: 1 };
139
+ }
140
+ format = nextToken;
141
+ }
142
+ else if (args.includes('--json')) {
143
+ format = 'json';
144
+ }
145
+ // ── Focused Output Flags ────────────────────────────────────────────────
146
+ const focusedInfo = getFocusedModeInfo(args);
147
+ if (focusedInfo.error) {
148
+ printError(focusedInfo.title, focusedInfo.message, focusedInfo.detailLabel, focusedInfo.detailValue);
149
+ return { action: 'exit', code: 1 };
150
+ }
151
+ const focusedMode = focusedInfo.mode;
152
+ // ── Hidden files ────────────────────────────────────────────────────────
153
+ const includeHidden = args.includes('--include-hidden');
154
+ // ── Target path ─────────────────────────────────────────────────────────
155
+ // Build the set of tokens that are consumed as values by named flags so
156
+ // we don't accidentally treat them as the positional path argument.
157
+ const consumedValues = new Set();
158
+ if (formatIdx !== -1 && args[formatIdx + 1] !== undefined && !args[formatIdx + 1].startsWith('-')) {
159
+ consumedValues.add(args[formatIdx + 1]);
160
+ }
161
+ // ── Max files ───────────────────────────────────────────────────────────
162
+ let maxFiles = undefined;
163
+ const maxFilesIdx = args.indexOf('--max-files');
164
+ if (maxFilesIdx !== -1) {
165
+ const rawVal = args[maxFilesIdx + 1];
166
+ if (rawVal === undefined || rawVal.startsWith('-')) {
167
+ printError('Missing value', 'The --max-files flag requires a numeric value.', 'Example', 'toren --max-files 100000');
168
+ return { action: 'exit', code: 1 };
169
+ }
170
+ maxFiles = parseInt(rawVal, 10);
171
+ if (isNaN(maxFiles) || maxFiles < 1) {
172
+ printError('Invalid value', 'The --max-files flag must be a positive integer.', 'Provided value', rawVal);
173
+ return { action: 'exit', code: 1 };
174
+ }
175
+ consumedValues.add(rawVal);
176
+ }
177
+ // First non-flag, non-consumed token is the target path; default to cwd.
178
+ const target = args.find(a => !a.startsWith('-') && !consumedValues.has(a)) ?? '.';
179
+ // ── Unknown flag check ──────────────────────────────────────────────────
180
+ const knownFlags = new Set([
181
+ '--help', '-h',
182
+ '--version', '-V', '-v',
183
+ '--doctor',
184
+ '--uninstall',
185
+ '--format',
186
+ '--json',
187
+ ...FOCUSED_FLAGS,
188
+ '--include-hidden',
189
+ '--max-files',
190
+ ]);
191
+ const unknownFlag = args.find(a => a.startsWith('-') && !knownFlags.has(a) && !consumedValues.has(a));
192
+ if (unknownFlag) {
193
+ printError('Unknown option', 'An unrecognized flag was provided.', 'Flag', unknownFlag);
194
+ return { action: 'exit', code: 1 };
195
+ }
196
+ return { action: 'scan', target, format, includeHidden, maxFiles, focusedMode };
197
+ }
198
+ // ---------------------------------------------------------------------------
199
+ // Format validation
200
+ // ---------------------------------------------------------------------------
201
+ /**
202
+ * Assert that `format` has a registered renderer.
203
+ * Prints a descriptive error message and exits with code 1 if not found.
204
+ *
205
+ * @param {string} format
206
+ */
207
+ function assertValidFormat(format) {
208
+ if (renderers[format])
209
+ return;
210
+ printError('Unsupported output format', 'The requested output format is not supported.', 'Format', format);
211
+ process.exit(1);
212
+ }
213
+ // ---------------------------------------------------------------------------
214
+ // Main
215
+ // ---------------------------------------------------------------------------
216
+ (function main() {
217
+ const parsed = parseArgs();
218
+ if (parsed.action === 'exit') {
219
+ process.exit(parsed.code ?? 0);
220
+ }
221
+ if (parsed.action === 'wait')
222
+ return;
223
+ // Validate before scanning — fail fast on bad format names.
224
+ assertValidFormat(parsed.format);
225
+ const render = renderers[parsed.format];
226
+ try {
227
+ const result = scan(parsed.target, {
228
+ includeHidden: parsed.includeHidden,
229
+ maxFiles: parsed.maxFiles,
230
+ });
231
+ if (parsed.focusedMode) {
232
+ renderFocusedMode(parsed.focusedMode, result);
233
+ }
234
+ else {
235
+ render(result, { cwd: process.cwd() });
236
+ }
237
+ }
238
+ catch (err) {
239
+ // Render errors in the requested format where possible.
240
+ if (parsed.format === 'json') {
241
+ console.error(JSON.stringify({ error: err.message }, null, 2));
242
+ }
243
+ else {
244
+ if (err.title) {
245
+ printError(err.title, err.message, err.detailLabel, err.detailValue);
246
+ }
247
+ else {
248
+ printError('Scan failed', err.message);
249
+ }
250
+ }
251
+ process.exit(1);
252
+ }
253
+ })();
254
+ //# sourceMappingURL=toren.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toren.js","sourceRoot":"","sources":["../../src/cli/toren.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function detectConfigs(flatFiles: string[]): {
2
+ configs: string[];
3
+ };
@@ -0,0 +1,58 @@
1
+ export function detectConfigs(flatFiles) {
2
+ const configPatterns = [
3
+ // Package
4
+ /^package\.json$/,
5
+ /^package-lock\.json$/,
6
+ /^pnpm-lock\.yaml$/,
7
+ /^yarn\.lock$/,
8
+ /^bun\.lockb$/,
9
+ // TypeScript
10
+ /^tsconfig\.json$/,
11
+ /^jsconfig\.json$/,
12
+ // Frontend
13
+ /^vite\.config\.[a-zA-Z0-9]+$/,
14
+ /^next\.config\.[a-zA-Z0-9]+$/,
15
+ /^nuxt\.config\.[a-zA-Z0-9]+$/,
16
+ /^astro\.config\.[a-zA-Z0-9]+$/,
17
+ /^angular\.json$/,
18
+ // Build
19
+ /^webpack\.config\.[a-zA-Z0-9]+$/,
20
+ /^rollup\.config\.[a-zA-Z0-9]+$/,
21
+ /^turbo\.json$/,
22
+ /^nx\.json$/,
23
+ // Styling
24
+ /^tailwind\.config\.[a-zA-Z0-9]+$/,
25
+ /^postcss\.config\.[a-zA-Z0-9]+$/,
26
+ // Lint
27
+ /^eslint\.config\.[a-zA-Z0-9]+$/,
28
+ /^\.eslintrc.*$/,
29
+ /^prettier\.config\.[a-zA-Z0-9]+$/,
30
+ /^\.prettierrc.*$/,
31
+ // Backend
32
+ /^pom\.xml$/,
33
+ /^build\.gradle$/,
34
+ /^build\.gradle\.kts$/,
35
+ // Languages
36
+ /^requirements\.txt$/,
37
+ /^pyproject\.toml$/,
38
+ /^Cargo\.toml$/,
39
+ /^go\.mod$/,
40
+ // Deployment
41
+ /^Dockerfile$/,
42
+ /^docker-compose\.ya?ml$/
43
+ ];
44
+ const matchedSet = new Set();
45
+ for (const file of flatFiles) {
46
+ if (file.includes('/'))
47
+ continue;
48
+ for (const pattern of configPatterns) {
49
+ if (pattern.test(file)) {
50
+ matchedSet.add(file);
51
+ break;
52
+ }
53
+ }
54
+ }
55
+ const configs = Array.from(matchedSet).sort();
56
+ return { configs };
57
+ }
58
+ //# sourceMappingURL=config-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-detector.js","sourceRoot":"","sources":["../../src/detectors/config-detector.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,SAAmB;IAC/C,MAAM,cAAc,GAAa;QAC/B,UAAU;QACV,iBAAiB;QACjB,sBAAsB;QACtB,mBAAmB;QACnB,cAAc;QACd,cAAc;QAEd,aAAa;QACb,kBAAkB;QAClB,kBAAkB;QAElB,WAAW;QACX,8BAA8B;QAC9B,8BAA8B;QAC9B,8BAA8B;QAC9B,+BAA+B;QAC/B,iBAAiB;QAEjB,QAAQ;QACR,iCAAiC;QACjC,gCAAgC;QAChC,eAAe;QACf,YAAY;QAEZ,UAAU;QACV,kCAAkC;QAClC,iCAAiC;QAEjC,OAAO;QACP,gCAAgC;QAChC,gBAAgB;QAChB,kCAAkC;QAClC,kBAAkB;QAElB,UAAU;QACV,YAAY;QACZ,iBAAiB;QACjB,sBAAsB;QAEtB,YAAY;QACZ,qBAAqB;QACrB,mBAAmB;QACnB,eAAe;QACf,WAAW;QAEX,aAAa;QACb,cAAc;QACd,yBAAyB;KAC1B,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAEjC,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { HealthObservation, ScriptInfo, ImportantFile } from '../types/index.js';
2
+ interface DetectHealthOptions {
3
+ flatFiles: string[];
4
+ configs: string[];
5
+ importantFiles: ImportantFile[];
6
+ scripts: ScriptInfo[];
7
+ projectType: string;
8
+ }
9
+ export declare function detectHealth({ flatFiles, configs, importantFiles, scripts, projectType }: DetectHealthOptions): {
10
+ health: HealthObservation[];
11
+ };
12
+ export {};
@@ -0,0 +1,53 @@
1
+ export function detectHealth({ flatFiles, configs, importantFiles, scripts, projectType }) {
2
+ const health = [];
3
+ const fileSet = new Set(flatFiles);
4
+ // README
5
+ if (fileSet.has('README.md') || fileSet.has('README') || fileSet.has('readme.md')) {
6
+ health.push({ id: 'readme', status: 'pass', message: 'README found' });
7
+ }
8
+ else {
9
+ health.push({ id: 'readme', status: 'warning', message: 'README not found' });
10
+ }
11
+ // LICENSE
12
+ if (fileSet.has('LICENSE') || fileSet.has('LICENSE.md') || fileSet.has('LICENSE.txt')) {
13
+ health.push({ id: 'license', status: 'pass', message: 'LICENSE found' });
14
+ }
15
+ else {
16
+ health.push({ id: 'license', status: 'warning', message: 'LICENSE not found' });
17
+ }
18
+ // ENVIRONMENT EXAMPLE
19
+ if (fileSet.has('.env.example') || fileSet.has('.env.sample')) {
20
+ health.push({ id: 'env-example', status: 'pass', message: 'Environment example found' });
21
+ }
22
+ // TESTS
23
+ const hasTestFiles = flatFiles.some(f => f.startsWith('test/') ||
24
+ f.startsWith('tests/') ||
25
+ f.startsWith('__tests__/') ||
26
+ f.includes('.test.') ||
27
+ f.includes('.spec.'));
28
+ const hasTestScripts = (scripts || []).some(s => s.category === 'testing' || s.name === 'test');
29
+ if (hasTestFiles || hasTestScripts) {
30
+ health.push({ id: 'tests', status: 'pass', message: 'Tests detected' });
31
+ }
32
+ // LINTER
33
+ const hasLinter = (configs || []).some(c => c.includes('eslint') ||
34
+ c.includes('biome') ||
35
+ c.includes('stylelint')) || (scripts || []).some(s => s.category === 'quality' || s.name === 'lint');
36
+ if (hasLinter) {
37
+ health.push({ id: 'lint', status: 'pass', message: 'Linter detected' });
38
+ }
39
+ // TYPESCRIPT
40
+ if (fileSet.has('tsconfig.json')) {
41
+ health.push({ id: 'typescript', status: 'pass', message: 'TypeScript configuration found' });
42
+ }
43
+ // GIT
44
+ if (fileSet.has('.gitignore')) {
45
+ health.push({ id: 'git', status: 'info', message: '.gitignore found' });
46
+ }
47
+ // DOCKER
48
+ if (fileSet.has('Dockerfile') || fileSet.has('docker-compose.yml') || fileSet.has('compose.yml')) {
49
+ health.push({ id: 'docker', status: 'info', message: 'Docker configuration found' });
50
+ }
51
+ return { health };
52
+ }
53
+ //# sourceMappingURL=health-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-detector.js","sourceRoot":"","sources":["../../src/detectors/health-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @fileoverview Toren — Important File Detector
3
+ *
4
+ * Identifies the most strategically significant files in a project, based
5
+ * on the already-scanned flat file list and detected project context.
6
+ *
7
+ * Design contract:
8
+ * - Pure function. Uses only the data already produced by scan().
9
+ * - No filesystem I/O. No directory traversal.
10
+ * - Deterministic: same input always produces the same output.
11
+ * - No duplicates: each path appears at most once (highest priority wins).
12
+ * - Sorted: highest priority first; ties broken alphabetically by path.
13
+ * - Never returns null; importantFiles is always an array.
14
+ * - Framework-specific files are only marked important when they exist.
15
+ *
16
+ * Priority anchors:
17
+ * 100 – Project manifest (package.json, pom.xml, Cargo.toml, …)
18
+ * 95 – Primary documentation (README.md)
19
+ * 90 – Primary detected entry point
20
+ * 85 – Framework configuration (next.config.*, vite.config.*, …)
21
+ * 82 – App-level framework files (root layout, root page, …)
22
+ * 80 – Environment documentation (.env.example)
23
+ * 78 – Secondary framework files (middleware, server entry)
24
+ * 75 – TypeScript / language config
25
+ * 72 – Project-specific config (routes, config/application)
26
+ * 70 – Container (Dockerfile)
27
+ * 68 – Container orchestration (docker-compose)
28
+ *
29
+ * @module detectors/important-files-detector
30
+ */
31
+ /**
32
+ * Detect strategically important files in a scanned project.
33
+ *
34
+ * Uses only data already produced by scan() — no new filesystem operations.
35
+ *
36
+ * @param {Object} params
37
+ * @param {string[]} params.flatFiles - All relative POSIX file paths from the scanner
38
+ * @param {string} params.projectType - Detected project type (e.g. 'React', 'Go')
39
+ * @param {string[]} params.entryPoints - Detected entry point paths
40
+ * @param {string[]} params.configs - Detected configuration file paths
41
+ * @returns {{ importantFiles: ImportantFile[] }}
42
+ */
43
+ import type { ImportantFile } from "../types/index.js";
44
+ export declare function detectImportantFiles({ flatFiles, projectType, entryPoints, configs }: {
45
+ flatFiles: string[];
46
+ projectType: string;
47
+ entryPoints: string[];
48
+ configs: string[];
49
+ }): {
50
+ importantFiles: ImportantFile[];
51
+ };