projex-cli 0.2.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.
Files changed (85) hide show
  1. package/dist/cli.d.ts +6 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +321 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/event-bus.d.ts +35 -0
  6. package/dist/event-bus.d.ts.map +1 -0
  7. package/dist/event-bus.js +71 -0
  8. package/dist/event-bus.js.map +1 -0
  9. package/dist/events/event-bus.d.ts +35 -0
  10. package/dist/events/event-bus.d.ts.map +1 -0
  11. package/dist/events/event-bus.js +71 -0
  12. package/dist/events/event-bus.js.map +1 -0
  13. package/dist/events/index.d.ts +3 -0
  14. package/dist/events/index.d.ts.map +1 -0
  15. package/dist/events/index.js +3 -0
  16. package/dist/events/index.js.map +1 -0
  17. package/dist/events/types.d.ts +143 -0
  18. package/dist/events/types.d.ts.map +1 -0
  19. package/dist/events/types.js +6 -0
  20. package/dist/events/types.js.map +1 -0
  21. package/dist/index.d.ts +11 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +12 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/inference/enricher.d.ts +18 -0
  26. package/dist/inference/enricher.d.ts.map +1 -0
  27. package/dist/inference/enricher.js +290 -0
  28. package/dist/inference/enricher.js.map +1 -0
  29. package/dist/inference/index.d.ts +5 -0
  30. package/dist/inference/index.d.ts.map +1 -0
  31. package/dist/inference/index.js +5 -0
  32. package/dist/inference/index.js.map +1 -0
  33. package/dist/inference/lifecycle-tracker.d.ts +40 -0
  34. package/dist/inference/lifecycle-tracker.d.ts.map +1 -0
  35. package/dist/inference/lifecycle-tracker.js +132 -0
  36. package/dist/inference/lifecycle-tracker.js.map +1 -0
  37. package/dist/inference/portfolio-generator.d.ts +44 -0
  38. package/dist/inference/portfolio-generator.d.ts.map +1 -0
  39. package/dist/inference/portfolio-generator.js +239 -0
  40. package/dist/inference/portfolio-generator.js.map +1 -0
  41. package/dist/inference/project-detector.d.ts +17 -0
  42. package/dist/inference/project-detector.d.ts.map +1 -0
  43. package/dist/inference/project-detector.js +127 -0
  44. package/dist/inference/project-detector.js.map +1 -0
  45. package/dist/ingestion/github-client.d.ts +56 -0
  46. package/dist/ingestion/github-client.d.ts.map +1 -0
  47. package/dist/ingestion/github-client.js +213 -0
  48. package/dist/ingestion/github-client.js.map +1 -0
  49. package/dist/ingestion/github-poller.d.ts +41 -0
  50. package/dist/ingestion/github-poller.d.ts.map +1 -0
  51. package/dist/ingestion/github-poller.js +121 -0
  52. package/dist/ingestion/github-poller.js.map +1 -0
  53. package/dist/ingestion/normalizer.d.ts +41 -0
  54. package/dist/ingestion/normalizer.d.ts.map +1 -0
  55. package/dist/ingestion/normalizer.js +173 -0
  56. package/dist/ingestion/normalizer.js.map +1 -0
  57. package/dist/integrations/analyzer.d.ts +74 -0
  58. package/dist/integrations/analyzer.d.ts.map +1 -0
  59. package/dist/integrations/analyzer.js +287 -0
  60. package/dist/integrations/analyzer.js.map +1 -0
  61. package/dist/integrations/index.d.ts +4 -0
  62. package/dist/integrations/index.d.ts.map +1 -0
  63. package/dist/integrations/index.js +5 -0
  64. package/dist/integrations/index.js.map +1 -0
  65. package/dist/integrations/injectors.d.ts +60 -0
  66. package/dist/integrations/injectors.d.ts.map +1 -0
  67. package/dist/integrations/injectors.js +361 -0
  68. package/dist/integrations/injectors.js.map +1 -0
  69. package/dist/integrations/template-generator.d.ts +45 -0
  70. package/dist/integrations/template-generator.d.ts.map +1 -0
  71. package/dist/integrations/template-generator.js +187 -0
  72. package/dist/integrations/template-generator.js.map +1 -0
  73. package/dist/storage/index.d.ts +2 -0
  74. package/dist/storage/index.d.ts.map +1 -0
  75. package/dist/storage/index.js +2 -0
  76. package/dist/storage/index.js.map +1 -0
  77. package/dist/storage/project-store.d.ts +23 -0
  78. package/dist/storage/project-store.d.ts.map +1 -0
  79. package/dist/storage/project-store.js +107 -0
  80. package/dist/storage/project-store.js.map +1 -0
  81. package/dist/types.d.ts +143 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/types.js +6 -0
  84. package/dist/types.js.map +1 -0
  85. package/package.json +55 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Design Analyzer - Detects portfolio design patterns and extracts styles
