@jezweb/jezpress-cli 1.7.0 → 1.8.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 (51) hide show
  1. package/dist/cli.js +15 -1153
  2. package/dist/cli.js.map +1 -1
  3. package/dist/client.d.ts +29 -9
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +15 -2
  6. package/dist/client.js.map +1 -1
  7. package/dist/commands/auth.d.ts +7 -0
  8. package/dist/commands/auth.d.ts.map +1 -0
  9. package/dist/commands/auth.js +56 -0
  10. package/dist/commands/auth.js.map +1 -0
  11. package/dist/commands/docs.d.ts +7 -0
  12. package/dist/commands/docs.d.ts.map +1 -0
  13. package/dist/commands/docs.js +41 -0
  14. package/dist/commands/docs.js.map +1 -0
  15. package/dist/commands/plugins.d.ts +7 -0
  16. package/dist/commands/plugins.d.ts.map +1 -0
  17. package/dist/commands/plugins.js +468 -0
  18. package/dist/commands/plugins.js.map +1 -0
  19. package/dist/commands/sites/bulk.d.ts +7 -0
  20. package/dist/commands/sites/bulk.d.ts.map +1 -0
  21. package/dist/commands/sites/bulk.js +80 -0
  22. package/dist/commands/sites/bulk.js.map +1 -0
  23. package/dist/commands/sites/export.d.ts +7 -0
  24. package/dist/commands/sites/export.d.ts.map +1 -0
  25. package/dist/commands/sites/export.js +85 -0
  26. package/dist/commands/sites/export.js.map +1 -0
  27. package/dist/commands/sites/index.d.ts +7 -0
  28. package/dist/commands/sites/index.d.ts.map +1 -0
  29. package/dist/commands/sites/index.js +406 -0
  30. package/dist/commands/sites/index.js.map +1 -0
  31. package/dist/flare/detect.d.ts +18 -0
  32. package/dist/flare/detect.d.ts.map +1 -0
  33. package/dist/flare/detect.js +130 -0
  34. package/dist/flare/detect.js.map +1 -0
  35. package/dist/flare/html-to-content.d.ts +21 -0
  36. package/dist/flare/html-to-content.d.ts.map +1 -0
  37. package/dist/flare/html-to-content.js +233 -0
  38. package/dist/flare/html-to-content.js.map +1 -0
  39. package/dist/flare/index.d.ts +62 -0
  40. package/dist/flare/index.d.ts.map +1 -0
  41. package/dist/flare/index.js +566 -0
  42. package/dist/flare/index.js.map +1 -0
  43. package/dist/flare/types.d.ts +171 -0
  44. package/dist/flare/types.d.ts.map +1 -0
  45. package/dist/flare/types.js +6 -0
  46. package/dist/flare/types.js.map +1 -0
  47. package/dist/utils/plugin-headers.d.ts +14 -0
  48. package/dist/utils/plugin-headers.d.ts.map +1 -0
  49. package/dist/utils/plugin-headers.js +52 -0
  50. package/dist/utils/plugin-headers.js.map +1 -0
  51. package/package.json +2 -1
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Section Type Detection
3
+ * Heuristics for detecting Flare component types from Elementor sections
4
+ */
5
+ /**
6
+ * Flatten all widgets from a section into a flat array
7
+ */
8
+ export function flattenWidgets(section) {
9
+ const widgets = [];
10
+ function traverse(element) {
11
+ if (element.widgetType) {
12
+ widgets.push(element);
13
+ }
14
+ if (element.elements) {
15
+ for (const child of element.elements) {
16
+ traverse(child);
17
+ }
18
+ }
19
+ }
20
+ if (section.elements) {
21
+ for (const element of section.elements) {
22
+ traverse(element);
23
+ }
24
+ }
25
+ return widgets;
26
+ }
27
+ /**
28
+ * Count inner containers/columns in a section
29
+ */
30
+ function countInnerContainers(section) {
31
+ let count = 0;
32
+ function traverse(element) {
33
+ if (element.elType === 'column' || element.elType === 'container') {
34
+ count++;
35
+ }
36
+ if (element.elements) {
37
+ for (const child of element.elements) {
38
+ traverse(child);
39
+ }
40
+ }
41
+ }
42
+ if (section.elements) {
43
+ for (const element of section.elements) {
44
+ traverse(element);
45
+ }
46
+ }
47
+ return count;
48
+ }
49
+ /**
50
+ * Check if section has a background image
51
+ */
52
+ function hasBackgroundImage(section) {
53
+ const settings = section.settings || {};
54
+ const bgImage = settings.background_image;
55
+ return !!(bgImage?.url ||
56
+ settings.background_background === 'classic' && bgImage);
57
+ }
58
+ /**
59
+ * Detect the Flare component type for a section
60
+ */
61
+ export function detectComponentType(section, index) {
62
+ const widgets = flattenWidgets(section);
63
+ const widgetTypes = widgets.map((w) => w.widgetType);
64
+ // Widget type checks
65
+ const hasH1 = widgets.some((w) => w.widgetType === 'heading' && w.settings?.header_size === 'h1');
66
+ const hasButton = widgetTypes.includes('button');
67
+ const hasForm = widgetTypes.includes('form') || widgetTypes.includes('wpforms');
68
+ const hasQuote = widgetTypes.includes('blockquote') || widgetTypes.includes('testimonial');
69
+ const hasIcons = widgetTypes.includes('icon') || widgetTypes.includes('icon-box');
70
+ const hasGallery = widgetTypes.includes('gallery') || widgetTypes.includes('image-gallery');
71
+ const hasCallToAction = widgetTypes.includes('call-to-action');
72
+ // Count images in section
73
+ const imageCount = widgets.filter((w) => w.widgetType === 'image' || w.widgetType === 'image-box').length;
74
+ // Container structure
75
+ const innerContainers = countInnerContainers(section);
76
+ const hasBgImage = hasBackgroundImage(section);
77
+ // Detection logic (order matters - more specific first)
78
+ // Hero: First section with H1 and button, call-to-action widget, or background image
79
+ if (index === 0 && hasCallToAction) {
80
+ return 'hero';
81
+ }
82
+ if (index === 0 && hasH1 && hasButton) {
83
+ return 'hero';
84
+ }
85
+ if (index === 0 && hasBgImage && hasH1) {
86
+ return 'hero';
87
+ }
88
+ // Contact: Has a form widget
89
+ if (hasForm) {
90
+ return 'contact';
91
+ }
92
+ // Testimonials: Has quote or testimonial widget
93
+ if (hasQuote) {
94
+ return 'testimonials';
95
+ }
96
+ // Gallery: 4+ images in a grid pattern
97
+ if (hasGallery || (imageCount >= 4 && innerContainers >= 2)) {
98
+ return 'gallery';
99
+ }
100
+ // Services: 3+ containers with icons (common service card pattern)
101
+ if (innerContainers >= 3 && hasIcons) {
102
+ return 'services';
103
+ }
104
+ // CTA: Call-to-action widget (not first section) or button with heading
105
+ if (hasCallToAction && index > 0) {
106
+ return 'cta';
107
+ }
108
+ if (hasButton && hasH1 && index > 0) {
109
+ return 'cta';
110
+ }
111
+ // Default: Content section
112
+ return 'content';
113
+ }
114
+ /**
115
+ * Extract section heading text for debugging/labeling
116
+ */
117
+ export function extractSectionHeading(section) {
118
+ const widgets = flattenWidgets(section);
119
+ for (const widget of widgets) {
120
+ if (widget.widgetType === 'heading') {
121
+ const title = widget.settings?.title;
122
+ if (typeof title === 'string') {
123
+ // Strip HTML tags
124
+ return title.replace(/<[^>]*>/g, '').trim();
125
+ }
126
+ }
127
+ }
128
+ return null;
129
+ }
130
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/flare/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * HTML to Content Parser
3
+ * Converts HTML strings to Flare Content nodes
4
+ */
5
+ import type { ContentNode } from './types.js';
6
+ /**
7
+ * Convert HTML string to Flare Content nodes
8
+ */
9
+ export declare function htmlToContent(html: unknown): ContentNode[];
10
+ /**
11
+ * Extract plain text from HTML
12
+ */
13
+ export declare function htmlToText(html: unknown): string;
14
+ /**
15
+ * Extract all image URLs from HTML
16
+ */
17
+ export declare function extractImagesFromHtml(html: unknown): Array<{
18
+ url: string;
19
+ alt?: string;
20
+ }>;
21
+ //# sourceMappingURL=html-to-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-to-content.d.ts","sourceRoot":"","sources":["../../src/flare/html-to-content.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AA8L1D;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,CA2B1D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOhD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBzF"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * HTML to Content Parser
3
+ * Converts HTML strings to Flare Content nodes
4
+ */
5
+ import { parseHTML } from 'linkedom';
6
+ /**
7
+ * Parse inline elements to InlineNode array
8
+ */
9
+ function parseInline(element) {
10
+ const nodes = [];
11
+ for (let i = 0; i < element.childNodes.length; i++) {
12
+ const child = element.childNodes[i];
13
+ if (child.nodeType === 3) {
14
+ // Text node
15
+ const text = child.textContent?.trim();
16
+ if (text) {
17
+ nodes.push({ text });
18
+ }
19
+ }
20
+ else if (child.nodeType === 1) {
21
+ // Element node
22
+ const el = child;
23
+ const tagName = el.tagName.toLowerCase();
24
+ const innerText = el.textContent?.trim() || '';
25
+ switch (tagName) {
26
+ case 'strong':
27
+ case 'b':
28
+ nodes.push({ text: innerText, bold: true });
29
+ break;
30
+ case 'em':
31
+ case 'i':
32
+ nodes.push({ text: innerText, italic: true });
33
+ break;
34
+ case 'u':
35
+ nodes.push({ text: innerText, underline: true });
36
+ break;
37
+ case 'code':
38
+ nodes.push({ text: innerText, code: true });
39
+ break;
40
+ case 'a':
41
+ nodes.push({
42
+ text: innerText,
43
+ href: el.getAttribute('href') || '',
44
+ });
45
+ break;
46
+ case 'br':
47
+ nodes.push({ text: '\n' });
48
+ break;
49
+ case 'span':
50
+ // Recursively parse span contents
51
+ nodes.push(...parseInline(el));
52
+ break;
53
+ default:
54
+ // Fallback: just get text
55
+ if (innerText) {
56
+ nodes.push({ text: innerText });
57
+ }
58
+ }
59
+ }
60
+ }
61
+ return nodes;
62
+ }
63
+ /**
64
+ * Parse list items
65
+ */
66
+ function parseListItems(listElement) {
67
+ const items = [];
68
+ for (let i = 0; i < listElement.children.length; i++) {
69
+ const child = listElement.children[i];
70
+ if (child.tagName.toLowerCase() === 'li') {
71
+ items.push(parseInline(child));
72
+ }
73
+ }
74
+ return items;
75
+ }
76
+ /**
77
+ * Convert a single HTML element to a ContentNode
78
+ */
79
+ function elementToContent(element) {
80
+ const tagName = element.tagName.toLowerCase();
81
+ switch (tagName) {
82
+ case 'p': {
83
+ const pChildren = parseInline(element);
84
+ if (pChildren.length === 0)
85
+ return null;
86
+ return { type: 'paragraph', children: pChildren };
87
+ }
88
+ case 'h1':
89
+ case 'h2':
90
+ case 'h3':
91
+ case 'h4':
92
+ case 'h5':
93
+ case 'h6': {
94
+ const level = parseInt(tagName[1]);
95
+ const hChildren = parseInline(element);
96
+ if (hChildren.length === 0)
97
+ return null;
98
+ return { type: 'heading', level, children: hChildren };
99
+ }
100
+ case 'ul': {
101
+ const ulItems = parseListItems(element);
102
+ if (ulItems.length === 0)
103
+ return null;
104
+ return { type: 'list', style: 'bullet', items: ulItems };
105
+ }
106
+ case 'ol': {
107
+ const olItems = parseListItems(element);
108
+ if (olItems.length === 0)
109
+ return null;
110
+ return { type: 'list', style: 'number', items: olItems };
111
+ }
112
+ case 'img': {
113
+ const src = element.getAttribute('src');
114
+ if (!src)
115
+ return null;
116
+ const widthAttr = element.getAttribute('width');
117
+ const heightAttr = element.getAttribute('height');
118
+ return {
119
+ type: 'image',
120
+ src,
121
+ alt: element.getAttribute('alt') || undefined,
122
+ width: widthAttr ? parseInt(widthAttr) : undefined,
123
+ height: heightAttr ? parseInt(heightAttr) : undefined,
124
+ };
125
+ }
126
+ case 'figure': {
127
+ // Look for img inside figure
128
+ const figImg = element.querySelector('img');
129
+ if (figImg) {
130
+ const figSrc = figImg.getAttribute('src');
131
+ if (!figSrc)
132
+ return null;
133
+ const figCaption = element.querySelector('figcaption');
134
+ return {
135
+ type: 'image',
136
+ src: figSrc,
137
+ alt: figCaption?.textContent?.trim() || figImg.getAttribute('alt') || undefined,
138
+ };
139
+ }
140
+ return null;
141
+ }
142
+ case 'div':
143
+ case 'section':
144
+ case 'article': {
145
+ // Container elements: recursively parse children
146
+ const containerNodes = [];
147
+ for (let i = 0; i < element.children.length; i++) {
148
+ const node = elementToContent(element.children[i]);
149
+ if (node)
150
+ containerNodes.push(node);
151
+ }
152
+ // If only one child, return it directly
153
+ if (containerNodes.length === 1)
154
+ return containerNodes[0];
155
+ // Otherwise return null (will be handled at top level)
156
+ return null;
157
+ }
158
+ case 'blockquote': {
159
+ // Convert blockquote to paragraph with styling hint
160
+ const bqChildren = parseInline(element);
161
+ if (bqChildren.length === 0)
162
+ return null;
163
+ return { type: 'paragraph', children: bqChildren };
164
+ }
165
+ default: {
166
+ // Unknown element: try to extract text as paragraph
167
+ const text = element.textContent?.trim();
168
+ if (text) {
169
+ return { type: 'paragraph', children: [{ text }] };
170
+ }
171
+ return null;
172
+ }
173
+ }
174
+ }
175
+ /**
176
+ * Convert HTML string to Flare Content nodes
177
+ */
178
+ export function htmlToContent(html) {
179
+ if (!html || typeof html !== 'string' || html.trim() === '') {
180
+ return [];
181
+ }
182
+ // Parse HTML using linkedom
183
+ const { document } = parseHTML(`<!DOCTYPE html><html><body>${html}</body></html>`);
184
+ const body = document.body;
185
+ const nodes = [];
186
+ for (let i = 0; i < body.children.length; i++) {
187
+ const node = elementToContent(body.children[i]);
188
+ if (node) {
189
+ nodes.push(node);
190
+ }
191
+ }
192
+ // If no structured content was found, try treating as plain text
193
+ if (nodes.length === 0) {
194
+ const text = body.textContent?.trim();
195
+ if (text) {
196
+ nodes.push({ type: 'paragraph', children: [{ text }] });
197
+ }
198
+ }
199
+ return nodes;
200
+ }
201
+ /**
202
+ * Extract plain text from HTML
203
+ */
204
+ export function htmlToText(html) {
205
+ if (!html || typeof html !== 'string' || html.trim() === '') {
206
+ return '';
207
+ }
208
+ const { document } = parseHTML(`<!DOCTYPE html><html><body>${html}</body></html>`);
209
+ return document.body.textContent?.trim() || '';
210
+ }
211
+ /**
212
+ * Extract all image URLs from HTML
213
+ */
214
+ export function extractImagesFromHtml(html) {
215
+ if (!html || typeof html !== 'string' || html.trim() === '') {
216
+ return [];
217
+ }
218
+ const { document } = parseHTML(`<!DOCTYPE html><html><body>${html}</body></html>`);
219
+ const images = [];
220
+ const imgElements = document.querySelectorAll('img');
221
+ for (let i = 0; i < imgElements.length; i++) {
222
+ const img = imgElements[i];
223
+ const src = img.getAttribute('src');
224
+ if (src) {
225
+ images.push({
226
+ url: src,
227
+ alt: img.getAttribute('alt') || undefined,
228
+ });
229
+ }
230
+ }
231
+ return images;
232
+ }
233
+ //# sourceMappingURL=html-to-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-to-content.js","sourceRoot":"","sources":["../../src/flare/html-to-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Flare Transformation
3
+ * Main entry point for converting WordPress/Elementor exports to Flare format
4
+ */
5
+ import type { FlareExport, WPExportData, WPSiteConfig } from './types.js';
6
+ /**
7
+ * Transform WordPress export data to Flare format
8
+ */
9
+ export declare function transformToFlare(exportData: WPExportData, config?: WPSiteConfig | null): FlareExport;
10
+ interface WidgetInstance {
11
+ page: string;
12
+ pageSlug: string;
13
+ sectionIndex: number;
14
+ settings: Record<string, unknown>;
15
+ }
16
+ interface WidgetBreakdown {
17
+ site: {
18
+ name: string;
19
+ url?: string;
20
+ description?: string;
21
+ };
22
+ summary: {
23
+ totalPages: number;
24
+ totalWidgets: number;
25
+ widgetTypes: Record<string, number>;
26
+ };
27
+ pages: Array<{
28
+ title: string;
29
+ slug: string;
30
+ sections: Array<{
31
+ index: number;
32
+ widgets: Array<{
33
+ type: string;
34
+ settings: Record<string, unknown>;
35
+ }>;
36
+ }>;
37
+ }>;
38
+ widgetsByType: Record<string, WidgetInstance[]>;
39
+ elementorGlobals?: {
40
+ colors?: Array<{
41
+ id: string;
42
+ color: string;
43
+ title?: string;
44
+ }>;
45
+ typography?: Array<{
46
+ id: string;
47
+ fontFamily?: string;
48
+ title?: string;
49
+ }>;
50
+ };
51
+ }
52
+ /**
53
+ * Generate comprehensive widget breakdown for AI-assisted site rebuilding
54
+ * This format captures ALL widget data organized for easy AI consumption
55
+ */
56
+ export declare function transformToWidgetBreakdown(exportData: WPExportData, config?: WPSiteConfig | null): WidgetBreakdown;
57
+ /**
58
+ * Transform to Markdown format
59
+ */
60
+ export declare function transformToMarkdown(exportData: WPExportData): string;
61
+ export {};
62
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flare/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,WAAW,EAIX,YAAY,EACZ,YAAY,EAKb,MAAM,YAAY,CAAC;AAwVpB;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,YAAY,EACxB,MAAM,GAAE,YAAY,GAAG,IAAW,GACjC,WAAW,CAuGb;AAMD,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,UAAU,eAAe;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,CAAC;IACF,KAAK,EAAE,KAAK,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,KAAK,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,KAAK,CAAC;gBACb,IAAI,EAAE,MAAM,CAAC;gBACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aACnC,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE;QACjB,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9D,UAAU,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACzE,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,YAAY,EACxB,MAAM,GAAE,YAAY,GAAG,IAAW,GACjC,eAAe,CA8GjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,CAwDpE"}