@marvalt/wadapter 2.3.43 → 2.3.45

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.
@@ -116,7 +116,8 @@ export declare class WordPressClient {
116
116
  }>>;
117
117
  /**
118
118
  * Fetch a specific navigation menu with its items
119
- * @param menuId Menu ID
119
+ * Handles both menu term IDs and wp_navigation post IDs
120
+ * @param menuId Menu ID (can be menu term ID or wp_navigation post ID)
120
121
  * @returns Menu data with hierarchical items
121
122
  */
122
123
  getMenu(menuId: number): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"wordpress-client.d.ts","sourceRoot":"","sources":["../../src/client/wordpress-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wordpress-client.d.ts","sourceRoot":"","sources":["../../src/client/wordpress-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wordpress-generator.d.ts","sourceRoot":"","sources":["../../../src/generators/wordpress/wordpress-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wordpress-generator.d.ts","sourceRoot":"","sources":["../../../src/generators/wordpress/wordpress-generator.ts"],"names":[],"mappings":"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"}
@@ -289,11 +289,59 @@ class WordPressClient {
289
289
  }
290
290
  /**
291
291
  * Fetch a specific navigation menu with its items
292
- * @param menuId Menu ID
292
+ * Handles both menu term IDs and wp_navigation post IDs
293
+ * @param menuId Menu ID (can be menu term ID or wp_navigation post ID)
293
294
  * @returns Menu data with hierarchical items
294
295
  */
295
296
  async getMenu(menuId) {
296
- return this.makeRequest(`/wp-custom/v1/menus/${menuId}`);
297
+ try {
298
+ // First try the custom endpoint (handles both menu terms and wp_navigation posts)
299
+ return await this.makeRequest(`/wp-custom/v1/menus/${menuId}`);
300
+ }
301
+ catch (error) {
302
+ // If 404, try fetching as wp_navigation post
303
+ if (error.status === 404 || error.message?.includes('404')) {
304
+ console.log(`⚠️ Menu ID ${menuId} not found as menu term, trying as wp_navigation post...`);
305
+ // Try custom endpoint first
306
+ try {
307
+ const navPost = await this.makeRequest(`/wp-custom/v1/navigation/${menuId}`);
308
+ if (navPost.menu) {
309
+ return navPost.menu;
310
+ }
311
+ // If navigation post has a menu_term_id, fetch that menu
312
+ if (navPost.menu_term_id) {
313
+ return await this.makeRequest(`/wp-custom/v1/menus/${navPost.menu_term_id}`);
314
+ }
315
+ }
316
+ catch (navError) {
317
+ // If custom endpoint fails, try WordPress native REST API (WordPress 6.3+)
318
+ if (navError.status === 404 || navError.message?.includes('404')) {
319
+ console.log(`⚠️ Custom navigation endpoint not found, trying WordPress native REST API...`);
320
+ try {
321
+ // WordPress 6.3+ has native REST API for wp_navigation posts
322
+ const navPost = await this.makeRequest(`/wp/v2/navigation/${menuId}`);
323
+ // Parse blocks from content to find menu reference
324
+ // The content.raw contains the block JSON
325
+ if (navPost.content?.raw) {
326
+ try {
327
+ const blocks = JSON.parse(navPost.content.raw);
328
+ // Look for menu reference in blocks (this would need to be done server-side)
329
+ // For now, return null and let the generator fall back to HTML extraction
330
+ console.log(`ℹ️ Found wp_navigation post ${menuId}, but menu extraction requires server-side processing`);
331
+ }
332
+ catch (parseError) {
333
+ console.log(`⚠️ Could not parse navigation post content`);
334
+ }
335
+ }
336
+ }
337
+ catch (wpError) {
338
+ // Fall through
339
+ }
340
+ }
341
+ }
342
+ }
343
+ throw error;
344
+ }
297
345
  }
298
346
  async getFooter(slug = 'footer', area = 'footer') {
299
347
  return this.makeRequest(`/wp-custom/v1/footer`, { slug, area });
@@ -522,86 +570,194 @@ function addBlockFromStack(endOffset) {
522
570
  /**
523
571
  * Extract menu items from a navigation block's innerHTML (rendered HTML)
524
572
  * WordPress renders navigation blocks, so menu items are in innerHTML as HTML
573
+ * This function properly handles submenus by parsing the nested <ul> structure
525
574
  */
526
575
  function extractMenuFromNavigationHTML(innerHTML) {
527
576
  if (!innerHTML)
528
577
  return null;
529
- // Parse HTML to extract menu items from <a> tags
530
- // Look for links inside navigation items: <a class="wp-block-navigation-item__content" href="..."><span class="wp-block-navigation-item__label">...</span></a>
531
- const linkRegex = /<a[^>]+class="[^"]*wp-block-navigation-item__content[^"]*"[^>]+href=["']([^"']+)["'][^>]*>[\s\S]*?<span[^>]*class="[^"]*wp-block-navigation-item__label[^"]*"[^>]*>([^<]+)<\/span>[\s\S]*?<\/a>/gi;
578
+ // Find the main navigation container <ul>
579
+ const mainNavMatch = innerHTML.match(/<ul[^>]*class="[^"]*wp-block-navigation__container[^"]*"[^>]*>([\s\S]*?)<\/ul>/i);
580
+ if (!mainNavMatch) {
581
+ return null;
582
+ }
583
+ const mainNavContent = mainNavMatch[1];
532
584
  const items = [];
533
- let match;
534
- let order = 0;
535
- while ((match = linkRegex.exec(innerHTML)) !== null) {
536
- const url = match[1].trim();
537
- const title = match[2].trim();
538
- if (title && url) {
539
- // Handle URLs: preserve external URLs, convert internal absolute URLs to relative paths
540
- let finalUrl = url;
541
- try {
542
- const urlObj = new URL(url);
543
- // Check if it's an external URL (different origin from WordPress site)
544
- // We'll consider it external if the origin doesn't match common internal patterns
545
- // For now, preserve all absolute URLs that are clearly external (different domain)
546
- // Internal URLs from the same WordPress site will be converted to relative paths
547
- const isAbsoluteUrl = url.startsWith('http://') || url.startsWith('https://');
548
- if (isAbsoluteUrl) {
549
- // Check if pathname is empty or just "/" - likely an external URL
550
- // Or if the domain is clearly different (simple heuristic: check if it contains common external domains)
551
- const pathname = urlObj.pathname;
552
- const isExternal = pathname === '' || pathname === '/' ||
553
- !urlObj.hostname.includes('vibunedemos.com') &&
554
- !urlObj.hostname.includes('localhost') &&
555
- !urlObj.hostname.includes('127.0.0.1');
556
- if (isExternal) {
557
- // Preserve external URLs as-is
558
- finalUrl = url;
559
- }
560
- else {
561
- // Convert internal absolute URLs to relative paths
562
- finalUrl = pathname + urlObj.search + urlObj.hash;
563
- // Ensure relative URL starts with /
564
- if (!finalUrl.startsWith('/')) {
565
- finalUrl = `/${finalUrl}`;
566
- }
567
- // Remove trailing slash (except for root path) to match React Router routes
568
- if (finalUrl !== '/' && finalUrl.endsWith('/')) {
569
- finalUrl = finalUrl.slice(0, -1);
570
- }
571
- }
585
+ let globalOrder = 0;
586
+ /**
587
+ * Parse a <li> element and extract menu item data
588
+ * Handles both regular links and submenus
589
+ */
590
+ function parseMenuItem(liElement, parentId = 0, order = 0) {
591
+ // Extract the link
592
+ const linkMatch = liElement.match(/<a[^>]+class="[^"]*wp-block-navigation-item__content[^"]*"[^>]+href=["']([^"']+)["'][^>]*>[\s\S]*?<span[^>]*class="[^"]*wp-block-navigation-item__label[^"]*"[^>]*>([^<]+)<\/span>[\s\S]*?<\/a>/i);
593
+ if (!linkMatch) {
594
+ return null;
595
+ }
596
+ const url = linkMatch[1].trim();
597
+ const title = linkMatch[2].trim();
598
+ if (!title) {
599
+ return null;
600
+ }
601
+ // Normalize URL
602
+ let finalUrl = url;
603
+ try {
604
+ const urlObj = new URL(url, 'http://dummy.com'); // Use dummy base for relative URLs
605
+ const isAbsoluteUrl = url.startsWith('http://') || url.startsWith('https://');
606
+ if (isAbsoluteUrl) {
607
+ const pathname = urlObj.pathname;
608
+ const isExternal = pathname === '' || pathname === '/' ||
609
+ !urlObj.hostname.includes('vibunedemos.com') &&
610
+ !urlObj.hostname.includes('localhost') &&
611
+ !urlObj.hostname.includes('127.0.0.1');
612
+ if (isExternal) {
613
+ finalUrl = url;
572
614
  }
573
615
  else {
574
- // Already a relative URL, ensure it starts with /
616
+ finalUrl = pathname + urlObj.search + urlObj.hash;
575
617
  if (!finalUrl.startsWith('/')) {
576
618
  finalUrl = `/${finalUrl}`;
577
619
  }
578
- // Remove trailing slash (except for root path) to match React Router routes
579
620
  if (finalUrl !== '/' && finalUrl.endsWith('/')) {
580
621
  finalUrl = finalUrl.slice(0, -1);
581
622
  }
582
623
  }
583
624
  }
584
- catch (e) {
585
- // If URL parsing fails, assume it's already relative or keep as is
586
- // Ensure relative URLs start with /
587
- if (!finalUrl.startsWith('http://') && !finalUrl.startsWith('https://') && !finalUrl.startsWith('/')) {
625
+ else {
626
+ if (!finalUrl.startsWith('/')) {
588
627
  finalUrl = `/${finalUrl}`;
589
628
  }
590
- // Remove trailing slash (except for root path) to match React Router routes
591
629
  if (finalUrl !== '/' && finalUrl.endsWith('/')) {
592
630
  finalUrl = finalUrl.slice(0, -1);
593
631
  }
594
632
  }
595
- items.push({
596
- id: order + 1,
597
- title: title,
598
- url: finalUrl,
599
- type: 'custom',
600
- object_id: 0,
601
- object: 'custom',
602
- parent: 0,
603
- menu_order: order++,
604
- });
633
+ }
634
+ catch (e) {
635
+ if (!finalUrl.startsWith('http://') && !finalUrl.startsWith('https://') && !finalUrl.startsWith('/')) {
636
+ finalUrl = `/${finalUrl}`;
637
+ }
638
+ if (finalUrl !== '/' && finalUrl.endsWith('/')) {
639
+ finalUrl = finalUrl.slice(0, -1);
640
+ }
641
+ }
642
+ const itemId = globalOrder + 1;
643
+ globalOrder++;
644
+ const menuItem = {
645
+ id: itemId,
646
+ title: title,
647
+ url: finalUrl,
648
+ type: 'custom',
649
+ object_id: 0,
650
+ object: 'custom',
651
+ parent: parentId,
652
+ menu_order: order,
653
+ };
654
+ // Check if this <li> contains a submenu (<ul class="wp-block-navigation__submenu-container">)
655
+ const submenuMatch = liElement.match(/<ul[^>]*class="[^"]*wp-block-navigation__submenu-container[^"]*"[^>]*>([\s\S]*?)<\/ul>/i);
656
+ if (submenuMatch) {
657
+ const submenuContent = submenuMatch[1];
658
+ const children = [];
659
+ let childOrder = 0;
660
+ // Extract all <li> elements from the submenu
661
+ const submenuLiRegex = /<li[^>]*class="[^"]*wp-block-navigation-item[^"]*"[^>]*>([\s\S]*?)<\/li>/gi;
662
+ let submenuLiMatch;
663
+ while ((submenuLiMatch = submenuLiRegex.exec(submenuContent)) !== null) {
664
+ const childResult = parseMenuItem(submenuLiMatch[1], itemId, childOrder++);
665
+ if (childResult) {
666
+ children.push(childResult.item);
667
+ globalOrder = childResult.nextOrder;
668
+ }
669
+ }
670
+ if (children.length > 0) {
671
+ menuItem.children = children;
672
+ }
673
+ }
674
+ return { item: menuItem, nextOrder: globalOrder };
675
+ }
676
+ // Extract all top-level <li> elements from the main navigation
677
+ // Find all <li> tags and extract complete items, filtering by position
678
+ const liRegex = /<li[^>]*>/gi;
679
+ const allLiMatches = [];
680
+ // First pass: find all <li> tags and their matching </li>
681
+ let match;
682
+ while ((match = liRegex.exec(mainNavContent)) !== null) {
683
+ const liStart = match.index;
684
+ let depth = 0;
685
+ let j = liStart;
686
+ while (j < mainNavContent.length) {
687
+ if (mainNavContent.substr(j, 3) === '<li' && /[>\s\n\t]/.test(mainNavContent[j + 3] || '')) {
688
+ depth++;
689
+ }
690
+ else if (mainNavContent.substr(j, 5) === '</li>') {
691
+ depth--;
692
+ if (depth === 0) {
693
+ allLiMatches.push({ start: liStart, end: j + 5 });
694
+ break;
695
+ }
696
+ }
697
+ j++;
698
+ }
699
+ }
700
+ // Second pass: filter to only top-level items (not inside submenu containers)
701
+ // Build a map of submenu container ranges
702
+ const submenuRanges = [];
703
+ const submenuContainerRegex = /<ul[^>]*class="[^"]*wp-block-navigation__submenu-container[^"]*"[^>]*>/gi;
704
+ let submenuMatch;
705
+ // Find all submenu containers and their matching </ul> tags
706
+ while ((submenuMatch = submenuContainerRegex.exec(mainNavContent)) !== null) {
707
+ const submenuStart = submenuMatch.index;
708
+ const submenuUlEnd = mainNavContent.indexOf('>', submenuStart);
709
+ if (submenuUlEnd === -1)
710
+ continue;
711
+ // Find matching </ul> by tracking depth
712
+ let ulDepth = 0;
713
+ let checkPos = submenuUlEnd + 1;
714
+ let submenuEnd = -1;
715
+ while (checkPos < mainNavContent.length) {
716
+ const ulOpen = mainNavContent.indexOf('<ul', checkPos);
717
+ const ulClose = mainNavContent.indexOf('</ul>', checkPos);
718
+ if (ulOpen !== -1 && (ulClose === -1 || ulOpen < ulClose)) {
719
+ ulDepth++;
720
+ checkPos = ulOpen + 3;
721
+ }
722
+ else if (ulClose !== -1) {
723
+ ulDepth--;
724
+ if (ulDepth === 0) {
725
+ submenuEnd = ulClose + 5;
726
+ break;
727
+ }
728
+ checkPos = ulClose + 5;
729
+ }
730
+ else {
731
+ break;
732
+ }
733
+ }
734
+ if (submenuEnd !== -1) {
735
+ submenuRanges.push({ start: submenuStart, end: submenuEnd });
736
+ }
737
+ }
738
+ // Filter <li> elements: exclude only those that are children inside submenu containers
739
+ // An <li> is a child (inside submenu) if: submenu's <ul> starts before <li> AND submenu's </ul> ends after <li> ends
740
+ // An <li> is a parent (contains submenu) if: <li> starts before submenu's <ul> (we want to include these)
741
+ for (const { start, end } of allLiMatches) {
742
+ // Check if this <li> is a child inside any submenu container
743
+ let isChildItem = false;
744
+ for (const range of submenuRanges) {
745
+ // If submenu <ul> starts before <li> AND submenu </ul> ends after <li> ends, then <li> is a child
746
+ if (range.start < start && range.end > end) {
747
+ isChildItem = true;
748
+ break;
749
+ }
750
+ }
751
+ // Include all items except children (children will be extracted by parseMenuItem as part of their parent)
752
+ if (!isChildItem) {
753
+ const item = mainNavContent.substring(start, end);
754
+ if (item.includes('wp-block-navigation-item')) {
755
+ const result = parseMenuItem(item, 0, items.length);
756
+ if (result) {
757
+ items.push(result.item);
758
+ globalOrder = result.nextOrder;
759
+ }
760
+ }
605
761
  }
606
762
  }
607
763
  if (items.length === 0) {
@@ -836,6 +992,33 @@ class WordPressGenerator {
836
992
  }
837
993
  catch (error) {
838
994
  console.warn(`⚠️ Could not fetch menu data for menu ID ${menuId}:`, error);
995
+ // Fallback: Try to find menu by name (mainmenu, main-menu, Main Menu, etc.)
996
+ console.log('🔍 Menu fetch failed, attempting to find menu by name "mainmenu"...');
997
+ try {
998
+ const namedMenu = await findMenuByName(client, 'mainmenu');
999
+ if (namedMenu && namedMenu.items && namedMenu.items.length > 0) {
1000
+ menuData = namedMenu;
1001
+ console.log(`✅ Found menu by name "mainmenu": ${namedMenu.name} (${namedMenu.items.length} items)`);
1002
+ }
1003
+ else {
1004
+ console.log('ℹ️ No menu found with name "mainmenu"');
1005
+ // Try extracting from Navigation block HTML as last resort
1006
+ console.log('🔍 Attempting to extract navigation from Navigation block innerHTML...');
1007
+ try {
1008
+ const extractedMenu = extractMenuFromNavigationBlock(navBlock);
1009
+ if (extractedMenu && extractedMenu.items && extractedMenu.items.length > 0) {
1010
+ menuData = extractedMenu;
1011
+ console.log(`✅ Extracted navigation from Navigation block: ${extractedMenu.items.length} items`);
1012
+ }
1013
+ }
1014
+ catch (extractError) {
1015
+ console.warn('⚠️ Error extracting navigation from Navigation block:', extractError);
1016
+ }
1017
+ }
1018
+ }
1019
+ catch (nameError) {
1020
+ console.warn('⚠️ Error finding menu by name:', nameError);
1021
+ }
839
1022
  }
840
1023
  }
841
1024
  else {
@@ -851,38 +1034,34 @@ class WordPressGenerator {
851
1034
  }
852
1035
  else {
853
1036
  console.log('ℹ️ No menu found with name "mainmenu"');
854
- // Priority 3: Fallback to extracting from innerBlocks or innerHTML
855
- // WordPress renders navigation blocks, so menu items might be in innerHTML
856
- console.log('🔍 Attempting to extract menu from navigation block (innerBlocks or innerHTML)...');
1037
+ // In block themes, navigation items may be stored directly in the Navigation block's innerBlocks
1038
+ // Try to extract from innerBlocks (this is how block themes work)
1039
+ console.log('🔍 Attempting to extract navigation from Navigation block innerBlocks...');
857
1040
  try {
858
1041
  const extractedMenu = extractMenuFromNavigationBlock(navBlock);
859
1042
  if (extractedMenu && extractedMenu.items && extractedMenu.items.length > 0) {
860
1043
  menuData = extractedMenu;
861
- console.log(`✅ Extracted menu from navigation block: ${extractedMenu.items.length} items`);
862
- console.log('📋 Menu items:', extractedMenu.items.map((item) => `${item.title} (${item.url})`).join(', '));
1044
+ console.log(`✅ Extracted navigation from Navigation block: ${extractedMenu.items.length} items`);
1045
+ console.log('📋 Navigation items:', extractedMenu.items.map((item) => `${item.title} (${item.url})`).join(', '));
1046
+ console.log('💡 TIP: For better control, create a WordPress menu (Appearance > Menus) named "mainmenu" and assign it to the Navigation block.');
863
1047
  }
864
1048
  else {
865
- console.log('ℹ️ Could not extract menu items from navigation block');
1049
+ console.log('⚠️ WARNING: No navigation found in Navigation block. The frontend will fall back to page hierarchy.');
1050
+ console.log('💡 TIP: Add navigation items to the Navigation block in the Site Editor, or create a menu named "mainmenu" in WordPress (Appearance > Menus).');
1051
+ menuData = null;
866
1052
  }
867
1053
  }
868
1054
  catch (error) {
869
- console.warn('⚠️ Error extracting menu from navigation block:', error);
1055
+ console.warn('⚠️ Error extracting navigation from Navigation block:', error);
1056
+ console.log('⚠️ WARNING: The frontend will fall back to page hierarchy.');
1057
+ menuData = null;
870
1058
  }
871
1059
  }
872
1060
  }
873
1061
  catch (error) {
874
1062
  console.warn('⚠️ Error finding menu by name:', error);
875
- // Fallback to HTML extraction if name lookup fails
876
- try {
877
- const extractedMenu = extractMenuFromNavigationBlock(navBlock);
878
- if (extractedMenu && extractedMenu.items && extractedMenu.items.length > 0) {
879
- menuData = extractedMenu;
880
- console.log(`✅ Extracted menu from navigation block: ${extractedMenu.items.length} items`);
881
- }
882
- }
883
- catch (extractError) {
884
- console.warn('⚠️ Error extracting menu from navigation block:', extractError);
885
- }
1063
+ console.log('ℹ️ Skipping HTML extraction - frontend will use page hierarchy fallback');
1064
+ menuData = null; // Don't use extracted menu - let frontend handle fallback
886
1065
  }
887
1066
  }
888
1067
  }