devcache-hub 0.1.3 → 0.3.1

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 (109) hide show
  1. package/dist/analyzers/ArchitectureAnalyzer.d.ts +17 -0
  2. package/dist/analyzers/ArchitectureAnalyzer.d.ts.map +1 -0
  3. package/dist/analyzers/ArchitectureAnalyzer.js +217 -0
  4. package/dist/analyzers/ArchitectureAnalyzer.js.map +1 -0
  5. package/dist/analyzers/FeaturesAnalyzer.d.ts +18 -0
  6. package/dist/analyzers/FeaturesAnalyzer.d.ts.map +1 -0
  7. package/dist/analyzers/FeaturesAnalyzer.js +258 -0
  8. package/dist/analyzers/FeaturesAnalyzer.js.map +1 -0
  9. package/dist/analyzers/ImpactAnalyzer.d.ts +16 -0
  10. package/dist/analyzers/ImpactAnalyzer.d.ts.map +1 -0
  11. package/dist/analyzers/ImpactAnalyzer.js +165 -0
  12. package/dist/analyzers/ImpactAnalyzer.js.map +1 -0
  13. package/dist/analyzers/ProjectAnalyzer.d.ts +14 -0
  14. package/dist/analyzers/ProjectAnalyzer.d.ts.map +1 -0
  15. package/dist/analyzers/ProjectAnalyzer.js +142 -0
  16. package/dist/analyzers/ProjectAnalyzer.js.map +1 -0
  17. package/dist/analyzers/StackAnalyzer.d.ts +28 -0
  18. package/dist/analyzers/StackAnalyzer.d.ts.map +1 -0
  19. package/dist/analyzers/StackAnalyzer.js +320 -0
  20. package/dist/analyzers/StackAnalyzer.js.map +1 -0
  21. package/dist/analyzers/base/BaseAnalyzer.d.ts +39 -0
  22. package/dist/analyzers/base/BaseAnalyzer.d.ts.map +1 -0
  23. package/dist/analyzers/base/BaseAnalyzer.js +64 -0
  24. package/dist/analyzers/base/BaseAnalyzer.js.map +1 -0
  25. package/dist/analyzers/index.d.ts +7 -0
  26. package/dist/analyzers/index.d.ts.map +1 -0
  27. package/dist/analyzers/index.js +23 -0
  28. package/dist/analyzers/index.js.map +1 -0
  29. package/dist/cli/commands/generate.d.ts.map +1 -1
  30. package/dist/cli/commands/generate.js +32 -19
  31. package/dist/cli/commands/generate.js.map +1 -1
  32. package/dist/cli/commands/login.d.ts.map +1 -1
  33. package/dist/cli/commands/login.js +89 -19
  34. package/dist/cli/commands/login.js.map +1 -1
  35. package/dist/cli/commands/push.d.ts.map +1 -1
  36. package/dist/cli/commands/push.js +81 -10
  37. package/dist/cli/commands/push.js.map +1 -1
  38. package/dist/cli/index.js +9 -0
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/orchestrator/FileSystemHandler.d.ts +35 -0
  41. package/dist/orchestrator/FileSystemHandler.d.ts.map +1 -0
  42. package/dist/orchestrator/FileSystemHandler.js +138 -0
  43. package/dist/orchestrator/FileSystemHandler.js.map +1 -0
  44. package/dist/orchestrator/Orchestrator.d.ts +31 -0
  45. package/dist/orchestrator/Orchestrator.d.ts.map +1 -0
  46. package/dist/orchestrator/Orchestrator.js +141 -0
  47. package/dist/orchestrator/Orchestrator.js.map +1 -0
  48. package/dist/orchestrator/TemplateManager.d.ts +35 -0
  49. package/dist/orchestrator/TemplateManager.d.ts.map +1 -0
  50. package/dist/orchestrator/TemplateManager.js +116 -0
  51. package/dist/orchestrator/TemplateManager.js.map +1 -0
  52. package/dist/orchestrator/index.d.ts +4 -0
  53. package/dist/orchestrator/index.d.ts.map +1 -0
  54. package/dist/orchestrator/index.js +20 -0
  55. package/dist/orchestrator/index.js.map +1 -0
  56. package/dist/supabase/client.d.ts +54 -0
  57. package/dist/supabase/client.d.ts.map +1 -0
  58. package/dist/supabase/client.js +181 -0
  59. package/dist/supabase/client.js.map +1 -0
  60. package/dist/supabase/index.d.ts +3 -0
  61. package/dist/supabase/index.d.ts.map +1 -0
  62. package/dist/supabase/index.js +19 -0
  63. package/dist/supabase/index.js.map +1 -0
  64. package/dist/supabase/oauth.d.ts +25 -0
  65. package/dist/supabase/oauth.d.ts.map +1 -0
  66. package/dist/supabase/oauth.js +218 -0
  67. package/dist/supabase/oauth.js.map +1 -0
  68. package/dist/supabase/storage.d.ts +46 -0
  69. package/dist/supabase/storage.d.ts.map +1 -0
  70. package/dist/supabase/storage.js +179 -0
  71. package/dist/supabase/storage.js.map +1 -0
  72. package/dist/types/analyzers.d.ts +51 -0
  73. package/dist/types/analyzers.d.ts.map +1 -0
  74. package/dist/types/analyzers.js +3 -0
  75. package/dist/types/analyzers.js.map +1 -0
  76. package/dist/types/config.d.ts +27 -0
  77. package/dist/types/config.d.ts.map +1 -0
  78. package/dist/types/config.js +3 -0
  79. package/dist/types/config.js.map +1 -0
  80. package/dist/types/index.d.ts +4 -0
  81. package/dist/types/index.d.ts.map +1 -0
  82. package/dist/types/index.js +20 -0
  83. package/dist/types/index.js.map +1 -0
  84. package/dist/types/templates.d.ts +18 -0
  85. package/dist/types/templates.d.ts.map +1 -0
  86. package/dist/types/templates.js +3 -0
  87. package/dist/types/templates.js.map +1 -0
  88. package/dist/utils/config.d.ts +17 -0
  89. package/dist/utils/config.d.ts.map +1 -0
  90. package/dist/utils/config.js +46 -0
  91. package/dist/utils/config.js.map +1 -0
  92. package/dist/utils/fileParser.d.ts +28 -0
  93. package/dist/utils/fileParser.d.ts.map +1 -0
  94. package/dist/utils/fileParser.js +111 -0
  95. package/dist/utils/fileParser.js.map +1 -0
  96. package/dist/utils/index.d.ts +4 -0
  97. package/dist/utils/index.d.ts.map +1 -0
  98. package/dist/utils/index.js +20 -0
  99. package/dist/utils/index.js.map +1 -0
  100. package/dist/utils/logger.d.ts +9 -0
  101. package/dist/utils/logger.d.ts.map +1 -0
  102. package/dist/utils/logger.js +31 -0
  103. package/dist/utils/logger.js.map +1 -0
  104. package/package.json +13 -12
  105. package/templates/general/project-impact.yaml +34 -0
  106. package/templates/general/project-overview.yaml +34 -0
  107. package/templates/tech/architecture-project.yaml +42 -0
  108. package/templates/tech/features.yaml +38 -0
  109. package/templates/tech/stack-project.yaml +42 -0
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StackAnalyzer = void 0;
4
+ const BaseAnalyzer_1 = require("./base/BaseAnalyzer");
5
+ class StackAnalyzer extends BaseAnalyzer_1.BaseAnalyzer {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.name = 'stack-project';
9
+ this.outputPath = 'tech/stack-project.md';
10
+ this.category = 'tech';
11
+ }
12
+ async analyze(context) {
13
+ const metadata = this.extractMetadata(context);
14
+ return {
15
+ title: 'Technology Stack',
16
+ sections: [
17
+ this.createSection('Core Technologies', this.analyzeCoreStack(context)),
18
+ this.createSection('Production Dependencies', this.analyzeProductionDeps(context)),
19
+ this.createSection('Development Dependencies', this.analyzeDevDeps(context)),
20
+ this.createSection('Database', this.identifyDatabase(context)),
21
+ this.createSection('Build Tools', this.identifyBuildTools(context)),
22
+ this.createSection('Testing Framework', this.identifyTestingTools(context)),
23
+ this.createSection('Deployment', this.analyzeDeployment(context)),
24
+ this.createSection('Environment Setup', this.describeEnvironmentSetup(context)),
25
+ ],
26
+ metadata,
27
+ };
28
+ }
29
+ analyzeCoreStack(context) {
30
+ const pkg = context.packageJson;
31
+ if (!pkg)
32
+ return 'Package.json not found';
33
+ let stack = '';
34
+ // Framework
35
+ if (context.framework) {
36
+ const version = pkg.dependencies?.[context.framework.toLowerCase()] ||
37
+ pkg.dependencies?.['next'] ||
38
+ pkg.dependencies?.['react'];
39
+ stack += `- **Framework**: ${context.framework} ${version || ''}\n`;
40
+ }
41
+ // Language
42
+ const hasTypeScript = pkg.devDependencies?.['typescript'] || pkg.dependencies?.['typescript'];
43
+ if (hasTypeScript) {
44
+ stack += `- **Language**: TypeScript ${hasTypeScript}\n`;
45
+ }
46
+ else {
47
+ stack += `- **Language**: JavaScript\n`;
48
+ }
49
+ // Runtime
50
+ if (pkg.engines?.node) {
51
+ stack += `- **Runtime**: Node.js ${pkg.engines.node}\n`;
52
+ }
53
+ else {
54
+ stack += `- **Runtime**: Node.js (version not specified)\n`;
55
+ }
56
+ return stack;
57
+ }
58
+ analyzeProductionDeps(context) {
59
+ const deps = context.packageJson?.dependencies;
60
+ if (!deps || Object.keys(deps).length === 0) {
61
+ return 'No production dependencies found';
62
+ }
63
+ const categorized = this.categorizeDependencies(deps);
64
+ let output = '';
65
+ for (const [category, packages] of Object.entries(categorized)) {
66
+ if (packages.length > 0) {
67
+ output += `\n### ${category}\n\n`;
68
+ for (const pkg of packages.slice(0, 10)) {
69
+ output += `- **${pkg.name}** (${pkg.version}): ${this.getPackageDescription(pkg.name)}\n`;
70
+ }
71
+ if (packages.length > 10) {
72
+ output += `\n...and ${packages.length - 10} more packages\n`;
73
+ }
74
+ }
75
+ }
76
+ return output;
77
+ }
78
+ analyzeDevDeps(context) {
79
+ const devDeps = context.packageJson?.devDependencies;
80
+ if (!devDeps || Object.keys(devDeps).length === 0) {
81
+ return 'No development dependencies found';
82
+ }
83
+ const categorized = this.categorizeDependencies(devDeps);
84
+ let output = '';
85
+ for (const [category, packages] of Object.entries(categorized)) {
86
+ if (packages.length > 0) {
87
+ output += `\n### ${category}\n\n`;
88
+ for (const pkg of packages.slice(0, 8)) {
89
+ output += `- **${pkg.name}** (${pkg.version})\n`;
90
+ }
91
+ if (packages.length > 8) {
92
+ output += `\n...and ${packages.length - 8} more packages\n`;
93
+ }
94
+ }
95
+ }
96
+ return output;
97
+ }
98
+ categorizeDependencies(deps) {
99
+ const categories = {
100
+ 'UI & Styling': [],
101
+ 'State Management': [],
102
+ 'Data Fetching': [],
103
+ 'Database & ORM': [],
104
+ 'Authentication': [],
105
+ 'Testing': [],
106
+ 'Build Tools': [],
107
+ 'Utilities': [],
108
+ 'Other': [],
109
+ };
110
+ for (const [name, version] of Object.entries(deps)) {
111
+ const pkg = { name, version };
112
+ if (this.isUIPackage(name)) {
113
+ categories['UI & Styling'].push(pkg);
114
+ }
115
+ else if (this.isStateManagement(name)) {
116
+ categories['State Management'].push(pkg);
117
+ }
118
+ else if (this.isDataFetching(name)) {
119
+ categories['Data Fetching'].push(pkg);
120
+ }
121
+ else if (this.isDatabase(name)) {
122
+ categories['Database & ORM'].push(pkg);
123
+ }
124
+ else if (this.isAuth(name)) {
125
+ categories['Authentication'].push(pkg);
126
+ }
127
+ else if (this.isTesting(name)) {
128
+ categories['Testing'].push(pkg);
129
+ }
130
+ else if (this.isBuildTool(name)) {
131
+ categories['Build Tools'].push(pkg);
132
+ }
133
+ else if (this.isUtility(name)) {
134
+ categories['Utilities'].push(pkg);
135
+ }
136
+ else {
137
+ categories['Other'].push(pkg);
138
+ }
139
+ }
140
+ return categories;
141
+ }
142
+ isUIPackage(name) {
143
+ return /^(@mui|@heroui|@radix|tailwind|styled-components|emotion|sass|postcss|autoprefixer)/.test(name) ||
144
+ ['react-icons', 'lucide-react', 'framer-motion'].includes(name);
145
+ }
146
+ isStateManagement(name) {
147
+ return ['redux', '@reduxjs/toolkit', 'zustand', 'mobx', 'recoil', 'jotai'].includes(name);
148
+ }
149
+ isDataFetching(name) {
150
+ return ['axios', 'swr', 'react-query', '@tanstack/react-query', 'graphql', 'apollo-client'].includes(name);
151
+ }
152
+ isDatabase(name) {
153
+ return /^(@supabase|@prisma|mongoose|typeorm|sequelize|pg|mysql)/.test(name);
154
+ }
155
+ isAuth(name) {
156
+ return /^(next-auth|@auth|passport|jsonwebtoken|bcrypt)/.test(name);
157
+ }
158
+ isTesting(name) {
159
+ return /^(jest|@testing-library|vitest|cypress|playwright|mocha|chai)/.test(name);
160
+ }
161
+ isBuildTool(name) {
162
+ return ['webpack', 'vite', 'rollup', 'esbuild', 'turbopack', 'typescript', 'babel'].includes(name) ||
163
+ name.startsWith('@babel/');
164
+ }
165
+ isUtility(name) {
166
+ return ['lodash', 'date-fns', 'dayjs', 'moment', 'uuid', 'nanoid', 'zod', 'yup'].includes(name);
167
+ }
168
+ getPackageDescription(name) {
169
+ const descriptions = {
170
+ 'react': 'UI library for building user interfaces',
171
+ 'next': 'React framework for production',
172
+ '@supabase/supabase-js': 'Supabase client for database and auth',
173
+ 'tailwindcss': 'Utility-first CSS framework',
174
+ 'typescript': 'Typed superset of JavaScript',
175
+ 'axios': 'HTTP client for API requests',
176
+ 'zod': 'TypeScript-first schema validation',
177
+ 'react-hook-form': 'Form validation library',
178
+ 'lucide-react': 'Icon library',
179
+ 'date-fns': 'Date utility library',
180
+ };
181
+ return descriptions[name] || 'Package dependency';
182
+ }
183
+ identifyDatabase(context) {
184
+ const deps = {
185
+ ...context.packageJson?.dependencies,
186
+ ...context.packageJson?.devDependencies,
187
+ };
188
+ if (deps?.['@supabase/supabase-js']) {
189
+ return '**Supabase** - PostgreSQL database with real-time capabilities and built-in authentication';
190
+ }
191
+ if (deps?.['@prisma/client']) {
192
+ return '**Prisma** - Next-generation ORM for Node.js and TypeScript';
193
+ }
194
+ if (deps?.['mongoose']) {
195
+ return '**MongoDB** with Mongoose ODM';
196
+ }
197
+ if (deps?.['pg']) {
198
+ return '**PostgreSQL** with node-postgres driver';
199
+ }
200
+ if (deps?.['mysql'] || deps?.['mysql2']) {
201
+ return '**MySQL** database';
202
+ }
203
+ const hasDbFiles = this.getFilesMatching(context, /database|db|schema/).length > 0;
204
+ if (hasDbFiles) {
205
+ return 'Database configuration detected but specific technology not identified';
206
+ }
207
+ return 'No database configuration detected';
208
+ }
209
+ identifyBuildTools(context) {
210
+ const deps = {
211
+ ...context.packageJson?.dependencies,
212
+ ...context.packageJson?.devDependencies,
213
+ };
214
+ const tools = [];
215
+ if (deps?.['webpack'])
216
+ tools.push('**Webpack** - Module bundler');
217
+ if (deps?.['vite'])
218
+ tools.push('**Vite** - Fast build tool');
219
+ if (deps?.['turbopack'])
220
+ tools.push('**Turbopack** - Incremental bundler');
221
+ if (deps?.['esbuild'])
222
+ tools.push('**esbuild** - Fast JavaScript bundler');
223
+ if (deps?.['typescript'])
224
+ tools.push('**TypeScript Compiler** - Type checking and compilation');
225
+ if (deps?.['@babel/core'])
226
+ tools.push('**Babel** - JavaScript compiler');
227
+ if (deps?.['postcss'])
228
+ tools.push('**PostCSS** - CSS transformation tool');
229
+ if (deps?.['tailwindcss'])
230
+ tools.push('**Tailwind CSS** - Utility-first CSS framework');
231
+ if (tools.length === 0) {
232
+ return 'Build tools not explicitly configured or using framework defaults';
233
+ }
234
+ return this.formatList(tools);
235
+ }
236
+ identifyTestingTools(context) {
237
+ const deps = {
238
+ ...context.packageJson?.dependencies,
239
+ ...context.packageJson?.devDependencies,
240
+ };
241
+ const tools = [];
242
+ if (deps?.['jest'])
243
+ tools.push('**Jest** - JavaScript testing framework');
244
+ if (deps?.['vitest'])
245
+ tools.push('**Vitest** - Vite-native testing framework');
246
+ if (deps?.['@testing-library/react'])
247
+ tools.push('**React Testing Library** - React component testing');
248
+ if (deps?.['cypress'])
249
+ tools.push('**Cypress** - E2E testing framework');
250
+ if (deps?.['playwright'])
251
+ tools.push('**Playwright** - Browser automation and testing');
252
+ if (tools.length === 0) {
253
+ return 'No testing framework detected';
254
+ }
255
+ return this.formatList(tools);
256
+ }
257
+ analyzeDeployment(context) {
258
+ const hasVercelConfig = this.getFilesMatching(context, /vercel\.json/).length > 0;
259
+ const hasDockerfile = this.getFilesMatching(context, /Dockerfile/).length > 0;
260
+ const hasGithubActions = this.getFilesMatching(context, /\.github\/workflows/).length > 0;
261
+ let deployment = '';
262
+ if (hasVercelConfig) {
263
+ deployment += '- **Vercel** - Configuration detected for Vercel deployment\n';
264
+ }
265
+ if (hasDockerfile) {
266
+ deployment += '- **Docker** - Containerized deployment configuration\n';
267
+ }
268
+ if (hasGithubActions) {
269
+ deployment += '- **GitHub Actions** - CI/CD pipeline configured\n';
270
+ }
271
+ if (context.framework === 'Next.js') {
272
+ deployment += '- Compatible with **Vercel**, **Netlify**, or any Node.js hosting\n';
273
+ }
274
+ if (!deployment) {
275
+ deployment = 'Deployment configuration not explicitly defined';
276
+ }
277
+ return deployment;
278
+ }
279
+ describeEnvironmentSetup(context) {
280
+ const pkg = context.packageJson;
281
+ if (!pkg)
282
+ return 'Package.json not found';
283
+ let setup = '**Requirements:**\n\n';
284
+ if (pkg.engines?.node) {
285
+ setup += `- Node.js ${pkg.engines.node}\n`;
286
+ }
287
+ else {
288
+ setup += '- Node.js (version not specified, recommend LTS)\n';
289
+ }
290
+ if (pkg.engines?.npm) {
291
+ setup += `- npm ${pkg.engines.npm}\n`;
292
+ }
293
+ setup += '\n**Installation:**\n\n';
294
+ setup += '```bash\n';
295
+ setup += 'npm install\n';
296
+ setup += '```\n\n';
297
+ if (pkg.scripts) {
298
+ setup += '**Available Scripts:**\n\n';
299
+ const importantScripts = ['dev', 'build', 'start', 'test', 'lint'];
300
+ for (const script of importantScripts) {
301
+ if (pkg.scripts[script]) {
302
+ setup += `- \`npm run ${script}\` - ${this.getScriptDescription(script)}\n`;
303
+ }
304
+ }
305
+ }
306
+ return setup;
307
+ }
308
+ getScriptDescription(script) {
309
+ const descriptions = {
310
+ 'dev': 'Start development server',
311
+ 'build': 'Build for production',
312
+ 'start': 'Start production server',
313
+ 'test': 'Run tests',
314
+ 'lint': 'Run linter',
315
+ };
316
+ return descriptions[script] || 'Run script';
317
+ }
318
+ }
319
+ exports.StackAnalyzer = StackAnalyzer;
320
+ //# sourceMappingURL=StackAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/StackAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { ProjectContext, AnalysisOutput, Section, FileInfo } from '../../types';
2
+ export declare abstract class BaseAnalyzer {
3
+ abstract name: string;
4
+ abstract outputPath: string;
5
+ abstract category: 'general' | 'tech';
6
+ /**
7
+ * Main analysis method - must be implemented by subclasses
8
+ */
9
+ abstract analyze(context: ProjectContext): Promise<AnalysisOutput>;
10
+ /**
11
+ * Helper: Extract metadata from project context
12
+ */
13
+ protected extractMetadata(context: ProjectContext): Record<string, any>;
14
+ /**
15
+ * Helper: Create a section
16
+ */
17
+ protected createSection(heading: string, content: string): Section;
18
+ /**
19
+ * Helper: Filter files by extension
20
+ */
21
+ protected filterFilesByExtension(context: ProjectContext, extensions: string[]): FileInfo[];
22
+ /**
23
+ * Helper: Count files by extension
24
+ */
25
+ protected countFilesByExtension(context: ProjectContext): Record<string, number>;
26
+ /**
27
+ * Helper: Get file paths matching pattern
28
+ */
29
+ protected getFilesMatching(context: ProjectContext, pattern: RegExp): FileInfo[];
30
+ /**
31
+ * Helper: Format list as markdown
32
+ */
33
+ protected formatList(items: string[]): string;
34
+ /**
35
+ * Helper: Format object as markdown table
36
+ */
37
+ protected formatTable(data: Record<string, string>): string;
38
+ }
39
+ //# sourceMappingURL=BaseAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/base/BaseAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEhF,8BAAsB,YAAY;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAElE;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAUvE;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAOlE;;OAEG;IACH,SAAS,CAAC,sBAAsB,CAC9B,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAAE,GACnB,QAAQ,EAAE;IAMb;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,cAAc,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAWzB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACxB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,GACd,QAAQ,EAAE;IAIb;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAI7C;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;CAM5D"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseAnalyzer = void 0;
4
+ class BaseAnalyzer {
5
+ /**
6
+ * Helper: Extract metadata from project context
7
+ */
8
+ extractMetadata(context) {
9
+ return {
10
+ projectName: context.packageJson?.name || 'Unknown',
11
+ version: context.packageJson?.version,
12
+ description: context.packageJson?.description,
13
+ framework: context.framework,
14
+ fileCount: context.files.length,
15
+ };
16
+ }
17
+ /**
18
+ * Helper: Create a section
19
+ */
20
+ createSection(heading, content) {
21
+ return {
22
+ heading,
23
+ content,
24
+ };
25
+ }
26
+ /**
27
+ * Helper: Filter files by extension
28
+ */
29
+ filterFilesByExtension(context, extensions) {
30
+ return context.files.filter((file) => extensions.includes(file.extension));
31
+ }
32
+ /**
33
+ * Helper: Count files by extension
34
+ */
35
+ countFilesByExtension(context) {
36
+ const counts = {};
37
+ for (const file of context.files) {
38
+ const ext = file.extension || 'no-extension';
39
+ counts[ext] = (counts[ext] || 0) + 1;
40
+ }
41
+ return counts;
42
+ }
43
+ /**
44
+ * Helper: Get file paths matching pattern
45
+ */
46
+ getFilesMatching(context, pattern) {
47
+ return context.files.filter((file) => pattern.test(file.relativePath));
48
+ }
49
+ /**
50
+ * Helper: Format list as markdown
51
+ */
52
+ formatList(items) {
53
+ return items.map((item) => `- ${item}`).join('\n');
54
+ }
55
+ /**
56
+ * Helper: Format object as markdown table
57
+ */
58
+ formatTable(data) {
59
+ const rows = Object.entries(data).map(([key, value]) => `| ${key} | ${value} |`);
60
+ return ['| Key | Value |', '|-----|-------|', ...rows].join('\n');
61
+ }
62
+ }
63
+ exports.BaseAnalyzer = BaseAnalyzer;
64
+ //# sourceMappingURL=BaseAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAnalyzer.js","sourceRoot":"","sources":["../../../src/analyzers/base/BaseAnalyzer.ts"],"names":[],"mappings":";;;AAEA,MAAsB,YAAY;IAUhC;;OAEG;IACO,eAAe,CAAC,OAAuB;QAC/C,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,SAAS;YACnD,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO;YACrC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW;YAC7C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;SAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,aAAa,CAAC,OAAe,EAAE,OAAe;QACtD,OAAO;YACL,OAAO;YACP,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,sBAAsB,CAC9B,OAAuB,EACvB,UAAoB;QAEpB,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACnC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,qBAAqB,CAC7B,OAAuB;QAEvB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACO,gBAAgB,CACxB,OAAuB,EACvB,OAAe;QAEf,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,KAAe;QAClC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACO,WAAW,CAAC,IAA4B;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CACnC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,KAAK,IAAI,CAC1C,CAAC;QACF,OAAO,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;CACF;AAvFD,oCAuFC"}
@@ -0,0 +1,7 @@
1
+ export * from './base/BaseAnalyzer';
2
+ export * from './ProjectAnalyzer';
3
+ export * from './ImpactAnalyzer';
4
+ export * from './ArchitectureAnalyzer';
5
+ export * from './StackAnalyzer';
6
+ export * from './FeaturesAnalyzer';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./base/BaseAnalyzer"), exports);
18
+ __exportStar(require("./ProjectAnalyzer"), exports);
19
+ __exportStar(require("./ImpactAnalyzer"), exports);
20
+ __exportStar(require("./ArchitectureAnalyzer"), exports);
21
+ __exportStar(require("./StackAnalyzer"), exports);
22
+ __exportStar(require("./FeaturesAnalyzer"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,oDAAkC;AAClC,mDAAiC;AACjC,yDAAuC;AACvC,kDAAgC;AAChC,qDAAmC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAGA,wBAAsB,eAAe,kBA+BpC"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAYA,wBAAsB,eAAe,kBA8CpC"}
@@ -6,30 +6,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.generateCommand = generateCommand;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const ora_1 = __importDefault(require("ora"));
9
+ const orchestrator_1 = require("../../orchestrator");
10
+ const analyzers_1 = require("../../analyzers");
11
+ const utils_1 = require("../../utils");
9
12
  async function generateCommand() {
10
- const spinner = (0, ora_1.default)('Generating documentation...').start();
13
+ const spinner = (0, ora_1.default)('Initializing...').start();
11
14
  try {
12
- // TODO: Implement orchestrator and analyzers
13
- spinner.text = 'Analyzing project structure...';
14
- await new Promise(resolve => setTimeout(resolve, 1000));
15
- spinner.text = 'Running analyzers...';
16
- await new Promise(resolve => setTimeout(resolve, 1000));
17
- spinner.text = 'Generating markdown files...';
18
- await new Promise(resolve => setTimeout(resolve, 1000));
19
- spinner.succeed(chalk_1.default.green('Documentation generated successfully!'));
20
- console.log(chalk_1.default.blue('\nšŸ“„ Generated files:'));
21
- console.log(chalk_1.default.gray(' .devcache/docs/general/project-overview.md'));
22
- console.log(chalk_1.default.gray(' .devcache/docs/general/project-impact.md'));
23
- console.log(chalk_1.default.gray(' .devcache/docs/tech/architecture-project.md'));
24
- console.log(chalk_1.default.gray(' .devcache/docs/tech/stack-project.md'));
25
- console.log(chalk_1.default.gray(' .devcache/docs/tech/features.md'));
26
- console.log();
27
- console.log(chalk_1.default.blue('Next step:'), chalk_1.default.cyan('devcache push'));
28
- console.log();
15
+ // Initialize orchestrator
16
+ const orchestrator = new orchestrator_1.Orchestrator(process.cwd());
17
+ await orchestrator.initialize();
18
+ // Register all analyzers
19
+ orchestrator.registerAnalyzer(new analyzers_1.ProjectAnalyzer());
20
+ orchestrator.registerAnalyzer(new analyzers_1.ImpactAnalyzer());
21
+ orchestrator.registerAnalyzer(new analyzers_1.ArchitectureAnalyzer());
22
+ orchestrator.registerAnalyzer(new analyzers_1.StackAnalyzer());
23
+ orchestrator.registerAnalyzer(new analyzers_1.FeaturesAnalyzer());
24
+ spinner.succeed('Initialized');
25
+ // Run analysis
26
+ const results = await orchestrator.analyze();
27
+ // Display summary
28
+ const summary = orchestrator.getSummary(results);
29
+ console.log(summary);
30
+ const successful = results.filter((r) => r.success).length;
31
+ const failed = results.filter((r) => !r.success).length;
32
+ if (failed > 0) {
33
+ utils_1.Logger.warn(`${failed} analyzer(s) failed. Check the output above for details.`);
34
+ }
35
+ if (successful > 0) {
36
+ console.log(chalk_1.default.blue('\nNext step:'), chalk_1.default.cyan('devcache push'));
37
+ console.log();
38
+ }
29
39
  }
30
40
  catch (error) {
31
41
  spinner.fail(chalk_1.default.red('Generation failed'));
32
- console.error(error);
42
+ utils_1.Logger.error(error.message);
43
+ if (error.message.includes('not initialized')) {
44
+ console.log(chalk_1.default.yellow('\nRun'), chalk_1.default.cyan('devcache init'), chalk_1.default.yellow('first to initialize the project.'));
45
+ }
33
46
  process.exit(1);
34
47
  }
35
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":";;;;;AAGA,0CA+BC;AAlCD,kDAA0B;AAC1B,8CAAsB;AAEf,KAAK,UAAU,eAAe;IACnC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3D,IAAI,CAAC;QACH,6CAA6C;QAC7C,OAAO,CAAC,IAAI,GAAG,gCAAgC,CAAC;QAChD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACtC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,OAAO,CAAC,IAAI,GAAG,8BAA8B,CAAC;QAC9C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAEtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":";;;;;AAYA,0CA8CC;AA1DD,kDAA0B;AAC1B,8CAAsB;AACtB,qDAAkD;AAClD,+CAMyB;AACzB,uCAAqC;AAE9B,KAAK,UAAU,eAAe;IACnC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE/C,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,YAAY,GAAG,IAAI,2BAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAEhC,yBAAyB;QACzB,YAAY,CAAC,gBAAgB,CAAC,IAAI,2BAAe,EAAE,CAAC,CAAC;QACrD,YAAY,CAAC,gBAAgB,CAAC,IAAI,0BAAc,EAAE,CAAC,CAAC;QACpD,YAAY,CAAC,gBAAgB,CAAC,IAAI,gCAAoB,EAAE,CAAC,CAAC;QAC1D,YAAY,CAAC,gBAAgB,CAAC,IAAI,yBAAa,EAAE,CAAC,CAAC;QACnD,YAAY,CAAC,gBAAgB,CAAC,IAAI,4BAAgB,EAAE,CAAC,CAAC;QAEtD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAE/B,eAAe;QACf,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAE7C,kBAAkB;QAClB,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAErB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAExD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,cAAM,CAAC,IAAI,CAAC,GAAG,MAAM,0DAA0D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,cAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,eAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;QACpH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,kBA8BjC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AASA,wBAAsB,YAAY,kBA0GjC"}