3
+ * Supports: HTML/CSS, Markdown (Jekyll/Hugo), React/Vue
4
+ */
5
+ export type PortfolioType = 'html' | 'react' | 'vue' | 'nextjs' | 'gatsby' | 'jekyll' | 'hugo' | 'markdown' | 'unknown';
6
+ export interface ColorPalette {
7
+ primary: string[];
8
+ secondary: string[];
9
+ background: string[];
10
+ text: string[];
11
+ accent: string[];
12
+ }
13
+ export interface TypographyInfo {
14
+ fonts: string[];
15
+ headingFont: string | null;
16
+ bodyFont: string | null;
17
+ }
18
+ export interface CardTemplate {
19
+ html: string;
20
+ selector: string;
21
+ classes: string[];
22
+ }
23
+ export interface PortfolioAnalysis {
24
+ type: PortfolioType;
25
+ projectsFile: string | null;
26
+ projectSelector: string | null;
27
+ cardTemplate: CardTemplate | null;
28
+ cssVariables: Record<string, string>;
29
+ colors: ColorPalette;
30
+ typography: TypographyInfo;
31
+ hasGrid: boolean;
32
+ gridColumns: number;
33
+ }
34
+ export declare class DesignAnalyzer {
35
+ private portfolioPath;
36
+ constructor(portfolioPath: string);
37
+ /**
38
+ * Analyze the portfolio and extract design patterns
39
+ */
40
+ analyze(): Promise<PortfolioAnalysis>;
41
+ /**
42
+ * Detect the type of portfolio based on project files
43
+ */
44
+ private detectPortfolioType;
45
+ /**
46
+ * Analyze plain HTML/CSS portfolio
47
+ */
48
+ private analyzeHTML;
49
+ /**
50
+ * Analyze React-based portfolio
51
+ */
52
+ private analyzeReact;
53
+ /**
54
+ * Analyze Jekyll/Hugo/Markdown portfolio
55
+ */
56
+ private analyzeMarkdown;
57
+ /**
58
+ * Analyze CSS files to extract design tokens
59
+ */
60
+ private analyzeCSS;
61
+ /**
62
+ * Extract card template from HTML
63
+ */
64
+ private extractCardFromHTML;
65
+ /**
66
+ * Extract class names from HTML
67
+ */
68
+ private extractClasses;
69
+ /**
70
+ * Find files with specific extensions recursively
71
+ */
72
+ private findFiles;
73
+ }
74
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/integrations/analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAExH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IACvB,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,EAAE,MAAM;IAIjC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoC3C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;OAEG;YACW,WAAW;IA8BzB;;OAEG;YACW,YAAY;IAkC1B;;OAEG;YACW,eAAe;IAwC7B;;OAEG;YACW,UAAU;IAkDxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,SAAS;CA8BpB"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Design Analyzer - Detects portfolio design patterns and extracts styles
3
+ * Supports: HTML/CSS, Markdown (Jekyll/Hugo), React/Vue
4
+ */
5
+ import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
6
+ import { join, extname, basename } from 'path';
7
+ export class DesignAnalyzer {
8
+ portfolioPath;
9
+ constructor(portfolioPath) {
10
+ this.portfolioPath = portfolioPath;
11
+ }
12
+ /**
13
+ * Analyze the portfolio and extract design patterns
14
+ */
15
+ async analyze() {
16
+ const type = this.detectPortfolioType();
17
+ const analysis = {
18
+ type,
19
+ projectsFile: null,
20
+ projectSelector: null,
21
+ cardTemplate: null,
22
+ cssVariables: {},
23
+ colors: { primary: [], secondary: [], background: [], text: [], accent: [] },
24
+ typography: { fonts: [], headingFont: null, bodyFont: null },
25
+ hasGrid: false,
26
+ gridColumns: 3,
27
+ };
28
+ switch (type) {
29
+ case 'html':
30
+ await this.analyzeHTML(analysis);
31
+ break;
32
+ case 'react':
33
+ case 'nextjs':
34
+ case 'gatsby':
35
+ await this.analyzeReact(analysis);
36
+ break;
37
+ case 'jekyll':
38
+ case 'hugo':
39
+ case 'markdown':
40
+ await this.analyzeMarkdown(analysis);
41
+ break;
42
+ default:
43
+ console.log('Unknown portfolio type, using defaults');
44
+ }
45
+ return analysis;
46
+ }
47
+ /**
48
+ * Detect the type of portfolio based on project files
49
+ */
50
+ detectPortfolioType() {
51
+ // Check for package.json
52
+ const pkgPath = join(this.portfolioPath, 'package.json');
53
+ if (existsSync(pkgPath)) {
54
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
55
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
56
+ if (deps['next'])
57
+ return 'nextjs';
58
+ if (deps['gatsby'])
59
+ return 'gatsby';
60
+ if (deps['vue'] || deps['nuxt'])
61
+ return 'vue';
62
+ if (deps['react'])
63
+ return 'react';
64
+ }
65
+ // Check for Jekyll
66
+ if (existsSync(join(this.portfolioPath, '_config.yml'))) {
67
+ return 'jekyll';
68
+ }
69
+ // Check for Hugo
70
+ if (existsSync(join(this.portfolioPath, 'config.toml')) ||
71
+ existsSync(join(this.portfolioPath, 'hugo.toml'))) {
72
+ return 'hugo';
73
+ }
74
+ // Check for index.html
75
+ if (existsSync(join(this.portfolioPath, 'index.html'))) {
76
+ return 'html';
77
+ }
78
+ // Check for markdown files
79
+ const files = readdirSync(this.portfolioPath);
80
+ if (files.some(f => f.endsWith('.md'))) {
81
+ return 'markdown';
82
+ }
83
+ return 'unknown';
84
+ }
85
+ /**
86
+ * Analyze plain HTML/CSS portfolio
87
+ */
88
+ async analyzeHTML(analysis) {
89
+ const indexPath = join(this.portfolioPath, 'index.html');
90
+ if (!existsSync(indexPath))
91
+ return;
92
+ const html = readFileSync(indexPath, 'utf-8');
93
+ // Find projects section
94
+ analysis.projectsFile = 'index.html';
95
+ // Detect project card selectors
96
+ const selectorPatterns = [
97
+ '.project', '.project-card', '.portfolio-item', '.work-item',
98
+ '[class*="project"]', '[class*="portfolio"]', '.card',
99
+ ];
100
+ for (const selector of selectorPatterns) {
101
+ const regex = new RegExp(`class=["'][^"']*${selector.replace('.', '')}[^"']*["']`, 'i');
102
+ if (regex.test(html)) {
103
+ analysis.projectSelector = selector;
104
+ break;
105
+ }
106
+ }
107
+ // Extract card template
108
+ analysis.cardTemplate = this.extractCardFromHTML(html, analysis.projectSelector);
109
+ // Find and analyze CSS
110
+ await this.analyzeCSS(analysis);
111
+ }
112
+ /**
113
+ * Analyze React-based portfolio
114
+ */
115
+ async analyzeReact(analysis) {
116
+ // Look for components that might contain projects
117
+ const componentDirs = ['src/components', 'components', 'src/pages', 'pages', 'app'];
118
+ for (const dir of componentDirs) {
119
+ const fullPath = join(this.portfolioPath, dir);
120
+ if (!existsSync(fullPath))
121
+ continue;
122
+ const files = this.findFiles(fullPath, ['.tsx', '.jsx', '.js']);
123
+ for (const file of files) {
124
+ const content = readFileSync(file, 'utf-8');
125
+ // Look for project-related components
126
+ if (/project|portfolio|work/i.test(content)) {
127
+ analysis.projectsFile = file.replace(this.portfolioPath, '');
128
+ // Extract JSX card pattern
129
+ const cardMatch = content.match(/<(?:div|article)[^>]*className=["'][^"']*(?:project|card|portfolio)[^"']*["'][^>]*>([\s\S]*?)<\/(?:div|article)>/i);
130
+ if (cardMatch) {
131
+ analysis.cardTemplate = {
132
+ html: cardMatch[0],
133
+ selector: '.project-card',
134
+ classes: this.extractClasses(cardMatch[0]),
135
+ };
136
+ }
137
+ break;
138
+ }
139
+ }
140
+ }
141
+ await this.analyzeCSS(analysis);
142
+ }
143
+ /**
144
+ * Analyze Jekyll/Hugo/Markdown portfolio
145
+ */
146
+ async analyzeMarkdown(analysis) {
147
+ // Look for projects in _data, data, or content directories
148
+ const dataDirs = ['_data', 'data', '_projects', 'content/projects', 'projects'];
149
+ for (const dir of dataDirs) {
150
+ const fullPath = join(this.portfolioPath, dir);
151
+ if (existsSync(fullPath)) {
152
+ const files = this.findFiles(fullPath, ['.yml', '.yaml', '.json', '.md']);
153
+ if (files.length > 0) {
154
+ analysis.projectsFile = dir;
155
+ break;
156
+ }
157
+ }
158
+ }
159
+ // Look for includes/layouts with project cards
160
+ const layoutDirs = ['_includes', '_layouts', 'layouts', 'partials'];
161
+ for (const dir of layoutDirs) {
162
+ const fullPath = join(this.portfolioPath, dir);
163
+ if (!existsSync(fullPath))
164
+ continue;
165
+ const files = this.findFiles(fullPath, ['.html', '.liquid', '.njk']);
166
+ for (const file of files) {
167
+ const content = readFileSync(file, 'utf-8');
168
+ if (/project|portfolio/i.test(basename(file))) {
169
+ analysis.cardTemplate = {
170
+ html: content,
171
+ selector: '.project',
172
+ classes: this.extractClasses(content),
173
+ };
174
+ break;
175
+ }
176
+ }
177
+ }
178
+ await this.analyzeCSS(analysis);
179
+ }
180
+ /**
181
+ * Analyze CSS files to extract design tokens
182
+ */
183
+ async analyzeCSS(analysis) {
184
+ const cssFiles = this.findFiles(this.portfolioPath, ['.css', '.scss', '.sass']);
185
+ for (const file of cssFiles) {
186
+ const css = readFileSync(file, 'utf-8');
187
+ // Extract CSS custom properties
188
+ const varMatches = css.matchAll(/--([a-zA-Z0-9-]+):\s*([^;]+);/g);
189
+ for (const match of varMatches) {
190
+ analysis.cssVariables[`--${match[1]}`] = match[2].trim();
191
+ }
192
+ // Extract colors
193
+ const colorMatches = css.matchAll(/#[0-9a-fA-F]{3,8}|rgb\([^)]+\)|hsl\([^)]+\)/g);
194
+ const colors = new Set();
195
+ for (const match of colorMatches) {
196
+ colors.add(match[0]);
197
+ }
198
+ // Categorize colors (simplified)
199
+ const colorArray = Array.from(colors).slice(0, 20);
200
+ analysis.colors.primary = colorArray.slice(0, 3);
201
+ analysis.colors.background = colorArray.slice(3, 6);
202
+ analysis.colors.text = colorArray.slice(6, 9);
203
+ // Extract fonts
204
+ const fontMatches = css.matchAll(/font-family:\s*(['"]?)([^;'"]+)\1/g);
205
+ for (const match of fontMatches) {
206
+ const fonts = match[2].split(',').map(f => f.trim().replace(/["']/g, ''));
207
+ analysis.typography.fonts.push(...fonts);
208
+ }
209
+ // Detect grid
210
+ if (/display:\s*grid/.test(css)) {
211
+ analysis.hasGrid = true;
212
+ const colMatch = css.match(/grid-template-columns:\s*repeat\((\d+)/);
213
+ if (colMatch) {
214
+ analysis.gridColumns = parseInt(colMatch[1]);
215
+ }
216
+ }
217
+ }
218
+ // Dedupe fonts
219
+ analysis.typography.fonts = [...new Set(analysis.typography.fonts)];
220
+ if (analysis.typography.fonts.length > 0) {
221
+ analysis.typography.headingFont = analysis.typography.fonts[0];
222
+ analysis.typography.bodyFont = analysis.typography.fonts[1] || analysis.typography.fonts[0];
223
+ }
224
+ }
225
+ /**
226
+ * Extract card template from HTML
227
+ */
228
+ extractCardFromHTML(html, selector) {
229
+ if (!selector)
230
+ return null;
231
+ const className = selector.replace('.', '');
232
+ const regex = new RegExp(`<(?:div|article|section)[^>]*class=["'][^"']*${className}[^"']*["'][^>]*>[\\s\\S]*?<\\/(?:div|article|section)>`, 'i');
233
+ const match = html.match(regex);
234
+ if (match) {
235
+ return {
236
+ html: match[0],
237
+ selector,
238
+ classes: this.extractClasses(match[0]),
239
+ };
240
+ }
241
+ return null;
242
+ }
243
+ /**
244
+ * Extract class names from HTML
245
+ */
246
+ extractClasses(html) {
247
+ const matches = html.matchAll(/class=["']([^"']+)["']/g);
248
+ const classes = new Set();
249
+ for (const match of matches) {
250
+ match[1].split(/\s+/).forEach(c => classes.add(c));
251
+ }
252
+ return Array.from(classes);
253
+ }
254
+ /**
255
+ * Find files with specific extensions recursively
256
+ */
257
+ findFiles(dir, extensions, maxDepth = 3) {
258
+ const files = [];
259
+ const walk = (currentDir, depth) => {
260
+ if (depth > maxDepth)
261
+ return;
262
+ if (!existsSync(currentDir))
263
+ return;
264
+ try {
265
+ const entries = readdirSync(currentDir);
266
+ for (const entry of entries) {
267
+ if (entry.startsWith('.') || entry === 'node_modules')
268
+ continue;
269
+ const fullPath = join(currentDir, entry);
270
+ const stat = statSync(fullPath);
271
+ if (stat.isDirectory()) {
272
+ walk(fullPath, depth + 1);
273
+ }
274
+ else if (extensions.includes(extname(entry))) {
275
+ files.push(fullPath);
276
+ }
277
+ }
278
+ }
279
+ catch (e) {
280
+ // Skip unreadable directories
281
+ }
282
+ };
283
+ walk(dir, 0);
284
+ return files;
285
+ }
286
+ }
287
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/integrations/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './analyzer.js';
2
+ export * from './template-generator.js';
3
+ export * from './injectors.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Integrations barrel export
2
+ export * from './analyzer.js';
3
+ export * from './template-generator.js';
4
+ export * from './injectors.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Portfolio Injectors - Insert generated project cards into portfolio files
3
+ * Supports: HTML, Markdown, React/JSX
4
+ */
5
+ import type { PortfolioAnalysis } from './analyzer.js';
6
+ import type { GeneratedCard } from './template-generator.js';
7
+ export interface InjectionResult {
8
+ success: boolean;
9
+ file: string;
10
+ message: string;
11
+ backup?: string;
12
+ }
13
+ export interface InjectorOptions {
14
+ autoCommit: boolean;
15
+ commitMessage?: string;
16
+ createBackup: boolean;
17
+ }
18
+ /**
19
+ * Base class for portfolio injectors
20
+ */
21
+ declare abstract class BaseInjector {
22
+ protected portfolioPath: string;
23
+ protected analysis: PortfolioAnalysis;
24
+ protected options: InjectorOptions;
25
+ constructor(portfolioPath: string, analysis: PortfolioAnalysis, options: InjectorOptions);
26
+ abstract inject(card: GeneratedCard, projectId: string): Promise<InjectionResult>;
27
+ protected backup(filePath: string): string | undefined;
28
+ protected gitCommit(files: string[], message: string): void;
29
+ }
30
+ /**
31
+ * HTML Portfolio Injector
32
+ */
33
+ export declare class HTMLInjector extends BaseInjector {
34
+ inject(card: GeneratedCard, projectId: string): Promise<InjectionResult>;
35
+ private findTargetFile;
36
+ private findContainerPattern;
37
+ private insertCard;
38
+ private detectIndent;
39
+ }
40
+ /**
41
+ * Markdown Portfolio Injector
42
+ */
43
+ export declare class MarkdownInjector extends BaseInjector {
44
+ inject(card: GeneratedCard, projectId: string): Promise<InjectionResult>;
45
+ private findTargetFile;
46
+ }
47
+ /**
48
+ * React/JSX Portfolio Injector
49
+ */
50
+ export declare class ReactInjector extends BaseInjector {
51
+ inject(card: GeneratedCard, projectId: string): Promise<InjectionResult>;
52
+ private findOrCreateDataFile;
53
+ private parseCardToObject;
54
+ }
55
+ /**
56
+ * Factory function to create the appropriate injector
57
+ */
58
+ export declare function createInjector(portfolioPath: string, analysis: PortfolioAnalysis, options: InjectorOptions): BaseInjector;
59
+ export {};
60
+ //# sourceMappingURL=injectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectors.d.ts","sourceRoot":"","sources":["../../src/integrations/injectors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,uBAAe,YAAY;IACvB,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACtC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC;gBAEvB,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe;IAMxF,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAEjF,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAStD,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAa9D;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IACpC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAqD9E,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,oBAAoB;IA6C5B,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,YAAY;CAKvB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IACxC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAyD9E,OAAO,CAAC,cAAc;CAmBzB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IACrC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA+D9E,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,iBAAiB;CA+B5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,eAAe,GACzB,YAAY,CAcd"}