@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,566 @@
1
+ /**
2
+ * Flare Transformation
3
+ * Main entry point for converting WordPress/Elementor exports to Flare format
4
+ */
5
+ import { detectComponentType, flattenWidgets, extractSectionHeading } from './detect.js';
6
+ import { htmlToContent, htmlToText, extractImagesFromHtml } from './html-to-content.js';
7
+ // ============================================================
8
+ // Media Collection
9
+ // ============================================================
10
+ /**
11
+ * Collect all media items from export data
12
+ */
13
+ function collectMedia(exportData, config) {
14
+ const media = [];
15
+ const seenUrls = new Set();
16
+ function addMedia(url, context, alt) {
17
+ if (!url || seenUrls.has(url))
18
+ return;
19
+ seenUrls.add(url);
20
+ media.push({ url, context, alt });
21
+ }
22
+ // Site logo/favicon from config
23
+ if (config?.options) {
24
+ const opts = config.options;
25
+ if (typeof opts.site_logo === 'string') {
26
+ addMedia(opts.site_logo, 'logo');
27
+ }
28
+ if (typeof opts.site_icon === 'string') {
29
+ addMedia(opts.site_icon, 'favicon');
30
+ }
31
+ }
32
+ // Media from pages
33
+ if (exportData.pages) {
34
+ for (const page of exportData.pages) {
35
+ // Extract from regular content (handle both string and object formats)
36
+ const pageContent = typeof page.content === 'string'
37
+ ? page.content
38
+ : page.content?.rendered || page.content?.raw || '';
39
+ const contentImages = extractImagesFromHtml(pageContent);
40
+ for (const img of contentImages) {
41
+ addMedia(img.url, 'content-image', img.alt);
42
+ }
43
+ // Extract from Elementor data
44
+ if (page.elementor_data) {
45
+ const elementorData = parseElementorData(page.elementor_data);
46
+ if (elementorData) {
47
+ extractElementorMedia(elementorData, (url, context, alt) => {
48
+ addMedia(url, context, alt);
49
+ });
50
+ }
51
+ }
52
+ }
53
+ }
54
+ // Media library items
55
+ if (exportData.media) {
56
+ for (const item of exportData.media) {
57
+ addMedia(item.url, 'content-image', item.alt);
58
+ }
59
+ }
60
+ return media;
61
+ }
62
+ /**
63
+ * Extract media from Elementor data structure
64
+ * Note: ElementorData is a direct array of sections (not { elements: [...] })
65
+ */
66
+ function extractElementorMedia(sections, addMedia) {
67
+ function traverse(element, isFirstSection) {
68
+ const settings = element.settings || {};
69
+ const bgImage = settings.background_image;
70
+ const image = settings.image;
71
+ const gallery = settings.gallery;
72
+ // Background images
73
+ if (bgImage?.url) {
74
+ const context = isFirstSection ? 'hero-background' : 'content-image';
75
+ addMedia(bgImage.url, context);
76
+ }
77
+ // Image widget
78
+ if (element.widgetType === 'image' && image?.url) {
79
+ addMedia(image.url, 'content-image', image.alt);
80
+ }
81
+ // Gallery widget
82
+ if (element.widgetType === 'gallery' && Array.isArray(gallery)) {
83
+ for (const img of gallery) {
84
+ if (img.url) {
85
+ addMedia(img.url, 'gallery', img.alt);
86
+ }
87
+ }
88
+ }
89
+ // Call-to-action widget bg_image
90
+ const ctaBgImage = settings.bg_image;
91
+ if (element.widgetType === 'call-to-action' && ctaBgImage?.url) {
92
+ addMedia(ctaBgImage.url, isFirstSection ? 'hero-background' : 'content-image');
93
+ }
94
+ // Recurse into children
95
+ if (element.elements) {
96
+ for (const child of element.elements) {
97
+ traverse(child, false);
98
+ }
99
+ }
100
+ }
101
+ // sections IS the array of top-level sections
102
+ for (let i = 0; i < sections.length; i++) {
103
+ traverse(sections[i], i === 0);
104
+ }
105
+ }
106
+ // ============================================================
107
+ // Elementor Parsing
108
+ // ============================================================
109
+ /**
110
+ * Parse Elementor data from string or array
111
+ * WordPress returns elementor_data as an array of sections directly
112
+ * (not wrapped in { elements: [...] })
113
+ */
114
+ function parseElementorData(data) {
115
+ if (!data)
116
+ return null;
117
+ if (typeof data === 'string') {
118
+ try {
119
+ const parsed = JSON.parse(data);
120
+ // Handle both array and { elements: [...] } formats
121
+ if (Array.isArray(parsed)) {
122
+ return parsed;
123
+ }
124
+ // Legacy format check
125
+ if (parsed?.elements && Array.isArray(parsed.elements)) {
126
+ return parsed.elements;
127
+ }
128
+ return null;
129
+ }
130
+ catch {
131
+ return null;
132
+ }
133
+ }
134
+ // Already an array
135
+ if (Array.isArray(data)) {
136
+ return data;
137
+ }
138
+ return null;
139
+ }
140
+ /**
141
+ * Transform an Elementor section to a Flare component
142
+ */
143
+ function transformSection(section, index) {
144
+ const componentType = detectComponentType(section, index);
145
+ const widgets = flattenWidgets(section);
146
+ const heading = extractSectionHeading(section);
147
+ const props = {};
148
+ // Extract common props based on widget types
149
+ for (const widget of widgets) {
150
+ const settings = widget.settings || {};
151
+ const link = settings.link;
152
+ const image = settings.image;
153
+ switch (widget.widgetType) {
154
+ case 'heading':
155
+ if (!props.heading && settings.title) {
156
+ props.heading = htmlToText(settings.title);
157
+ }
158
+ break;
159
+ case 'text-editor':
160
+ if (!props.content && settings.editor) {
161
+ props.content = htmlToContent(settings.editor);
162
+ }
163
+ break;
164
+ case 'button':
165
+ if (!props.ctaText && settings.text) {
166
+ props.ctaText = settings.text;
167
+ // Button URL can be in multiple places depending on Elementor version
168
+ const buttonLink = settings.button_link;
169
+ props.ctaLink = link?.url || buttonLink?.url || settings.link_url || '';
170
+ }
171
+ break;
172
+ case 'image':
173
+ if (!props.image && image?.url) {
174
+ props.image = {
175
+ url: image.url,
176
+ alt: image.alt || '',
177
+ };
178
+ }
179
+ break;
180
+ case 'form':
181
+ case 'wpforms':
182
+ props.hasForm = true;
183
+ if (settings.form_name)
184
+ props.formName = settings.form_name;
185
+ break;
186
+ case 'icon-box':
187
+ if (!props.features)
188
+ props.features = [];
189
+ props.features.push({
190
+ title: settings.title_text,
191
+ description: htmlToText((settings.description_text || '')),
192
+ });
193
+ break;
194
+ case 'testimonial':
195
+ if (!props.testimonial) {
196
+ props.testimonial = {
197
+ content: htmlToText((settings.testimonial_content || '')),
198
+ name: settings.testimonial_name,
199
+ title: settings.testimonial_job,
200
+ };
201
+ }
202
+ break;
203
+ case 'call-to-action':
204
+ // Rich widget with title, description, button, and bg_image
205
+ if (!props.heading && settings.title) {
206
+ props.heading = htmlToText(settings.title);
207
+ }
208
+ if (!props.content && settings.description) {
209
+ props.content = htmlToContent(settings.description);
210
+ }
211
+ if (!props.ctaText && settings.button) {
212
+ props.ctaText = settings.button;
213
+ // Link can be in button_link or link
214
+ const ctaButtonLink = settings.button_link;
215
+ props.ctaLink = link?.url || ctaButtonLink?.url || '';
216
+ }
217
+ // Background image from call-to-action
218
+ const ctaBgImage = settings.bg_image;
219
+ if (!props.backgroundImage && ctaBgImage?.url) {
220
+ props.backgroundImage = ctaBgImage.url;
221
+ }
222
+ // Mark as call-to-action for component type detection
223
+ props._hasCallToAction = true;
224
+ break;
225
+ case 'icon':
226
+ // Standalone icon - track for services detection
227
+ if (!props.icons)
228
+ props.icons = [];
229
+ const iconVal = settings.selected_icon;
230
+ if (iconVal?.value) {
231
+ props.icons.push({
232
+ icon: iconVal.value,
233
+ });
234
+ }
235
+ break;
236
+ case 'posts':
237
+ // Dynamic posts widget - mark as having dynamic content
238
+ props._hasPosts = true;
239
+ props.postsPerPage = settings.posts_per_page;
240
+ props.postsColumns = settings.columns;
241
+ break;
242
+ }
243
+ }
244
+ // Add background image if present
245
+ const sectionSettings = section.settings || {};
246
+ const bgImage = sectionSettings.background_image;
247
+ if (bgImage?.url) {
248
+ props.backgroundImage = bgImage.url;
249
+ }
250
+ return {
251
+ type: componentType,
252
+ design: 'basic', // Default design - Flare requires this field
253
+ props,
254
+ };
255
+ }
256
+ /**
257
+ * Transform a WordPress page to Flare page format
258
+ */
259
+ function transformPage(page) {
260
+ const components = [];
261
+ // Try Elementor data first
262
+ const elementorSections = parseElementorData(page.elementor_data);
263
+ if (elementorSections && elementorSections.length > 0) {
264
+ // Transform each Elementor section
265
+ for (let i = 0; i < elementorSections.length; i++) {
266
+ const section = elementorSections[i];
267
+ if (section.elType === 'section' || section.elType === 'container') {
268
+ components.push(transformSection(section, i));
269
+ }
270
+ }
271
+ }
272
+ else if (page.content) {
273
+ // Fallback to regular content (handle both string and object formats)
274
+ const contentStr = typeof page.content === 'string'
275
+ ? page.content
276
+ : page.content.rendered || page.content.raw || '';
277
+ const content = htmlToContent(contentStr);
278
+ if (content.length > 0) {
279
+ components.push({
280
+ type: 'content',
281
+ props: { content },
282
+ });
283
+ }
284
+ }
285
+ // Extract meta description
286
+ let description;
287
+ if (page.meta) {
288
+ const meta = page.meta;
289
+ description =
290
+ meta._yoast_wpseo_metadesc ||
291
+ meta._genesis_description ||
292
+ meta._aioseop_description;
293
+ }
294
+ return {
295
+ slug: page.slug,
296
+ title: htmlToText(page.title),
297
+ meta: { description },
298
+ components,
299
+ };
300
+ }
301
+ // ============================================================
302
+ // Main Transform Function
303
+ // ============================================================
304
+ /**
305
+ * Transform WordPress export data to Flare format
306
+ */
307
+ export function transformToFlare(exportData, config = null) {
308
+ // Extract site info
309
+ const siteName = exportData.site?.name || config?.options?.blogname || 'Untitled Site';
310
+ const siteTagline = exportData.site?.description || config?.options?.blogdescription;
311
+ // Extract colors from Elementor globals
312
+ // Elementor uses _id or id for color identifiers (e.g., "primary", "secondary")
313
+ const colors = {};
314
+ if (config?.elementor?.globals?.colors) {
315
+ for (const colorDef of config.elementor.globals.colors) {
316
+ const colorId = (colorDef._id || colorDef.id || colorDef.title || '').toLowerCase();
317
+ if (colorId.includes('primary'))
318
+ colors.primary = colorDef.color;
319
+ else if (colorId.includes('secondary'))
320
+ colors.secondary = colorDef.color;
321
+ else if (colorId.includes('text'))
322
+ colors.text = colorDef.color;
323
+ else if (colorId.includes('accent'))
324
+ colors.accent = colorDef.color;
325
+ }
326
+ }
327
+ // Extract typography/fonts from Elementor globals
328
+ const fonts = {};
329
+ if (config?.elementor?.globals?.typography) {
330
+ for (const typoDef of config.elementor.globals.typography) {
331
+ const typoId = (typoDef._id || typoDef.id || typoDef.title || '').toLowerCase();
332
+ const fontFamily = typoDef.typography_font_family;
333
+ if (fontFamily) {
334
+ if (typoId.includes('heading') || typoId.includes('h1') || typoId.includes('h2')) {
335
+ fonts.heading = fontFamily;
336
+ }
337
+ else if (typoId.includes('body') || typoId.includes('text') || typoId.includes('paragraph')) {
338
+ fonts.body = fontFamily;
339
+ }
340
+ }
341
+ }
342
+ }
343
+ // Extract logo/favicon from site config
344
+ // Logo can be in theme.custom_logo.url or options
345
+ const opts = config?.options || {};
346
+ const theme = config?.theme || {};
347
+ const themeMods = theme.theme_mods || {};
348
+ const customLogo = theme.custom_logo;
349
+ let siteLogoUrl;
350
+ let siteFaviconUrl;
351
+ // Logo priority: theme.custom_logo.url > options.custom_logo_url > options.site_logo
352
+ if (customLogo?.url) {
353
+ siteLogoUrl = customLogo.url;
354
+ }
355
+ else if (typeof opts.custom_logo_url === 'string') {
356
+ siteLogoUrl = opts.custom_logo_url;
357
+ }
358
+ else if (typeof opts.site_logo === 'string' && opts.site_logo.startsWith('http')) {
359
+ siteLogoUrl = opts.site_logo;
360
+ }
361
+ // Favicon/site icon
362
+ if (typeof opts.site_icon_url === 'string') {
363
+ siteFaviconUrl = opts.site_icon_url;
364
+ }
365
+ else if (typeof opts.site_icon === 'string' && opts.site_icon.startsWith('http')) {
366
+ siteFaviconUrl = opts.site_icon;
367
+ }
368
+ // Transform pages
369
+ const pages = [];
370
+ if (exportData.pages) {
371
+ for (const page of exportData.pages) {
372
+ pages.push(transformPage(page));
373
+ }
374
+ }
375
+ // Extract main menu
376
+ const mainMenu = [];
377
+ if (exportData.menus) {
378
+ // Find primary/main menu
379
+ const primaryMenu = exportData.menus.find((m) => m.name.toLowerCase().includes('primary') || m.name.toLowerCase().includes('main')) || exportData.menus[0];
380
+ if (primaryMenu) {
381
+ for (const item of primaryMenu.items) {
382
+ mainMenu.push(item.title);
383
+ }
384
+ }
385
+ }
386
+ // Collect media
387
+ const media = collectMedia(exportData, config);
388
+ // Find logo from media (fallback if not in options)
389
+ const logoItem = media.find((m) => m.context === 'logo');
390
+ const faviconItem = media.find((m) => m.context === 'favicon');
391
+ return {
392
+ site: {
393
+ name: siteName,
394
+ tagline: siteTagline,
395
+ logo: siteLogoUrl || logoItem?.url,
396
+ favicon: siteFaviconUrl || faviconItem?.url,
397
+ colors,
398
+ fonts,
399
+ },
400
+ pages,
401
+ menu: { main: mainMenu },
402
+ media,
403
+ };
404
+ }
405
+ /**
406
+ * Generate comprehensive widget breakdown for AI-assisted site rebuilding
407
+ * This format captures ALL widget data organized for easy AI consumption
408
+ */
409
+ export function transformToWidgetBreakdown(exportData, config = null) {
410
+ const widgetsByType = {};
411
+ const widgetCounts = {};
412
+ let totalWidgets = 0;
413
+ const pages = [];
414
+ // Process each page
415
+ if (exportData.pages) {
416
+ for (const page of exportData.pages) {
417
+ const pageTitle = htmlToText(page.title);
418
+ const pageSections = [];
419
+ const elementorData = parseElementorData(page.elementor_data);
420
+ if (elementorData) {
421
+ for (let sectionIdx = 0; sectionIdx < elementorData.length; sectionIdx++) {
422
+ const section = elementorData[sectionIdx];
423
+ const widgets = flattenWidgets(section);
424
+ const sectionWidgets = [];
425
+ for (const widget of widgets) {
426
+ if (!widget.widgetType)
427
+ continue;
428
+ const widgetType = widget.widgetType;
429
+ const settings = (widget.settings || {});
430
+ // Clean settings - remove internal Elementor fields
431
+ const cleanSettings = {};
432
+ for (const [key, value] of Object.entries(settings)) {
433
+ // Skip internal fields
434
+ if (key.startsWith('_') || key === '__dynamic__' || key === '__globals__')
435
+ continue;
436
+ // Skip empty values
437
+ if (value === '' || value === null || value === undefined)
438
+ continue;
439
+ // Skip default values
440
+ if (value === 'default' || value === 'none')
441
+ continue;
442
+ cleanSettings[key] = value;
443
+ }
444
+ // Add to section widgets
445
+ sectionWidgets.push({
446
+ type: widgetType,
447
+ settings: cleanSettings,
448
+ });
449
+ // Track by type
450
+ if (!widgetsByType[widgetType]) {
451
+ widgetsByType[widgetType] = [];
452
+ }
453
+ widgetsByType[widgetType].push({
454
+ page: pageTitle,
455
+ pageSlug: page.slug,
456
+ sectionIndex: sectionIdx,
457
+ settings: cleanSettings,
458
+ });
459
+ // Count
460
+ widgetCounts[widgetType] = (widgetCounts[widgetType] || 0) + 1;
461
+ totalWidgets++;
462
+ }
463
+ if (sectionWidgets.length > 0) {
464
+ pageSections.push({
465
+ index: sectionIdx,
466
+ widgets: sectionWidgets,
467
+ });
468
+ }
469
+ }
470
+ }
471
+ pages.push({
472
+ title: pageTitle,
473
+ slug: page.slug,
474
+ sections: pageSections,
475
+ });
476
+ }
477
+ }
478
+ // Extract Elementor globals
479
+ let elementorGlobals;
480
+ if (config?.elementor?.globals) {
481
+ const globals = config.elementor.globals;
482
+ elementorGlobals = {
483
+ colors: globals.colors?.map(c => ({
484
+ id: c._id || c.id || '',
485
+ color: c.color,
486
+ title: c.title,
487
+ })),
488
+ typography: globals.typography?.map(t => ({
489
+ id: t._id || t.id || '',
490
+ fontFamily: t.typography_font_family,
491
+ title: t.title,
492
+ })),
493
+ };
494
+ }
495
+ return {
496
+ site: {
497
+ name: exportData.site?.name || 'Unknown Site',
498
+ url: exportData.site?.url,
499
+ description: exportData.site?.description,
500
+ },
501
+ summary: {
502
+ totalPages: exportData.pages?.length || 0,
503
+ totalWidgets,
504
+ widgetTypes: widgetCounts,
505
+ },
506
+ pages,
507
+ widgetsByType,
508
+ elementorGlobals,
509
+ };
510
+ }
511
+ /**
512
+ * Transform to Markdown format
513
+ */
514
+ export function transformToMarkdown(exportData) {
515
+ const lines = [];
516
+ // Site header
517
+ if (exportData.site) {
518
+ const site = exportData.site;
519
+ const siteName = site.name || site.title || 'Untitled Site';
520
+ const siteDesc = site.description || site.tagline;
521
+ lines.push(`# ${siteName}`);
522
+ if (siteDesc) {
523
+ lines.push(`> ${siteDesc}`);
524
+ }
525
+ lines.push('');
526
+ }
527
+ // Pages
528
+ if (exportData.pages) {
529
+ lines.push('## Pages');
530
+ lines.push('');
531
+ for (const page of exportData.pages) {
532
+ lines.push(`### ${htmlToText(page.title)}`);
533
+ lines.push(`*Slug: /${page.slug}*`);
534
+ lines.push('');
535
+ // Handle both string and object formats for content
536
+ const contentStr = typeof page.content === 'string'
537
+ ? page.content
538
+ : page.content?.rendered || page.content?.raw || '';
539
+ const content = htmlToText(contentStr);
540
+ if (content) {
541
+ lines.push(content.slice(0, 500) + (content.length > 500 ? '...' : ''));
542
+ lines.push('');
543
+ }
544
+ }
545
+ }
546
+ // Menus
547
+ if (exportData.menus) {
548
+ lines.push('## Navigation');
549
+ lines.push('');
550
+ for (const menu of exportData.menus) {
551
+ lines.push(`### ${menu.name}`);
552
+ for (const item of menu.items) {
553
+ lines.push(`- [${item.title}](${item.url})`);
554
+ }
555
+ lines.push('');
556
+ }
557
+ }
558
+ // Media summary
559
+ if (exportData.media) {
560
+ lines.push('## Media Library');
561
+ lines.push(`${exportData.media.length} items`);
562
+ lines.push('');
563
+ }
564
+ return lines.join('\n');
565
+ }
566
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flare/index.ts"],"names":[],"mappings":"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"}