@deneb-ui/cli 2.0.73 → 2.0.74

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 (2) hide show
  1. package/bin/index.js +134 -32
  2. package/package.json +2 -2
package/bin/index.js CHANGED
@@ -572,7 +572,7 @@ function getComponentRegistry(importPkg) {
572
572
  'product-card': {
573
573
  file: 'ProductCard.tsx',
574
574
  component: 'EditableProductCard',
575
- code: `'use client';\n\nimport { EditableProductCard, type EditableProductCardProps } from '${importPkg}';\n\nexport function ProductCard(props: EditableProductCardProps) {\n return <EditableProductCard {...props} />;\n}\n`,
575
+ code: `'use client';\n\nimport { EditableProductCard, ProductCard, type EditableProductCardProps, type ProductItem } from '${importPkg}';\n\nexport { EditableProductCard, ProductCard, type EditableProductCardProps, type ProductItem };\n`,
576
576
  },
577
577
  'product-grid': {
578
578
  file: 'ProductGrid.tsx',
@@ -586,14 +586,48 @@ function getComponentRegistry(importPkg) {
586
586
  },
587
587
  'product-detail': {
588
588
  file: 'ProductDetail.tsx',
589
- component: 'EditableProductDetail',
590
- code: `'use client';\n\nimport { EditableProductDetail, ProductDetail, type EditableProductDetailProps, type ProductDetailItem } from '${importPkg}';\n\nexport { EditableProductDetail, ProductDetail, type EditableProductDetailProps, type ProductDetailItem };\n`,
589
+ component: 'PlatformProductDetail',
590
+ code: `'use client';\n\nimport { PlatformProductDetail, usePlatformProductDetail, platformProductDetailHref, type PlatformProductDetailProps } from '${importPkg}';\n\nexport function ProductDetail(props: PlatformProductDetailProps) {
591
+ return <PlatformProductDetail {...props} />;
592
+ }
593
+
594
+ export { PlatformProductDetail, usePlatformProductDetail, platformProductDetailHref, type PlatformProductDetailProps };\n`,
595
+ },
596
+ 'platform-product-detail': {
597
+ file: 'PlatformProductDetail.tsx',
598
+ component: 'PlatformProductDetail',
599
+ code: `'use client';\n\nimport { PlatformProductDetail, usePlatformProductDetail, platformProductDetailHref, type PlatformProductDetailProps } from '${importPkg}';\n\nexport { PlatformProductDetail, usePlatformProductDetail, platformProductDetailHref, type PlatformProductDetailProps };\n`,
591
600
  },
592
601
  'customer-reviews': {
593
602
  file: 'CustomerReviews.tsx',
594
603
  component: 'EditableCustomerReviews',
595
604
  code: `'use client';\n\nimport { EditableCustomerReviews, CustomerReviews, type EditableCustomerReviewsProps, type CustomerReviewItem } from '${importPkg}';\n\nexport { EditableCustomerReviews, CustomerReviews, type EditableCustomerReviewsProps, type CustomerReviewItem };\n`,
596
605
  },
606
+ 'reviews': {
607
+ file: 'CustomerReviews.tsx',
608
+ component: 'CustomerReviews',
609
+ code: `'use client';\n\nimport { EditableCustomerReviews, CustomerReviews, type EditableCustomerReviewsProps, type CustomerReviewItem } from '${importPkg}';\n\nexport { EditableCustomerReviews, CustomerReviews, type EditableCustomerReviewsProps, type CustomerReviewItem };\n`,
610
+ },
611
+ 'google-feedback': {
612
+ file: 'GoogleFeedback.tsx',
613
+ component: 'GoogleFeedback',
614
+ code: `'use client';\n\nimport { EditableGoogleFeedback, GoogleFeedback, type EditableGoogleFeedbackProps, type FeedbackItem } from '${importPkg}';\n\nexport { EditableGoogleFeedback, GoogleFeedback, type EditableGoogleFeedbackProps, type FeedbackItem };\n`,
615
+ },
616
+ 'feedback': {
617
+ file: 'GoogleFeedback.tsx',
618
+ component: 'GoogleFeedback',
619
+ code: `'use client';\n\nimport { EditableGoogleFeedback, GoogleFeedback, type EditableGoogleFeedbackProps, type FeedbackItem } from '${importPkg}';\n\nexport { EditableGoogleFeedback, GoogleFeedback, type EditableGoogleFeedbackProps, type FeedbackItem };\n`,
620
+ },
621
+ 'testimonial-section': {
622
+ file: 'TestimonialSection.tsx',
623
+ component: 'TestimonialSection',
624
+ code: `'use client';\n\nimport { EditableTestimonialSection, TestimonialSection, type EditableTestimonialSectionProps, type TestimonialSectionItem } from '${importPkg}';\n\nexport { EditableTestimonialSection, TestimonialSection, type EditableTestimonialSectionProps, type TestimonialSectionItem };\n`,
625
+ },
626
+ 'testimonials': {
627
+ file: 'TestimonialSection.tsx',
628
+ component: 'TestimonialSection',
629
+ code: `'use client';\n\nimport { EditableTestimonialSection, TestimonialSection, type EditableTestimonialSectionProps, type TestimonialSectionItem } from '${importPkg}';\n\nexport { EditableTestimonialSection, TestimonialSection, type EditableTestimonialSectionProps, type TestimonialSectionItem };\n`,
630
+ },
597
631
  'cart-drawer': {
598
632
  file: 'CartDrawer.tsx',
599
633
  component: 'EditableCartDrawer',
@@ -607,68 +641,117 @@ function getComponentRegistry(importPkg) {
607
641
  'pricing-card': {
608
642
  file: 'PricingCard.tsx',
609
643
  component: 'EditablePricingCard',
610
- code: `'use client';\n\nimport { EditablePricingCard, type EditablePricingCardProps } from '${importPkg}';\n\nexport function PricingCard(props: EditablePricingCardProps) {\n return <EditablePricingCard {...props} />;\n}\n`,
644
+ code: `'use client';\n\nimport { EditablePricingCard, type EditablePricingCardProps } from '${importPkg}';\n\nexport function PricingCard(props: EditablePricingCardProps) {
645
+ return <EditablePricingCard {...props} />;
646
+ }
647
+ `,
611
648
  },
612
649
  'testimonial-card': {
613
650
  file: 'TestimonialCard.tsx',
614
651
  component: 'EditableTestimonialCard',
615
- code: `'use client';\n\nimport { EditableTestimonialCard, type EditableTestimonialCardProps } from '${importPkg}';\n\nexport function TestimonialCard(props: EditableTestimonialCardProps) {\n return <EditableTestimonialCard {...props} />;\n}\n`,
652
+ code: `'use client';\n\nimport { EditableTestimonialCard, type EditableTestimonialCardProps } from '${importPkg}';\n\nexport function TestimonialCard(props: EditableTestimonialCardProps) {
653
+ return <EditableTestimonialCard {...props} />;
654
+ }
655
+ `,
616
656
  },
617
657
  'contact-form': {
618
658
  file: 'ContactForm.tsx',
619
659
  component: 'EditableContactForm',
620
- code: `'use client';\n\nimport { EditableContactForm, type EditableContactFormProps } from '${importPkg}';\n\nexport function ContactForm(props: EditableContactFormProps) {\n return <EditableContactForm {...props} />;\n}\n`,
660
+ code: `'use client';\n\nimport { EditableContactForm, type EditableContactFormProps } from '${importPkg}';\n\nexport function ContactForm(props: EditableContactFormProps) {
661
+ return <EditableContactForm {...props} />;
662
+ }
663
+ `,
621
664
  },
622
665
  'faq': {
623
666
  file: 'FAQAccordion.tsx',
624
667
  component: 'EditableFAQAccordion',
625
- code: `'use client';\n\nimport { EditableFAQAccordion, EditableFAQItem, type EditableFAQAccordionProps } from '${importPkg}';\n\nexport function FAQAccordion(props: EditableFAQAccordionProps) {\n return <EditableFAQAccordion {...props} />;\n}\n\nexport { EditableFAQItem };\n`,
668
+ code: `'use client';\n\nimport { EditableFAQAccordion, EditableFAQItem, type EditableFAQAccordionProps } from '${importPkg}';\n\nexport function FAQAccordion(props: EditableFAQAccordionProps) {
669
+ return <EditableFAQAccordion {...props} />;
670
+ }
671
+ \nexport { EditableFAQItem };\n`,
626
672
  },
627
673
  'navbar': {
628
674
  file: 'Navbar.tsx',
629
675
  component: 'EditableNavbar',
630
- code: `'use client';\n\nimport { EditableNavbar, type EditableNavbarProps } from '${importPkg}';\n\nexport function Navbar(props: EditableNavbarProps) {\n return <EditableNavbar {...props} />;\n}\n`,
676
+ code: `'use client';\n\nimport { EditableNavbar, type EditableNavbarProps } from '${importPkg}';\n\nexport function Navbar(props: EditableNavbarProps) {
677
+ return <EditableNavbar {...props} />;
678
+ }
679
+ `,
631
680
  },
632
681
  'footer': {
633
682
  file: 'Footer.tsx',
634
683
  component: 'EditableFooter',
635
- code: `'use client';\n\nimport { EditableFooter, type EditableFooterProps } from '${importPkg}';\n\nexport function Footer(props: EditableFooterProps) {\n return <EditableFooter {...props} />;\n}\n`,
684
+ code: `'use client';\n\nimport { EditableFooter, type EditableFooterProps } from '${importPkg}';\n\nexport function Footer(props: EditableFooterProps) {
685
+ return <EditableFooter {...props} />;
686
+ }
687
+ `,
636
688
  },
637
689
  'hero': {
638
690
  file: 'Hero.tsx',
639
691
  component: 'EditableHeroCentered',
640
- code: `'use client';\n\nimport { EditableHeroCentered, EditableHeroSplit, type EditableHeroCenteredProps, type EditableHeroSplitProps } from '${importPkg}';\n\nexport function HeroCentered(props: EditableHeroCenteredProps) {\n return <EditableHeroCentered {...props} />;\n}\n\nexport function HeroSplit(props: EditableHeroSplitProps) {\n return <EditableHeroSplit {...props} />;\n}\n`,
692
+ code: `'use client';\n\nimport { EditableHeroCentered, EditableHeroSplit, type EditableHeroCenteredProps, type EditableHeroSplitProps } from '${importPkg}';\n\nexport function HeroCentered(props: EditableHeroCenteredProps) {
693
+ return <EditableHeroCentered {...props} />;
694
+ }
695
+ \nexport function HeroSplit(props: EditableHeroSplitProps) {
696
+ return <EditableHeroSplit {...props} />;
697
+ }
698
+ `,
641
699
  },
642
700
  'whatsapp-button': {
643
701
  file: 'WhatsAppButton.tsx',
644
702
  component: 'WhatsAppButton',
645
703
  code: `'use client';\n\nimport { WhatsAppButton, type WhatsAppButtonProps } from '${importPkg}';\n\nexport { WhatsAppButton, type WhatsAppButtonProps };\n`,
646
704
  },
705
+ 'whatsapp': {
706
+ file: 'WhatsAppButton.tsx',
707
+ component: 'WhatsAppButton',
708
+ code: `'use client';\n\nimport { WhatsAppButton, type WhatsAppButtonProps } from '${importPkg}';\n\nexport { WhatsAppButton, type WhatsAppButtonProps };\n`,
709
+ },
647
710
  'whatsapp-order-button': {
648
711
  file: 'WhatsAppOrderButton.tsx',
649
712
  component: 'WhatsAppOrderButton',
650
- code: `'use client';\n\nimport React from 'react';\nimport { useSiteData } from '${importPkg}';\nimport { MessageCircle } from 'lucide-react';\n\nexport interface WhatsAppOrderButtonProps {\n product: { name: string; price?: string | number; brand?: string; condition?: string; [key: string]: any };\n selectedColor?: string;\n selectedStorage?: string;\n className?: string;\n showText?: boolean;\n}\n\nexport function WhatsAppOrderButton({\n product,\n selectedColor,\n selectedStorage,\n className = '',\n showText = true,\n}: WhatsAppOrderButtonProps) {\n const siteData = useSiteData();\n const rawTarget =\n siteData?.content?.home?.whatsappOrderUrl ||\n siteData?.content?.home?.whatsappNumber ||\n siteData?.content?.common?.business?.whatsapp ||\n 'https://wa.me/15550192834';\n const orderLabel = siteData?.content?.home?.whatsappOrderLabel ?? 'Order via WhatsApp';\n\n const handleWhatsAppClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n const color = selectedColor || product.colors?.[0]?.name || 'Default';\n const storage = selectedStorage || product.storageOptions?.[0] || 'Default';\n const message = \`Hi, I would like to order the following product:\\n\\n*\${product.name}*\\nBrand: \${product.brand || 'Store'}\\nCondition: \${product.condition || 'New'}\\nColor: \${color}\\nStorage: \${storage}\\nPrice: Rs \${product.price}\\n\\nIs it available?\`;\n\n let targetUrl = (rawTarget || '').trim();\n if (!targetUrl.startsWith('http://') && !targetUrl.startsWith('https://')) {\n const cleanNum = targetUrl.replace(/[^0-9]/g, '');\n targetUrl = \`https://wa.me/\${cleanNum || '15550192834'}\`;\n }\n const sep = targetUrl.includes('?') ? '&' : '?';\n const url = \`\${targetUrl}\${sep}text=\${encodeURIComponent(message)}\`;\n window.open(url, '_blank', 'noopener,noreferrer');\n };\n\n return (\n <button type=\"button\" onClick={handleWhatsAppClick} className={className}>\n <MessageCircle className=\"h-4 w-4\" />\n {showText && (\n <span data-preview-field-path=\"home.whatsappOrderLabel\" data-preview-style-target=\"home.whatsappOrderLabel\" data-preview-style-type=\"text\">\n {orderLabel}\n </span>\n )}\n </button>\n );\n}\n`,
713
+ code: `'use client';\n\nimport React from 'react';\nimport { useSiteData } from '${importPkg}';\nimport { MessageCircle } from 'lucide-react';\n\nexport interface WhatsAppOrderButtonProps {\n product: { name: string; price?: string | number; brand?: string; condition?: string; [key: string]: any };\n selectedColor?: string;\n selectedStorage?: string;\n className?: string;\n showText?: boolean;\n}\n\nexport function WhatsAppOrderButton({\n product,\n selectedColor,\n selectedStorage,\n className = '',\n showText = true,\n}: WhatsAppOrderButtonProps) {\n const siteData = useSiteData();\n const rawTarget =\n siteData?.content?.home?.whatsappOrderUrl ||\n siteData?.content?.home?.whatsappNumber ||\n siteData?.content?.common?.business?.whatsapp ||\n 'https://wa.me/15550192834';\n const orderLabel = siteData?.content?.home?.whatsappOrderLabel ?? 'Order via WhatsApp';\n\n const handleWhatsAppClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n const color = selectedColor || product.colors?.[0]?.name || 'Default';\n const storage = selectedStorage || product.storageOptions?.[0] || 'Default';\n const message = \`Hi, I would like to order the following product:\\n\\n*\${product.name}*\\nBrand: \${product.brand || 'Store'}\\nCondition: \${product.condition || 'New'}\\nColor: \${color}\\nStorage: \${storage}\\nPrice: Rs \${product.price}\\n\\nIs it available?\`;\n\n let targetUrl = (rawTarget || '').trim();\n if (!targetUrl.startsWith('http://') && !targetUrl.startsWith('https://')) {\n const cleanNum = targetUrl.replace(/[^0-9]/g, '');\n targetUrl = \`https://wa.me/\${cleanNum || '15550192834'}\`;\n }\n const sep = targetUrl.includes('?') ? '&' : '?';\n const url = \`\${targetUrl}\${sep}text=\${encodeURIComponent(message)}\`;\n window.open(url, '_blank', 'noopener,noreferrer');\n };\n\n return (\n <button type="button" onClick={handleWhatsAppClick} className={className}>\n <MessageCircle className="h-4 w-4" />\n {showText && (\n <span data-preview-field-path="home.whatsappOrderLabel" data-preview-style-target="home.whatsappOrderLabel" data-preview-style-type="text">\n {orderLabel}\n </span>\n )}\n </button>\n );\n}\n`,
651
714
  },
652
715
  'phone-button': {
653
716
  file: 'PhoneButton.tsx',
654
717
  component: 'PhoneButton',
655
718
  code: `'use client';\n\nimport { PhoneButton, type PhoneButtonProps } from '${importPkg}';\n\nexport { PhoneButton, type PhoneButtonProps };\n`,
656
719
  },
720
+ 'phone': {
721
+ file: 'PhoneButton.tsx',
722
+ component: 'PhoneButton',
723
+ code: `'use client';\n\nimport { PhoneButton, type PhoneButtonProps } from '${importPkg}';\n\nexport { PhoneButton, type PhoneButtonProps };\n`,
724
+ },
657
725
  'email-button': {
658
726
  file: 'EmailButton.tsx',
659
727
  component: 'EmailButton',
660
728
  code: `'use client';\n\nimport { EmailButton, type EmailButtonProps } from '${importPkg}';\n\nexport { EmailButton, type EmailButtonProps };\n`,
661
729
  },
730
+ 'email': {
731
+ file: 'EmailButton.tsx',
732
+ component: 'EmailButton',
733
+ code: `'use client';\n\nimport { EmailButton, type EmailButtonProps } from '${importPkg}';\n\nexport { EmailButton, type EmailButtonProps };\n`,
734
+ },
662
735
  'contact-actions': {
663
736
  file: 'ContactActions.tsx',
664
737
  component: 'ContactActions',
665
738
  code: `'use client';\n\nimport { ContactActions, type ContactActionsProps } from '${importPkg}';\n\nexport { ContactActions, type ContactActionsProps };\n`,
666
739
  },
740
+ 'contact': {
741
+ file: 'ContactActions.tsx',
742
+ component: 'ContactActions',
743
+ code: `'use client';\n\nimport { ContactActions, type ContactActionsProps } from '${importPkg}';\n\nexport { ContactActions, type ContactActionsProps };\n`,
744
+ },
667
745
  'location-card': {
668
746
  file: 'LocationCard.tsx',
669
747
  component: 'LocationCard',
670
748
  code: `'use client';\n\nimport { LocationCard, type LocationCardProps } from '${importPkg}';\n\nexport { LocationCard, type LocationCardProps };\n`,
671
749
  },
750
+ 'location': {
751
+ file: 'LocationCard.tsx',
752
+ component: 'LocationCard',
753
+ code: `'use client';\n\nimport { LocationCard, type LocationCardProps } from '${importPkg}';\n\nexport { LocationCard, type LocationCardProps };\n`,
754
+ },
672
755
  'location-link': {
673
756
  file: 'LocationLink.tsx',
674
757
  component: 'LocationLink',
@@ -692,7 +775,12 @@ function getComponentRegistry(importPkg) {
692
775
  'business-hours': {
693
776
  file: 'BusinessHours.tsx',
694
777
  component: 'BusinessHours',
695
- code: `'use client';\n\nimport { BusinessHours, type BusinessHoursProps } from '${importPkg}';\n\nexport { BusinessHours, type BusinessHoursProps };\n`,
778
+ code: `'use client';\n\nimport { BusinessHours, type BusinessHoursProps, type WeeklyHours, type DaySchedule } from '${importPkg}';\n\nexport { BusinessHours, type BusinessHoursProps, type WeeklyHours, type DaySchedule };\n`,
779
+ },
780
+ 'hours': {
781
+ file: 'BusinessHours.tsx',
782
+ component: 'BusinessHours',
783
+ code: `'use client';\n\nimport { BusinessHours, type BusinessHoursProps, type WeeklyHours, type DaySchedule } from '${importPkg}';\n\nexport { BusinessHours, type BusinessHoursProps, type WeeklyHours, type DaySchedule };\n`,
696
784
  },
697
785
  'announcement-bar': {
698
786
  file: 'AnnouncementBar.tsx',
@@ -734,26 +822,6 @@ function getComponentRegistry(importPkg) {
734
822
  component: 'DenebAction',
735
823
  code: `'use client';\n\nimport { DenebAction, type DenebActionProps } from '${importPkg}';\n\nexport { DenebAction, type DenebActionProps };\n`,
736
824
  },
737
- 'product-card': {
738
- file: 'ProductCard.tsx',
739
- component: 'EditableProductCard',
740
- code: `'use client';\n\nimport { EditableProductCard, type EditableProductCardProps, type ProductItem } from '${importPkg}';\n\nexport function ProductCard(props: EditableProductCardProps) {\n return <EditableProductCard {...props} />;\n}\n\nexport { EditableProductCard, type EditableProductCardProps, type ProductItem };\n`,
741
- },
742
- 'product-grid': {
743
- file: 'ProductGrid.tsx',
744
- component: 'EditableProductGrid',
745
- code: `'use client';\n\nimport { EditableProductGrid, ProductGrid, type EditableProductGridProps } from '${importPkg}';\n\nexport { EditableProductGrid, ProductGrid, type EditableProductGridProps };\n`,
746
- },
747
- 'product-detail': {
748
- file: 'ProductDetail.tsx',
749
- component: 'PlatformProductDetail',
750
- code: `'use client';\n\nimport { PlatformProductDetail, usePlatformProductDetail, platformProductDetailHref, type PlatformProductDetailProps } from '${importPkg}';\n\nexport function ProductDetail(props: PlatformProductDetailProps) {\n return <PlatformProductDetail {...props} />;\n}\n\nexport { PlatformProductDetail, usePlatformProductDetail, platformProductDetailHref, type PlatformProductDetailProps };\n`,
751
- },
752
- 'platform-product-detail': {
753
- file: 'PlatformProductDetail.tsx',
754
- component: 'PlatformProductDetail',
755
- code: `'use client';\n\nimport { PlatformProductDetail, usePlatformProductDetail, platformProductDetailHref, type PlatformProductDetailProps } from '${importPkg}';\n\nexport { PlatformProductDetail, usePlatformProductDetail, platformProductDetailHref, type PlatformProductDetailProps };\n`,
756
- },
757
825
  };
758
826
  }
759
827
 
@@ -991,6 +1059,40 @@ async function initProject(targetInput, options = {}) {
991
1059
  }
992
1060
  }
993
1061
 
1062
+
1063
+ // 4.7. Auto-scaffold core ready-to-use DENEB UI components in src/components/ui/
1064
+ const uiDir = path.join(targetDir, 'src', 'components', 'ui');
1065
+ if (!fs.existsSync(uiDir)) {
1066
+ fs.mkdirSync(uiDir, { recursive: true });
1067
+ }
1068
+ const compRegistry = getComponentRegistry(importPkg);
1069
+ const coreToScaffold = [
1070
+ 'product-grid',
1071
+ 'product-card',
1072
+ 'customer-reviews',
1073
+ 'google-feedback',
1074
+ 'location-card',
1075
+ 'location-link',
1076
+ 'whatsapp-button',
1077
+ 'contact-actions',
1078
+ 'business-hours',
1079
+ 'map-embed',
1080
+ ];
1081
+ let scaffoldedCount = 0;
1082
+ for (const key of coreToScaffold) {
1083
+ const item = compRegistry[key];
1084
+ if (item) {
1085
+ const targetFile = path.join(uiDir, item.file);
1086
+ if (!fs.existsSync(targetFile)) {
1087
+ fs.writeFileSync(targetFile, item.code, 'utf8');
1088
+ scaffoldedCount++;
1089
+ }
1090
+ }
1091
+ }
1092
+ if (scaffoldedCount > 0) {
1093
+ console.log(`\x1b[32m✔ Auto-installed\x1b[0m ${scaffoldedCount} essential DENEB UI components in src/components/ui/ (ProductGrid, CustomerReviews, GoogleFeedback, LocationCard, WhatsAppButton, BusinessHours, etc.)`);
1094
+ }
1095
+
994
1096
  // 4. Update package.json scripts
995
1097
  pkg.scripts = pkg.scripts || {};
996
1098
  const scriptsToAdd = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deneb-ui/cli",
3
- "version": "2.0.73",
3
+ "version": "2.0.74",
4
4
  "description": "Official DENEB CLI — scaffold, convert, validate, and package Fivora-ready storefront templates.",
5
5
  "bin": {
6
6
  "deneb": "bin/index.js",
@@ -49,7 +49,7 @@
49
49
  "license": "MIT",
50
50
  "dependencies": {
51
51
  "@babel/parser": "^7.28.0",
52
- "@deneb-ui/core": "^2.0.73",
52
+ "@deneb-ui/core": "^2.0.74",
53
53
  "@octokit/rest": "^22.0.1",
54
54
  "adm-zip": "^0.6.0",
55
55
  "dotenv": "^17.4.2",