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.
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +321 -0
- package/dist/cli.js.map +1 -0
- package/dist/event-bus.d.ts +35 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +71 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/events/event-bus.d.ts +35 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +71 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +3 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +143 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +6 -0
- package/dist/events/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/enricher.d.ts +18 -0
- package/dist/inference/enricher.d.ts.map +1 -0
- package/dist/inference/enricher.js +290 -0
- package/dist/inference/enricher.js.map +1 -0
- package/dist/inference/index.d.ts +5 -0
- package/dist/inference/index.d.ts.map +1 -0
- package/dist/inference/index.js +5 -0
- package/dist/inference/index.js.map +1 -0
- package/dist/inference/lifecycle-tracker.d.ts +40 -0
- package/dist/inference/lifecycle-tracker.d.ts.map +1 -0
- package/dist/inference/lifecycle-tracker.js +132 -0
- package/dist/inference/lifecycle-tracker.js.map +1 -0
- package/dist/inference/portfolio-generator.d.ts +44 -0
- package/dist/inference/portfolio-generator.d.ts.map +1 -0
- package/dist/inference/portfolio-generator.js +239 -0
- package/dist/inference/portfolio-generator.js.map +1 -0
- package/dist/inference/project-detector.d.ts +17 -0
- package/dist/inference/project-detector.d.ts.map +1 -0
- package/dist/inference/project-detector.js +127 -0
- package/dist/inference/project-detector.js.map +1 -0
- package/dist/ingestion/github-client.d.ts +56 -0
- package/dist/ingestion/github-client.d.ts.map +1 -0
- package/dist/ingestion/github-client.js +213 -0
- package/dist/ingestion/github-client.js.map +1 -0
- package/dist/ingestion/github-poller.d.ts +41 -0
- package/dist/ingestion/github-poller.d.ts.map +1 -0
- package/dist/ingestion/github-poller.js +121 -0
- package/dist/ingestion/github-poller.js.map +1 -0
- package/dist/ingestion/normalizer.d.ts +41 -0
- package/dist/ingestion/normalizer.d.ts.map +1 -0
- package/dist/ingestion/normalizer.js +173 -0
- package/dist/ingestion/normalizer.js.map +1 -0
- package/dist/integrations/analyzer.d.ts +74 -0
- package/dist/integrations/analyzer.d.ts.map +1 -0
- package/dist/integrations/analyzer.js +287 -0
- package/dist/integrations/analyzer.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +5 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/injectors.d.ts +60 -0
- package/dist/integrations/injectors.d.ts.map +1 -0
- package/dist/integrations/injectors.js +361 -0
- package/dist/integrations/injectors.js.map +1 -0
- package/dist/integrations/template-generator.d.ts +45 -0
- package/dist/integrations/template-generator.d.ts.map +1 -0
- package/dist/integrations/template-generator.js +187 -0
- package/dist/integrations/template-generator.js.map +1 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/project-store.d.ts +23 -0
- package/dist/storage/project-store.d.ts.map +1 -0
- package/dist/storage/project-store.js +107 -0
- package/dist/storage/project-store.js.map +1 -0
- package/dist/types.d.ts +143 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|