From 0d4eabca8ce6372a0d497c21a84a7d672054f775 Mon Sep 17 00:00:00 2001 From: Raj Patel Date: Fri, 11 Oct 2024 17:56:21 +0530 Subject: [PATCH 01/32] fix: missing React imports in multiple JSX/TSX files (#3287) --- components/Calendar.tsx | 1 + components/CaseStudyCard.tsx | 2 ++ components/CaseTOC.tsx | 2 +- components/ClickableLogo.tsx | 1 + components/DemoAnimation.tsx | 2 +- components/Feedback.tsx | 2 +- components/Figure.tsx | 2 ++ components/FinancialSummary/AsyncAPISummary.tsx | 2 ++ components/FinancialSummary/Card.tsx | 2 ++ components/FinancialSummary/ContactUs.tsx | 2 ++ components/FinancialSummary/CustomTooltip.tsx | 2 ++ components/FinancialSummary/ExpenseBreakdown.tsx | 2 ++ components/FinancialSummary/ExpensesCard.tsx | 2 ++ components/FinancialSummary/OtherFormsComponent.tsx | 2 ++ components/FinancialSummary/SponsorshipTiers.tsx | 2 ++ components/FinancialSummary/SuccessStories.tsx | 2 ++ components/GeneratorInstallation.tsx | 2 +- components/Hero.tsx | 2 ++ components/InlineHelp.tsx | 2 +- components/InputBox.stories.tsx | 1 + components/Loader.stories.tsx | 1 + components/MDX/MDX.tsx | 2 +- components/MacWindow.tsx | 2 ++ components/Meeting.tsx | 1 + components/Modal.tsx | 2 +- components/NewsletterSubscribe.tsx | 2 +- components/Profiles.tsx | 2 ++ components/Remember.tsx | 2 ++ components/SupportUs/SupportUs.tsx | 2 ++ components/TOC.tsx | 2 +- components/Testimonial.tsx | 2 ++ components/Warning.tsx | 2 ++ components/buttons/Button.stories.tsx | 1 + components/buttons/Button.tsx | 1 + components/buttons/ChapterSuggestion.tsx | 1 + components/buttons/ChapterSuggestions.tsx | 2 ++ components/buttons/DocsButton.tsx | 1 + components/buttons/GithubButton.tsx | 2 ++ components/buttons/GoogleCalendarButton.tsx | 2 ++ components/buttons/ICSFileButton.tsx | 2 ++ components/buttons/OpenInStudioButton.tsx | 2 ++ components/buttons/SlackButton.tsx | 2 ++ components/buttons/SubscribeButton.tsx | 2 ++ components/buttons/YoutubeButton.tsx | 2 ++ components/campaigns/AnnouncementHero.tsx | 2 +- components/community/Hero.tsx | 2 ++ components/dashboard/Button.tsx | 2 ++ components/dashboard/GoodFirstIssues.tsx | 2 +- components/dashboard/GoodFirstIssuesTip.tsx | 2 +- components/dashboard/Header.tsx | 2 ++ components/dashboard/table/Filters.tsx | 2 +- components/dashboard/table/Row.tsx | 2 ++ components/dashboard/table/Table.tsx | 2 ++ components/docs/Card.tsx | 1 + components/editor/CodeBlock.tsx | 2 +- components/faq/FAQ.tsx | 2 ++ components/icons/Ambassador.tsx | 2 ++ components/icons/ArrowDown.tsx | 2 ++ components/icons/ArrowLeft.tsx | 2 ++ components/icons/ArrowRight.tsx | 2 ++ components/icons/ArrowUp.tsx | 2 ++ components/icons/AsyncAPI.tsx | 2 ++ components/icons/AsyncAPIColorIcon.tsx | 2 ++ components/icons/Calendar.tsx | 2 ++ components/icons/CenterMenu.tsx | 2 ++ components/icons/CircularLoader.tsx | 2 ++ components/icons/Clipboard.tsx | 2 ++ components/icons/Code.tsx | 2 ++ components/icons/Community.tsx | 2 ++ components/icons/Conference.tsx | 2 ++ components/icons/Contributing.tsx | 2 ++ components/icons/Cross.tsx | 2 +- components/icons/Dashboard.tsx | 2 ++ components/icons/DocsArrow.tsx | 2 ++ components/icons/Documents.tsx | 2 ++ components/icons/Exclamation.tsx | 2 ++ components/icons/Explorer.tsx | 2 ++ components/icons/Filter.tsx | 2 ++ components/icons/Generator.tsx | 2 ++ components/icons/GettingStarted.tsx | 2 ++ components/icons/Github.tsx | 2 ++ components/icons/GithubActions.tsx | 2 ++ components/icons/GithubOrganization.tsx | 2 ++ components/icons/GoogleCalendar.tsx | 2 ++ components/icons/GradCap.tsx | 2 ++ components/icons/Guide.tsx | 2 ++ components/icons/Home.tsx | 2 ++ components/icons/Hub.tsx | 2 ++ components/icons/InfoIcon.tsx | 2 ++ components/icons/LightBulb.tsx | 2 ++ components/icons/LinkedIn.tsx | 2 ++ components/icons/Loupe.tsx | 2 ++ components/icons/Meetings.tsx | 2 ++ components/icons/Migration.tsx | 2 ++ components/icons/Modelina.tsx | 2 ++ components/icons/NavItemDropdown.tsx | 2 ++ components/icons/Newsroom.tsx | 2 ++ components/icons/Paper.tsx | 2 ++ components/icons/Parser.tsx | 2 ++ components/icons/Plant.tsx | 2 ++ components/icons/Plugins.tsx | 2 ++ components/icons/PowerPlug.tsx | 2 ++ components/icons/QuestionMark.tsx | 2 ++ components/icons/Quote.tsx | 2 ++ components/icons/React.tsx | 2 ++ components/icons/Rocket.tsx | 2 ++ components/icons/Search.tsx | 2 ++ components/icons/SearchIcon.tsx | 2 ++ components/icons/Slack.tsx | 2 ++ components/icons/Spec.tsx | 2 ++ components/icons/Subscribe.tsx | 2 ++ components/icons/TSC.tsx | 2 ++ components/icons/Tools.tsx | 2 ++ components/icons/Tutorials.tsx | 2 ++ components/icons/Twitch.tsx | 2 ++ components/icons/Twitter.tsx | 2 ++ components/icons/UseCases.tsx | 2 ++ components/icons/Users.tsx | 2 ++ components/icons/Webinar.tsx | 2 ++ components/icons/YouTube.tsx | 2 ++ components/icons/YouTubeGray.tsx | 2 ++ components/languageSelector/LanguageSelect.tsx | 1 + components/layout/BlogLayout.tsx | 1 + components/layout/Column.tsx | 2 ++ components/layout/DocsLayout.tsx | 2 +- components/layout/GenericLayout.tsx | 2 ++ components/layout/GenericPostLayout.tsx | 1 + components/layout/GenericWideLayout.tsx | 2 ++ components/layout/Layout.tsx | 1 + components/layout/Row.tsx | 2 ++ components/link.tsx | 1 + components/logos/Adidas.tsx | 2 ++ components/logos/AsyncAPILogo.tsx | 1 + components/logos/Axway.tsx | 2 ++ components/logos/SAP.tsx | 2 +- components/logos/Salesforce.tsx | 2 ++ components/logos/Slack.tsx | 2 ++ components/navigation/BlogPostCard.stories.tsx | 1 + components/navigation/CommunityPanel.tsx | 2 ++ components/navigation/DocsNav.tsx | 2 +- components/navigation/DocsNavItem.tsx | 1 + components/navigation/DocsNavWrapper.tsx | 2 ++ components/navigation/Filter.tsx | 2 +- components/navigation/FlyoutMenu.tsx | 2 ++ components/navigation/Label.tsx | 2 ++ components/navigation/LearningPanel.tsx | 2 ++ components/navigation/MenuBlocks.tsx | 1 + components/navigation/MobileNavMenu.tsx | 2 +- components/navigation/NavBar.tsx | 2 +- components/navigation/SubCategoryDocsNav.tsx | 2 +- components/navigation/ToolsPanel.tsx | 2 ++ components/navigation/TutorialList.tsx | 2 +- components/navigation/communityItems.tsx | 2 ++ components/navigation/learningItems.tsx | 2 ++ components/navigation/toolingItems.tsx | 1 + components/newsroom/FeaturedBlogPost.tsx | 1 + components/newsroom/Newsroom.tsx | 1 + components/newsroom/NewsroomBlogPosts.tsx | 2 +- components/newsroom/NewsroomSection.tsx | 2 ++ components/newsroom/NewsroomYoutube.tsx | 2 +- components/newsroom/swiper.tsx | 1 + components/roadmap/RoadmapItem.tsx | 2 +- components/roadmap/RoadmapList.tsx | 2 ++ components/roadmap/RoadmapPill.tsx | 2 +- components/slack/index.tsx | 2 ++ components/sponsors/GoldSponsors.tsx | 2 ++ components/sponsors/SilverSponsors.tsx | 2 ++ components/sponsors/Sponsors.tsx | 2 ++ components/tools/CategoryDropdown.tsx | 2 ++ components/tools/Checkbox.stories.tsx | 1 + components/tools/Checkbox.tsx | 1 + components/tools/Filters.tsx | 2 +- components/tools/FiltersDisplay.tsx | 1 + components/tools/FiltersDropdown.tsx | 1 + components/tools/Tags.tsx | 2 ++ components/tools/Toggle.stories.tsx | 1 + components/tools/Toggle.tsx | 1 + components/tools/ToolsDashboard.tsx | 2 +- components/tools/ToolsList.tsx | 2 ++ components/typography/Paragraph.tsx | 1 + components/typography/TextLink.tsx | 1 + context/AppContext.tsx | 5 +++-- context/GenericPostContext.tsx | 2 +- context/ToolFilterContext.tsx | 2 +- pages/_document.tsx | 1 + pages/casestudies/[id].tsx | 1 + pages/casestudies/index.tsx | 2 ++ pages/community/dashboard.tsx | 2 ++ pages/community/newsroom.tsx | 2 ++ pages/community/tsc.tsx | 2 +- pages/tools/cli.tsx | 1 + pages/tools/generator.tsx | 2 ++ pages/tools/github-actions.tsx | 2 ++ pages/tools/index.tsx | 2 ++ pages/tools/parsers.tsx | 2 ++ 195 files changed, 325 insertions(+), 34 deletions(-) diff --git a/components/Calendar.tsx b/components/Calendar.tsx index 2805abf2f7c..767f2964880 100644 --- a/components/Calendar.tsx +++ b/components/Calendar.tsx @@ -1,4 +1,5 @@ import moment from 'moment'; +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { IEvent } from '@/types/event'; diff --git a/components/CaseStudyCard.tsx b/components/CaseStudyCard.tsx index 241e9b5aa84..7b6bad8dadb 100644 --- a/components/CaseStudyCard.tsx +++ b/components/CaseStudyCard.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ICaseStudies } from '@/types/post'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/CaseTOC.tsx b/components/CaseTOC.tsx index 6008a6ea156..e242c6af579 100644 --- a/components/CaseTOC.tsx +++ b/components/CaseTOC.tsx @@ -1,4 +1,4 @@ -import { useMemo, useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { twMerge } from 'tailwind-merge'; import { useHeadingsObserver } from './helpers/useHeadingsObserver'; diff --git a/components/ClickableLogo.tsx b/components/ClickableLogo.tsx index e40e7fa488c..98836011e1f 100644 --- a/components/ClickableLogo.tsx +++ b/components/ClickableLogo.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; import AsyncAPILogo from './logos/AsyncAPILogo'; diff --git a/components/DemoAnimation.tsx b/components/DemoAnimation.tsx index 0e8affd7628..1748d0c6ca2 100644 --- a/components/DemoAnimation.tsx +++ b/components/DemoAnimation.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import Typing from 'react-typist-component'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; diff --git a/components/Feedback.tsx b/components/Feedback.tsx index 6fad56ecb20..104e21107f0 100644 --- a/components/Feedback.tsx +++ b/components/Feedback.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import GitHubIssue from './buttons/GitHubIssue'; diff --git a/components/Figure.tsx b/components/Figure.tsx index 878258ce775..c20a92884c3 100644 --- a/components/Figure.tsx +++ b/components/Figure.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { Float } from '@/types/components/FigurePropsType'; import Caption from './Caption'; diff --git a/components/FinancialSummary/AsyncAPISummary.tsx b/components/FinancialSummary/AsyncAPISummary.tsx index 280a24b476f..7ee80d54dbf 100644 --- a/components/FinancialSummary/AsyncAPISummary.tsx +++ b/components/FinancialSummary/AsyncAPISummary.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/FinancialSummary/Card.tsx b/components/FinancialSummary/Card.tsx index 7e46e272733..44c9a00ca55 100644 --- a/components/FinancialSummary/Card.tsx +++ b/components/FinancialSummary/Card.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ExpenseItem, Expenses } from '@/types/FinancialSummary/BarChartComponent'; import ExpensesLinkData from '../../config/finance/json-data/ExpensesLink.json'; diff --git a/components/FinancialSummary/ContactUs.tsx b/components/FinancialSummary/ContactUs.tsx index 738631f8e8f..1e0dd9560d3 100644 --- a/components/FinancialSummary/ContactUs.tsx +++ b/components/FinancialSummary/ContactUs.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/FinancialSummary/CustomTooltip.tsx b/components/FinancialSummary/CustomTooltip.tsx index fa23aa5e69e..f4ae6afe117 100644 --- a/components/FinancialSummary/CustomTooltip.tsx +++ b/components/FinancialSummary/CustomTooltip.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { CustomTooltipProps } from '@/types/FinancialSummary/BarChartComponent'; /** diff --git a/components/FinancialSummary/ExpenseBreakdown.tsx b/components/FinancialSummary/ExpenseBreakdown.tsx index 89ceaff56f7..d0566968820 100644 --- a/components/FinancialSummary/ExpenseBreakdown.tsx +++ b/components/FinancialSummary/ExpenseBreakdown.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; import { expenseData } from '../data/ExpenseBreakdownData'; diff --git a/components/FinancialSummary/ExpensesCard.tsx b/components/FinancialSummary/ExpensesCard.tsx index 86af3e7b1b8..5bf593f9642 100644 --- a/components/FinancialSummary/ExpensesCard.tsx +++ b/components/FinancialSummary/ExpensesCard.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { Expenses } from '@/types/FinancialSummary/BarChartComponent'; import ExpensesData from '../../config/finance/json-data/Expenses.json'; diff --git a/components/FinancialSummary/OtherFormsComponent.tsx b/components/FinancialSummary/OtherFormsComponent.tsx index d3132dc931a..2c52e7775fc 100644 --- a/components/FinancialSummary/OtherFormsComponent.tsx +++ b/components/FinancialSummary/OtherFormsComponent.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; import { otherFormsData } from '../data/otherFormsData'; diff --git a/components/FinancialSummary/SponsorshipTiers.tsx b/components/FinancialSummary/SponsorshipTiers.tsx index 42464c7f9e6..082fc22e5a3 100644 --- a/components/FinancialSummary/SponsorshipTiers.tsx +++ b/components/FinancialSummary/SponsorshipTiers.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/FinancialSummary/SuccessStories.tsx b/components/FinancialSummary/SuccessStories.tsx index 487be9fd1a3..2ffdd960b00 100644 --- a/components/FinancialSummary/SuccessStories.tsx +++ b/components/FinancialSummary/SuccessStories.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { successStories } from '../data/successStoriesData'; /** diff --git a/components/GeneratorInstallation.tsx b/components/GeneratorInstallation.tsx index 713e819198e..bf4d937f802 100644 --- a/components/GeneratorInstallation.tsx +++ b/components/GeneratorInstallation.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/Hero.tsx b/components/Hero.tsx index 6ce5289e085..c0609e83756 100644 --- a/components/Hero.tsx +++ b/components/Hero.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/InlineHelp.tsx b/components/InlineHelp.tsx index ec8d039da2a..0db3fd87f44 100644 --- a/components/InlineHelp.tsx +++ b/components/InlineHelp.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { registerClickAway } from './helpers/click-away'; import QuestionMark from './icons/QuestionMark'; diff --git a/components/InputBox.stories.tsx b/components/InputBox.stories.tsx index f30247a7b83..78edb891d6f 100644 --- a/components/InputBox.stories.tsx +++ b/components/InputBox.stories.tsx @@ -1,5 +1,6 @@ import { useArgs } from '@storybook/preview-api'; import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import type { InputBoxProps } from '@/types/components/InputBoxPropsType'; import { InputTypes } from '@/types/components/InputBoxPropsType'; diff --git a/components/Loader.stories.tsx b/components/Loader.stories.tsx index 85d97ee8867..563f1ed81e7 100644 --- a/components/Loader.stories.tsx +++ b/components/Loader.stories.tsx @@ -1,4 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import AsyncAPIColorIcon from '@/components/icons/AsyncAPIColorIcon'; import IconCircularLoader from '@/components/icons/CircularLoader'; diff --git a/components/MDX/MDX.tsx b/components/MDX/MDX.tsx index f9846fd6ec8..32bdb94f978 100644 --- a/components/MDX/MDX.tsx +++ b/components/MDX/MDX.tsx @@ -1,7 +1,7 @@ import { MDXProvider as CoreMDXProvider } from '@mdx-js/react'; import mermaid from 'mermaid'; import Link from 'next/link'; -import { useLayoutEffect, useState } from 'react'; +import React, { useLayoutEffect, useState } from 'react'; import { TwitterDMButton, TwitterFollowButton, diff --git a/components/MacWindow.tsx b/components/MacWindow.tsx index 5b419add92c..9deb60ae7e0 100644 --- a/components/MacWindow.tsx +++ b/components/MacWindow.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface IMacWindowProps { className?: string; contentClassName?: string; diff --git a/components/Meeting.tsx b/components/Meeting.tsx index fe2816fbd74..41bb90dd0fb 100644 --- a/components/Meeting.tsx +++ b/components/Meeting.tsx @@ -1,4 +1,5 @@ import { ArrowRightIcon } from '@heroicons/react/outline'; +import React from 'react'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/Modal.tsx b/components/Modal.tsx index ddaefd84ea7..95763029607 100644 --- a/components/Modal.tsx +++ b/components/Modal.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef } from 'react'; +import React, { useEffect, useRef } from 'react'; interface IModalProps { title: string; diff --git a/components/NewsletterSubscribe.tsx b/components/NewsletterSubscribe.tsx index b4bad37ed2d..9b4a983bc69 100644 --- a/components/NewsletterSubscribe.tsx +++ b/components/NewsletterSubscribe.tsx @@ -1,5 +1,5 @@ import { useTranslation } from 'next-i18next'; -import { useState } from 'react'; +import React, { useState } from 'react'; import IconCircularLoader from '@/components/icons/CircularLoader'; import { ButtonType } from '@/types/components/buttons/ButtonPropsType'; diff --git a/components/Profiles.tsx b/components/Profiles.tsx index aeb1f567bd5..bfe0b6cbaa7 100644 --- a/components/Profiles.tsx +++ b/components/Profiles.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + type Profile = { name: string; link: string; diff --git a/components/Remember.tsx b/components/Remember.tsx index 2f61af39d0e..04a0ae5d090 100644 --- a/components/Remember.tsx +++ b/components/Remember.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import LightBulb from './icons/LightBulb'; interface RememberProps { diff --git a/components/SupportUs/SupportUs.tsx b/components/SupportUs/SupportUs.tsx index 9eb62242097..399fb0ca5dc 100644 --- a/components/SupportUs/SupportUs.tsx +++ b/components/SupportUs/SupportUs.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { items } from './SupportItemsList'; interface SupportUsProps { diff --git a/components/TOC.tsx b/components/TOC.tsx index 89667a72468..43819f0257e 100644 --- a/components/TOC.tsx +++ b/components/TOC.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import Scrollspy from 'react-scrollspy'; import { twMerge } from 'tailwind-merge'; diff --git a/components/Testimonial.tsx b/components/Testimonial.tsx index 5d25a769fc0..b8a2d5abce2 100644 --- a/components/Testimonial.tsx +++ b/components/Testimonial.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import IconQuote from './icons/Quote'; import Paragraph from './typography/Paragraph'; diff --git a/components/Warning.tsx b/components/Warning.tsx index dceff8014d5..3a937e86abc 100644 --- a/components/Warning.tsx +++ b/components/Warning.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import IconExclamation from './icons/Exclamation'; interface WarningProps { diff --git a/components/buttons/Button.stories.tsx b/components/buttons/Button.stories.tsx index a38eb40977f..72d5af2c23a 100644 --- a/components/buttons/Button.stories.tsx +++ b/components/buttons/Button.stories.tsx @@ -1,4 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import { ButtonIconPosition, ButtonSize, ButtonType } from '@/types/components/buttons/ButtonPropsType'; diff --git a/components/buttons/Button.tsx b/components/buttons/Button.tsx index 2b4a30412c3..e19093238eb 100644 --- a/components/buttons/Button.tsx +++ b/components/buttons/Button.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; import { twMerge } from 'tailwind-merge'; import { ButtonIconPosition, ButtonSize, ButtonType } from '@/types/components/buttons/ButtonPropsType'; diff --git a/components/buttons/ChapterSuggestion.tsx b/components/buttons/ChapterSuggestion.tsx index 1addc113fe5..a2d59880ada 100644 --- a/components/buttons/ChapterSuggestion.tsx +++ b/components/buttons/ChapterSuggestion.tsx @@ -1,5 +1,6 @@ import Link from 'next/link'; import type { HTMLAttributeAnchorTarget } from 'react'; +import React from 'react'; import type { Url } from 'url'; import IconArrowRight from '../icons/ArrowRight'; diff --git a/components/buttons/ChapterSuggestions.tsx b/components/buttons/ChapterSuggestions.tsx index 2986418271a..3d6d7eb5a02 100644 --- a/components/buttons/ChapterSuggestions.tsx +++ b/components/buttons/ChapterSuggestions.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { IChapterSuggestionProps } from './ChapterSuggestion'; import ChapterSuggestion from './ChapterSuggestion'; diff --git a/components/buttons/DocsButton.tsx b/components/buttons/DocsButton.tsx index b56a353312c..16f12205379 100644 --- a/components/buttons/DocsButton.tsx +++ b/components/buttons/DocsButton.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; import type { IDocs } from '@/types/post'; diff --git a/components/buttons/GithubButton.tsx b/components/buttons/GithubButton.tsx index 571972d0869..43e11e6b11d 100644 --- a/components/buttons/GithubButton.tsx +++ b/components/buttons/GithubButton.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ButtonIconPosition, ButtonSize } from '@/types/components/buttons/ButtonPropsType'; import type { IButtonDefaultProps } from '../../types/components/buttons/types'; diff --git a/components/buttons/GoogleCalendarButton.tsx b/components/buttons/GoogleCalendarButton.tsx index 114b60fb450..15f16dca65f 100644 --- a/components/buttons/GoogleCalendarButton.tsx +++ b/components/buttons/GoogleCalendarButton.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ButtonIconPosition } from '@/types/components/buttons/ButtonPropsType'; import type { IButtonDefaultProps } from '../../types/components/buttons/types'; diff --git a/components/buttons/ICSFileButton.tsx b/components/buttons/ICSFileButton.tsx index ad03fac4d13..1f529cee3c1 100644 --- a/components/buttons/ICSFileButton.tsx +++ b/components/buttons/ICSFileButton.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ButtonIconPosition } from '@/types/components/buttons/ButtonPropsType'; import type { IButtonDefaultProps } from '../../types/components/buttons/types'; diff --git a/components/buttons/OpenInStudioButton.tsx b/components/buttons/OpenInStudioButton.tsx index 55b8c361215..7ffef59baf0 100644 --- a/components/buttons/OpenInStudioButton.tsx +++ b/components/buttons/OpenInStudioButton.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import IconRocket from '../icons/Rocket'; import Button from './Button'; diff --git a/components/buttons/SlackButton.tsx b/components/buttons/SlackButton.tsx index e30a87c2722..b69b7b29216 100644 --- a/components/buttons/SlackButton.tsx +++ b/components/buttons/SlackButton.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ButtonIconPosition } from '@/types/components/buttons/ButtonPropsType'; import type { IButtonDefaultProps } from '../../types/components/buttons/types'; diff --git a/components/buttons/SubscribeButton.tsx b/components/buttons/SubscribeButton.tsx index 225088aceb4..b78bb44f3b8 100644 --- a/components/buttons/SubscribeButton.tsx +++ b/components/buttons/SubscribeButton.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ButtonIconPosition } from '@/types/components/buttons/ButtonPropsType'; import type { IButtonDefaultProps } from '../../types/components/buttons/types'; diff --git a/components/buttons/YoutubeButton.tsx b/components/buttons/YoutubeButton.tsx index f48d4ac1184..4ca4ab33165 100644 --- a/components/buttons/YoutubeButton.tsx +++ b/components/buttons/YoutubeButton.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ButtonIconPosition } from '@/types/components/buttons/ButtonPropsType'; import type { IButtonDefaultProps } from '../../types/components/buttons/types'; diff --git a/components/campaigns/AnnouncementHero.tsx b/components/campaigns/AnnouncementHero.tsx index 1f84cb48c5e..61ffb47b85e 100644 --- a/components/campaigns/AnnouncementHero.tsx +++ b/components/campaigns/AnnouncementHero.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import ArrowLeft from '../icons/ArrowLeft'; import ArrowRight from '../icons/ArrowRight'; diff --git a/components/community/Hero.tsx b/components/community/Hero.tsx index 5dea5c49ba0..59957e084ca 100644 --- a/components/community/Hero.tsx +++ b/components/community/Hero.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import orbitData from '../../config/orbitData.json'; import Header from './Header'; diff --git a/components/dashboard/Button.tsx b/components/dashboard/Button.tsx index a5927e98edf..ba6bb691c34 100644 --- a/components/dashboard/Button.tsx +++ b/components/dashboard/Button.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface ButtonProps { text: string; onClick: (event: React.MouseEvent) => void; diff --git a/components/dashboard/GoodFirstIssues.tsx b/components/dashboard/GoodFirstIssues.tsx index dccc6a8c48c..29cec9a3a91 100644 --- a/components/dashboard/GoodFirstIssues.tsx +++ b/components/dashboard/GoodFirstIssues.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import type { Issue } from '@/types/components/dashboard/TableTypes'; diff --git a/components/dashboard/GoodFirstIssuesTip.tsx b/components/dashboard/GoodFirstIssuesTip.tsx index af732f50642..4a8a2197160 100644 --- a/components/dashboard/GoodFirstIssuesTip.tsx +++ b/components/dashboard/GoodFirstIssuesTip.tsx @@ -1,5 +1,5 @@ import { useFloating } from '@floating-ui/react-dom-interactions'; -import { useState } from 'react'; +import React, { useState } from 'react'; /** * @description A tooltip that appears when the user hovers over the Good First Issues icon. diff --git a/components/dashboard/Header.tsx b/components/dashboard/Header.tsx index e80f1396670..03b3e2b6b74 100644 --- a/components/dashboard/Header.tsx +++ b/components/dashboard/Header.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import Button from '../buttons/Button'; import GithubButton from '../buttons/GithubButton'; import SlackButton from '../buttons/SlackButton'; diff --git a/components/dashboard/table/Filters.tsx b/components/dashboard/table/Filters.tsx index 54f659e62b6..e9d8a9066c4 100644 --- a/components/dashboard/table/Filters.tsx +++ b/components/dashboard/table/Filters.tsx @@ -1,6 +1,6 @@ import { useFloating } from '@floating-ui/react-dom-interactions'; import type { RefObject } from 'react'; -import { useEffect, useRef, useState } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import type { Issue } from '@/types/components/dashboard/TableTypes'; diff --git a/components/dashboard/table/Row.tsx b/components/dashboard/table/Row.tsx index 03cd73300e3..f5794faa8c4 100644 --- a/components/dashboard/table/Row.tsx +++ b/components/dashboard/table/Row.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { Issue } from '@/types/components/dashboard/TableTypes'; interface RowProps { diff --git a/components/dashboard/table/Table.tsx b/components/dashboard/table/Table.tsx index 6cc76f1c3da..f5153fabc97 100644 --- a/components/dashboard/table/Table.tsx +++ b/components/dashboard/table/Table.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { Issue } from '@/types/components/dashboard/TableTypes'; import Row from './Row'; diff --git a/components/docs/Card.tsx b/components/docs/Card.tsx index 0743b88fc23..64f6dbc07e2 100644 --- a/components/docs/Card.tsx +++ b/components/docs/Card.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/editor/CodeBlock.tsx b/components/editor/CodeBlock.tsx index 9a86203cf1a..e5bd4675e3a 100644 --- a/components/editor/CodeBlock.tsx +++ b/components/editor/CodeBlock.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import Highlight from 'react-syntax-highlighter'; import Caption from '../Caption'; diff --git a/components/faq/FAQ.tsx b/components/faq/FAQ.tsx index 2bf8cf6a336..54a7ac4260c 100644 --- a/components/faq/FAQ.tsx +++ b/components/faq/FAQ.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import Accordion from '@/components/Accordion/Accordion'; import { faqList } from './FAQList'; diff --git a/components/icons/Ambassador.tsx b/components/icons/Ambassador.tsx index 4dd7e232c57..196986141f2 100644 --- a/components/icons/Ambassador.tsx +++ b/components/icons/Ambassador.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/ArrowDown.tsx b/components/icons/ArrowDown.tsx index 1bb35b97fd0..c48a671637c 100644 --- a/components/icons/ArrowDown.tsx +++ b/components/icons/ArrowDown.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/ArrowLeft.tsx b/components/icons/ArrowLeft.tsx index 9851fceee04..fec611bd2ff 100644 --- a/components/icons/ArrowLeft.tsx +++ b/components/icons/ArrowLeft.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/ArrowRight.tsx b/components/icons/ArrowRight.tsx index 0175fcc7a10..8ce9303a966 100644 --- a/components/icons/ArrowRight.tsx +++ b/components/icons/ArrowRight.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/ArrowUp.tsx b/components/icons/ArrowUp.tsx index c8dd84e5716..cc60708c2be 100644 --- a/components/icons/ArrowUp.tsx +++ b/components/icons/ArrowUp.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/AsyncAPI.tsx b/components/icons/AsyncAPI.tsx index 56bd10e7c4c..46d19c7a2c5 100644 --- a/components/icons/AsyncAPI.tsx +++ b/components/icons/AsyncAPI.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/AsyncAPIColorIcon.tsx b/components/icons/AsyncAPIColorIcon.tsx index a368ae8c3c8..4ee5629c44c 100644 --- a/components/icons/AsyncAPIColorIcon.tsx +++ b/components/icons/AsyncAPIColorIcon.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface AsyncAPIColorLogoProps { // eslint-disable-next-line prettier/prettier diff --git a/components/icons/Calendar.tsx b/components/icons/Calendar.tsx index 9e63ec7bd88..e1d70f0d9be 100644 --- a/components/icons/Calendar.tsx +++ b/components/icons/Calendar.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/CenterMenu.tsx b/components/icons/CenterMenu.tsx index e8e095e22eb..22e410ac182 100644 --- a/components/icons/CenterMenu.tsx +++ b/components/icons/CenterMenu.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /** * @description Icons for asyncapi website */ diff --git a/components/icons/CircularLoader.tsx b/components/icons/CircularLoader.tsx index 7cca8dfd8fe..0a994f0f546 100644 --- a/components/icons/CircularLoader.tsx +++ b/components/icons/CircularLoader.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface CircularLoaderProps { // eslint-disable-next-line prettier/prettier diff --git a/components/icons/Clipboard.tsx b/components/icons/Clipboard.tsx index 3379a3c87f8..c0add09acf3 100644 --- a/components/icons/Clipboard.tsx +++ b/components/icons/Clipboard.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Code.tsx b/components/icons/Code.tsx index d493af6a571..676be45c99f 100644 --- a/components/icons/Code.tsx +++ b/components/icons/Code.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Community.tsx b/components/icons/Community.tsx index 991dd055f5d..84d2519abf3 100644 --- a/components/icons/Community.tsx +++ b/components/icons/Community.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Conference.tsx b/components/icons/Conference.tsx index 4de43e9ef99..473dc084521 100644 --- a/components/icons/Conference.tsx +++ b/components/icons/Conference.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Contributing.tsx b/components/icons/Contributing.tsx index 1c2365b0e82..090a7da3fa9 100644 --- a/components/icons/Contributing.tsx +++ b/components/icons/Contributing.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Cross.tsx b/components/icons/Cross.tsx index 1597fbf30e0..442f11752a3 100644 --- a/components/icons/Cross.tsx +++ b/components/icons/Cross.tsx @@ -1,5 +1,5 @@ +import React from 'react'; /* eslint-disable max-len */ - import { twMerge } from 'tailwind-merge'; /** diff --git a/components/icons/Dashboard.tsx b/components/icons/Dashboard.tsx index b50ef6a09bd..fc2723b2caf 100644 --- a/components/icons/Dashboard.tsx +++ b/components/icons/Dashboard.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/DocsArrow.tsx b/components/icons/DocsArrow.tsx index db52744dbf2..060b3cd1a8e 100644 --- a/components/icons/DocsArrow.tsx +++ b/components/icons/DocsArrow.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Documents.tsx b/components/icons/Documents.tsx index 7e2a51d2fdd..21df6e8112e 100644 --- a/components/icons/Documents.tsx +++ b/components/icons/Documents.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Exclamation.tsx b/components/icons/Exclamation.tsx index b62b57d2b20..3e4470f82f1 100644 --- a/components/icons/Exclamation.tsx +++ b/components/icons/Exclamation.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Explorer.tsx b/components/icons/Explorer.tsx index e63affca85c..acb488eb894 100644 --- a/components/icons/Explorer.tsx +++ b/components/icons/Explorer.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /** * @description Icons for asyncapi website */ diff --git a/components/icons/Filter.tsx b/components/icons/Filter.tsx index 2baca427bfc..18279d9af2d 100644 --- a/components/icons/Filter.tsx +++ b/components/icons/Filter.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Generator.tsx b/components/icons/Generator.tsx index b63d9b529eb..81ac64042f0 100644 --- a/components/icons/Generator.tsx +++ b/components/icons/Generator.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/GettingStarted.tsx b/components/icons/GettingStarted.tsx index 24abb2e67b3..86cced07732 100644 --- a/components/icons/GettingStarted.tsx +++ b/components/icons/GettingStarted.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Github.tsx b/components/icons/Github.tsx index fa988b4a5d9..9a3caa35e0b 100644 --- a/components/icons/Github.tsx +++ b/components/icons/Github.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/GithubActions.tsx b/components/icons/GithubActions.tsx index ce5dfe31f3f..393ef7417f0 100644 --- a/components/icons/GithubActions.tsx +++ b/components/icons/GithubActions.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/GithubOrganization.tsx b/components/icons/GithubOrganization.tsx index 44926c357d8..ab16310c397 100644 --- a/components/icons/GithubOrganization.tsx +++ b/components/icons/GithubOrganization.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/GoogleCalendar.tsx b/components/icons/GoogleCalendar.tsx index 9caee67a7cd..cf85306c9c9 100644 --- a/components/icons/GoogleCalendar.tsx +++ b/components/icons/GoogleCalendar.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/GradCap.tsx b/components/icons/GradCap.tsx index a4e9e33fa2c..e568b511aec 100644 --- a/components/icons/GradCap.tsx +++ b/components/icons/GradCap.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Guide.tsx b/components/icons/Guide.tsx index 5487b1436e9..5c72487fa8c 100644 --- a/components/icons/Guide.tsx +++ b/components/icons/Guide.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Home.tsx b/components/icons/Home.tsx index 4cdc965a80b..63df2794e49 100644 --- a/components/icons/Home.tsx +++ b/components/icons/Home.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Hub.tsx b/components/icons/Hub.tsx index dc8711a293a..3bdf6f296ea 100644 --- a/components/icons/Hub.tsx +++ b/components/icons/Hub.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/InfoIcon.tsx b/components/icons/InfoIcon.tsx index 9dc8268ca46..e45408f090d 100644 --- a/components/icons/InfoIcon.tsx +++ b/components/icons/InfoIcon.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/LightBulb.tsx b/components/icons/LightBulb.tsx index b2df353d48d..884e8b618d4 100644 --- a/components/icons/LightBulb.tsx +++ b/components/icons/LightBulb.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/LinkedIn.tsx b/components/icons/LinkedIn.tsx index f01c9b6622b..795f097bf9c 100644 --- a/components/icons/LinkedIn.tsx +++ b/components/icons/LinkedIn.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Loupe.tsx b/components/icons/Loupe.tsx index 924e9e3ade6..c1c8219866e 100644 --- a/components/icons/Loupe.tsx +++ b/components/icons/Loupe.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Meetings.tsx b/components/icons/Meetings.tsx index 2973b2476cc..d737ec863dd 100644 --- a/components/icons/Meetings.tsx +++ b/components/icons/Meetings.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Migration.tsx b/components/icons/Migration.tsx index 110edda11e7..6d7d1358f37 100644 --- a/components/icons/Migration.tsx +++ b/components/icons/Migration.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Modelina.tsx b/components/icons/Modelina.tsx index 15e0ae8f0a4..73ff108c8ee 100644 --- a/components/icons/Modelina.tsx +++ b/components/icons/Modelina.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/NavItemDropdown.tsx b/components/icons/NavItemDropdown.tsx index bb0a7ba63bd..4a1bcfb98cd 100644 --- a/components/icons/NavItemDropdown.tsx +++ b/components/icons/NavItemDropdown.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Newsroom.tsx b/components/icons/Newsroom.tsx index f83e0b0ce55..e744b9d6808 100644 --- a/components/icons/Newsroom.tsx +++ b/components/icons/Newsroom.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Paper.tsx b/components/icons/Paper.tsx index 5f85397686a..df34302e7ff 100644 --- a/components/icons/Paper.tsx +++ b/components/icons/Paper.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Parser.tsx b/components/icons/Parser.tsx index 4a1e6712330..452c049623c 100644 --- a/components/icons/Parser.tsx +++ b/components/icons/Parser.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Plant.tsx b/components/icons/Plant.tsx index 94ba92b1aa3..403ede7dd66 100644 --- a/components/icons/Plant.tsx +++ b/components/icons/Plant.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Plugins.tsx b/components/icons/Plugins.tsx index f5942a0ff31..d661d900d58 100644 --- a/components/icons/Plugins.tsx +++ b/components/icons/Plugins.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/PowerPlug.tsx b/components/icons/PowerPlug.tsx index 98ddc84e75a..c220ad92de7 100644 --- a/components/icons/PowerPlug.tsx +++ b/components/icons/PowerPlug.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/QuestionMark.tsx b/components/icons/QuestionMark.tsx index 547b3957edd..c771e22d95d 100644 --- a/components/icons/QuestionMark.tsx +++ b/components/icons/QuestionMark.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Quote.tsx b/components/icons/Quote.tsx index 6410cd56b8c..b47c1079c3f 100644 --- a/components/icons/Quote.tsx +++ b/components/icons/Quote.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/React.tsx b/components/icons/React.tsx index 3f952bbea6c..ed6895afee6 100644 --- a/components/icons/React.tsx +++ b/components/icons/React.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Rocket.tsx b/components/icons/Rocket.tsx index d3bdb651605..8ab3bb80c53 100644 --- a/components/icons/Rocket.tsx +++ b/components/icons/Rocket.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Search.tsx b/components/icons/Search.tsx index 16595bb63ea..4ddc06b6871 100644 --- a/components/icons/Search.tsx +++ b/components/icons/Search.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/SearchIcon.tsx b/components/icons/SearchIcon.tsx index 7f2ab5c4b47..2d45ef09de2 100644 --- a/components/icons/SearchIcon.tsx +++ b/components/icons/SearchIcon.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /** * @description Icon for search button * @param {string} props.className - The class name for styling the icon. diff --git a/components/icons/Slack.tsx b/components/icons/Slack.tsx index 8de6d0d2a23..26bf8eff0ba 100644 --- a/components/icons/Slack.tsx +++ b/components/icons/Slack.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Spec.tsx b/components/icons/Spec.tsx index 103992fe056..506016b490f 100644 --- a/components/icons/Spec.tsx +++ b/components/icons/Spec.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Subscribe.tsx b/components/icons/Subscribe.tsx index 4da24682381..bfb7eb67fd1 100644 --- a/components/icons/Subscribe.tsx +++ b/components/icons/Subscribe.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/TSC.tsx b/components/icons/TSC.tsx index 0012fb6fa51..ade1c0fdacb 100644 --- a/components/icons/TSC.tsx +++ b/components/icons/TSC.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Tools.tsx b/components/icons/Tools.tsx index 2b9f918a478..969ff19a056 100644 --- a/components/icons/Tools.tsx +++ b/components/icons/Tools.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Tutorials.tsx b/components/icons/Tutorials.tsx index 6a402cddcad..86a6895c406 100644 --- a/components/icons/Tutorials.tsx +++ b/components/icons/Tutorials.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Twitch.tsx b/components/icons/Twitch.tsx index 64527fb026e..557c7f67131 100644 --- a/components/icons/Twitch.tsx +++ b/components/icons/Twitch.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Twitter.tsx b/components/icons/Twitter.tsx index 92a02e30181..4ab31db7073 100644 --- a/components/icons/Twitter.tsx +++ b/components/icons/Twitter.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/UseCases.tsx b/components/icons/UseCases.tsx index b443e5ad00d..d8f094ccd2b 100644 --- a/components/icons/UseCases.tsx +++ b/components/icons/UseCases.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Users.tsx b/components/icons/Users.tsx index 9f3a34b72b5..bedc0213e1a 100644 --- a/components/icons/Users.tsx +++ b/components/icons/Users.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/Webinar.tsx b/components/icons/Webinar.tsx index 3365d400663..3be0940885a 100644 --- a/components/icons/Webinar.tsx +++ b/components/icons/Webinar.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/YouTube.tsx b/components/icons/YouTube.tsx index 77b70840f94..c3df3775ef0 100644 --- a/components/icons/YouTube.tsx +++ b/components/icons/YouTube.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/icons/YouTubeGray.tsx b/components/icons/YouTubeGray.tsx index 38cd655397b..4e0552130fb 100644 --- a/components/icons/YouTubeGray.tsx +++ b/components/icons/YouTubeGray.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /* eslint-disable max-len */ /** * @description Icons for asyncapi website diff --git a/components/languageSelector/LanguageSelect.tsx b/components/languageSelector/LanguageSelect.tsx index 4641a7909d5..d2d4f075051 100644 --- a/components/languageSelector/LanguageSelect.tsx +++ b/components/languageSelector/LanguageSelect.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { SelectProps } from '../form/Select'; diff --git a/components/layout/BlogLayout.tsx b/components/layout/BlogLayout.tsx index 1dd353b0f22..a1570bf25c6 100644 --- a/components/layout/BlogLayout.tsx +++ b/components/layout/BlogLayout.tsx @@ -2,6 +2,7 @@ import moment from 'moment'; import ErrorPage from 'next/error'; import HtmlHead from 'next/head'; import { useRouter } from 'next/router'; +import React from 'react'; import type { IPosts } from '@/types/post'; diff --git a/components/layout/Column.tsx b/components/layout/Column.tsx index 051848c8d56..59b865d8fb7 100644 --- a/components/layout/Column.tsx +++ b/components/layout/Column.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface IColumnProps { children: React.ReactNode; } diff --git a/components/layout/DocsLayout.tsx b/components/layout/DocsLayout.tsx index 2fab40d83f0..b395c9445ed 100644 --- a/components/layout/DocsLayout.tsx +++ b/components/layout/DocsLayout.tsx @@ -1,7 +1,7 @@ import ErrorPage from 'next/error'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { useState } from 'react'; +import React, { useState } from 'react'; import type { NavigationItems } from '@/types/context/DocsContext'; import type { IPost } from '@/types/post'; diff --git a/components/layout/GenericLayout.tsx b/components/layout/GenericLayout.tsx index 309f3c38410..2521f186d8c 100644 --- a/components/layout/GenericLayout.tsx +++ b/components/layout/GenericLayout.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + // import AnnouncementHero from '../campaigns/AnnoucementHero'; import Head from '../Head'; import Container from './Container'; diff --git a/components/layout/GenericPostLayout.tsx b/components/layout/GenericPostLayout.tsx index 4bf82198c28..b814214f5fd 100644 --- a/components/layout/GenericPostLayout.tsx +++ b/components/layout/GenericPostLayout.tsx @@ -1,5 +1,6 @@ import ErrorPage from 'next/error'; import { useRouter } from 'next/router'; +import React from 'react'; import type { IPosts } from '@/types/post'; diff --git a/components/layout/GenericWideLayout.tsx b/components/layout/GenericWideLayout.tsx index 32938fb61c3..48d2b7ec415 100644 --- a/components/layout/GenericWideLayout.tsx +++ b/components/layout/GenericWideLayout.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + // import AnnouncementHero from '../campaigns/AnnoucementHero'; import Head from '../Head'; import Row from './Row'; diff --git a/components/layout/Layout.tsx b/components/layout/Layout.tsx index efbf01814dc..4db249bbb33 100644 --- a/components/layout/Layout.tsx +++ b/components/layout/Layout.tsx @@ -1,4 +1,5 @@ import { useRouter } from 'next/router'; +import React from 'react'; import type { NavigationItems } from '@/types/context/DocsContext'; import type { IPost, IPosts } from '@/types/post'; diff --git a/components/layout/Row.tsx b/components/layout/Row.tsx index ca405b7978d..679bf3be394 100644 --- a/components/layout/Row.tsx +++ b/components/layout/Row.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface IRowProps { children: React.ReactNode; } diff --git a/components/link.tsx b/components/link.tsx index 40415ceccdd..86efcef06b0 100644 --- a/components/link.tsx +++ b/components/link.tsx @@ -1,5 +1,6 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; +import React from 'react'; import { defaultLanguage, i18nPaths, languages } from '@/utils/i18n'; diff --git a/components/logos/Adidas.tsx b/components/logos/Adidas.tsx index f9e8fd285a9..395c7212e61 100644 --- a/components/logos/Adidas.tsx +++ b/components/logos/Adidas.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /** * @description Logo for Adidas * @param {string} className - used to style the svg diff --git a/components/logos/AsyncAPILogo.tsx b/components/logos/AsyncAPILogo.tsx index 6b6a66de3fd..5c8b91670eb 100644 --- a/components/logos/AsyncAPILogo.tsx +++ b/components/logos/AsyncAPILogo.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; interface IAsyncAPILogoProps { diff --git a/components/logos/Axway.tsx b/components/logos/Axway.tsx index e00a52581af..629614217f8 100644 --- a/components/logos/Axway.tsx +++ b/components/logos/Axway.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /** * @description Logo for Axway * @param {string} className - used to style the svg diff --git a/components/logos/SAP.tsx b/components/logos/SAP.tsx index a521616ca2f..2d896481c11 100644 --- a/components/logos/SAP.tsx +++ b/components/logos/SAP.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; /** * @description Logo for SAP diff --git a/components/logos/Salesforce.tsx b/components/logos/Salesforce.tsx index f0441b5af79..3b77b53b817 100644 --- a/components/logos/Salesforce.tsx +++ b/components/logos/Salesforce.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /** * @description Logo for Salesforce * @param {string} className - used to style the svg diff --git a/components/logos/Slack.tsx b/components/logos/Slack.tsx index a695a4ea78d..8b68c81fa42 100644 --- a/components/logos/Slack.tsx +++ b/components/logos/Slack.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + /** * @description Logo for Slack * @param {string} className - used to style the svg diff --git a/components/navigation/BlogPostCard.stories.tsx b/components/navigation/BlogPostCard.stories.tsx index 47d57094fa1..5b12a331345 100644 --- a/components/navigation/BlogPostCard.stories.tsx +++ b/components/navigation/BlogPostCard.stories.tsx @@ -1,4 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import BlogPostItem from './BlogPostItem'; diff --git a/components/navigation/CommunityPanel.tsx b/components/navigation/CommunityPanel.tsx index 82306db1284..2a6f0fd451b 100644 --- a/components/navigation/CommunityPanel.tsx +++ b/components/navigation/CommunityPanel.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import communityItems from './communityItems'; import FlyoutMenu from './FlyoutMenu'; diff --git a/components/navigation/DocsNav.tsx b/components/navigation/DocsNav.tsx index d0ee433b573..83bf94294f2 100644 --- a/components/navigation/DocsNav.tsx +++ b/components/navigation/DocsNav.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { buckets } from '../data/buckets'; import DocsArrow from '../icons/DocsArrow'; diff --git a/components/navigation/DocsNavItem.tsx b/components/navigation/DocsNavItem.tsx index 43d4af17a6f..eadc6f46418 100644 --- a/components/navigation/DocsNavItem.tsx +++ b/components/navigation/DocsNavItem.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; export interface DocsNavItemProps { title: string; diff --git a/components/navigation/DocsNavWrapper.tsx b/components/navigation/DocsNavWrapper.tsx index b7ad00dbcd8..c51f0cb2033 100644 --- a/components/navigation/DocsNavWrapper.tsx +++ b/components/navigation/DocsNavWrapper.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { IDocsTree, IPost } from '@/types/post'; import { DOCS_INDEX_NAME, SearchButton } from '../AlgoliaSearch'; diff --git a/components/navigation/Filter.tsx b/components/navigation/Filter.tsx index d7f07c2e322..7b69f470293 100644 --- a/components/navigation/Filter.tsx +++ b/components/navigation/Filter.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import Select from '../form/Select'; import { applyFilterList, onFilterApply } from '../helpers/applyFilter'; diff --git a/components/navigation/FlyoutMenu.tsx b/components/navigation/FlyoutMenu.tsx index b6faf8269fe..fc5ab7d41a4 100644 --- a/components/navigation/FlyoutMenu.tsx +++ b/components/navigation/FlyoutMenu.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { MenuItem } from './MenuBlocks'; import MenuBlocks from './MenuBlocks'; diff --git a/components/navigation/Label.tsx b/components/navigation/Label.tsx index 53315b0ea45..25b8d5e7ef6 100644 --- a/components/navigation/Label.tsx +++ b/components/navigation/Label.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + enum LabelColor { Gray = 'gray', Green = 'green' diff --git a/components/navigation/LearningPanel.tsx b/components/navigation/LearningPanel.tsx index 090cc7a1690..a2882b094ea 100644 --- a/components/navigation/LearningPanel.tsx +++ b/components/navigation/LearningPanel.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { buckets } from '../data/buckets'; import FlyoutMenu from './FlyoutMenu'; diff --git a/components/navigation/MenuBlocks.tsx b/components/navigation/MenuBlocks.tsx index 1f239ba8b17..81548f97ec0 100644 --- a/components/navigation/MenuBlocks.tsx +++ b/components/navigation/MenuBlocks.tsx @@ -1,4 +1,5 @@ import { useRouter } from 'next/router'; +import React from 'react'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/navigation/MobileNavMenu.tsx b/components/navigation/MobileNavMenu.tsx index 1c6f57e130f..8b0ccd74037 100644 --- a/components/navigation/MobileNavMenu.tsx +++ b/components/navigation/MobileNavMenu.tsx @@ -1,5 +1,5 @@ import Link from 'next/link'; -import { useState } from 'react'; +import React, { useState } from 'react'; import { SearchButton } from '../AlgoliaSearch'; import NavItemDropdown from '../icons/NavItemDropdown'; diff --git a/components/navigation/NavBar.tsx b/components/navigation/NavBar.tsx index e76330c41cf..d0fd2ca6fa0 100644 --- a/components/navigation/NavBar.tsx +++ b/components/navigation/NavBar.tsx @@ -2,7 +2,7 @@ import Link from 'next/link'; import type { NextRouter } from 'next/router'; import { useRouter } from 'next/router'; import { useTranslation } from 'next-i18next'; -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { defaultLanguage, i18nPaths, languages } from '@/utils/i18n'; diff --git a/components/navigation/SubCategoryDocsNav.tsx b/components/navigation/SubCategoryDocsNav.tsx index 63f3a60337a..2b72003a582 100644 --- a/components/navigation/SubCategoryDocsNav.tsx +++ b/components/navigation/SubCategoryDocsNav.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import DocsArrow from '../icons/DocsArrow'; import DocsNavItem from './DocsNavItem'; diff --git a/components/navigation/ToolsPanel.tsx b/components/navigation/ToolsPanel.tsx index 6571bd6d370..a90c248b280 100644 --- a/components/navigation/ToolsPanel.tsx +++ b/components/navigation/ToolsPanel.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import FlyoutMenu from './FlyoutMenu'; import toolingItems from './toolingItems'; diff --git a/components/navigation/TutorialList.tsx b/components/navigation/TutorialList.tsx index a7cd0b8a790..f2cfea0d5a2 100644 --- a/components/navigation/TutorialList.tsx +++ b/components/navigation/TutorialList.tsx @@ -1,5 +1,5 @@ import Link from 'next/link'; -import { useContext } from 'react'; +import React, { useContext } from 'react'; import type { DocsContextType } from '@/types/context/DocsContext'; import type { IDoc } from '@/types/post'; diff --git a/components/navigation/communityItems.tsx b/components/navigation/communityItems.tsx index e5df44e2280..aa25ac89a1b 100644 --- a/components/navigation/communityItems.tsx +++ b/components/navigation/communityItems.tsx @@ -1,3 +1,5 @@ +import type React from 'react'; + import IconAmbassador from '../icons/Ambassador'; import IconContributing from '../icons/Contributing'; import IconDashboard from '../icons/Dashboard'; diff --git a/components/navigation/learningItems.tsx b/components/navigation/learningItems.tsx index 40e9b0d670e..d8f538bb865 100644 --- a/components/navigation/learningItems.tsx +++ b/components/navigation/learningItems.tsx @@ -1,3 +1,5 @@ +import type React from 'react'; + import IconGradCap from '../icons/GradCap'; import IconGuide from '../icons/Guide'; import IconMigration from '../icons/Migration'; diff --git a/components/navigation/toolingItems.tsx b/components/navigation/toolingItems.tsx index 8c18db3bec0..e637a62d007 100644 --- a/components/navigation/toolingItems.tsx +++ b/components/navigation/toolingItems.tsx @@ -1,4 +1,5 @@ import { TerminalIcon } from '@heroicons/react/outline'; +import type React from 'react'; import IconGenerator from '../icons/Generator'; import IconGithubActions from '../icons/GithubActions'; diff --git a/components/newsroom/FeaturedBlogPost.tsx b/components/newsroom/FeaturedBlogPost.tsx index 515d0d0a2f6..fd459f2977a 100644 --- a/components/newsroom/FeaturedBlogPost.tsx +++ b/components/newsroom/FeaturedBlogPost.tsx @@ -1,5 +1,6 @@ import moment from 'moment'; import Link from 'next/link'; +import React from 'react'; import TextTruncate from 'react-text-truncate'; import { BlogPostType } from '@/types/components/navigation/BlogPostType'; diff --git a/components/newsroom/Newsroom.tsx b/components/newsroom/Newsroom.tsx index 649263afaeb..87b8bdff180 100644 --- a/components/newsroom/Newsroom.tsx +++ b/components/newsroom/Newsroom.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { TwitterTimelineEmbed } from 'react-twitter-embed'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; diff --git a/components/newsroom/NewsroomBlogPosts.tsx b/components/newsroom/NewsroomBlogPosts.tsx index c5036b12699..7e79c1fb534 100644 --- a/components/newsroom/NewsroomBlogPosts.tsx +++ b/components/newsroom/NewsroomBlogPosts.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { A11y, Navigation } from 'swiper/modules'; import { Swiper, SwiperSlide } from 'swiper/react'; diff --git a/components/newsroom/NewsroomSection.tsx b/components/newsroom/NewsroomSection.tsx index c3a3e7df1cd..7e660e69dfe 100644 --- a/components/newsroom/NewsroomSection.tsx +++ b/components/newsroom/NewsroomSection.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/newsroom/NewsroomYoutube.tsx b/components/newsroom/NewsroomYoutube.tsx index 91015b93788..ced5fceedbe 100644 --- a/components/newsroom/NewsroomYoutube.tsx +++ b/components/newsroom/NewsroomYoutube.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { A11y, Navigation } from 'swiper/modules'; import { Swiper, SwiperSlide } from 'swiper/react'; diff --git a/components/newsroom/swiper.tsx b/components/newsroom/swiper.tsx index 1118cc36e8f..4f040cbeca6 100644 --- a/components/newsroom/swiper.tsx +++ b/components/newsroom/swiper.tsx @@ -1,3 +1,4 @@ +import type React from 'react'; import { useEffect, useRef, useState } from 'react'; /** diff --git a/components/roadmap/RoadmapItem.tsx b/components/roadmap/RoadmapItem.tsx index e82504eae65..34787b7252e 100644 --- a/components/roadmap/RoadmapItem.tsx +++ b/components/roadmap/RoadmapItem.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; // Since a roadmap item can contain nested roadmap lists, we need to import RoadmapList to display them. /* eslint-disable import/no-cycle*/ diff --git a/components/roadmap/RoadmapList.tsx b/components/roadmap/RoadmapList.tsx index b9ad1729662..57d500978bf 100644 --- a/components/roadmap/RoadmapList.tsx +++ b/components/roadmap/RoadmapList.tsx @@ -1,5 +1,7 @@ // Since a RoadmapList may contain other RoadmapItems, we need to import RoadmapItem to display them. /* eslint-disable import/no-cycle*/ +import React from 'react'; + import RoadmapItem from './RoadmapItem'; interface IRoadmapListProps { diff --git a/components/roadmap/RoadmapPill.tsx b/components/roadmap/RoadmapPill.tsx index e89b9dba463..d73ac46e84b 100644 --- a/components/roadmap/RoadmapPill.tsx +++ b/components/roadmap/RoadmapPill.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import IconArrowRight from '../icons/ArrowRight'; import Modal from '../Modal'; diff --git a/components/slack/index.tsx b/components/slack/index.tsx index 70bdef3e739..5d3b4a17fd6 100644 --- a/components/slack/index.tsx +++ b/components/slack/index.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import SlackMessage from './Message'; interface SlackProps { diff --git a/components/sponsors/GoldSponsors.tsx b/components/sponsors/GoldSponsors.tsx index 277f4332ad3..3729ffcc7e0 100644 --- a/components/sponsors/GoldSponsors.tsx +++ b/components/sponsors/GoldSponsors.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { goldSponsors } from './GoldSponsorsList'; interface GoldSponsorsProps { diff --git a/components/sponsors/SilverSponsors.tsx b/components/sponsors/SilverSponsors.tsx index 62c8868980a..4a737aef7df 100644 --- a/components/sponsors/SilverSponsors.tsx +++ b/components/sponsors/SilverSponsors.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { Silversponsors } from './SilverSponsorsList'; interface SilverSponsorsProps { diff --git a/components/sponsors/Sponsors.tsx b/components/sponsors/Sponsors.tsx index af0fed3882e..fd5aff75117 100644 --- a/components/sponsors/Sponsors.tsx +++ b/components/sponsors/Sponsors.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { sponsors } from './SponsorsList'; interface SponsorsProps { diff --git a/components/tools/CategoryDropdown.tsx b/components/tools/CategoryDropdown.tsx index f865a226021..02d091008a0 100644 --- a/components/tools/CategoryDropdown.tsx +++ b/components/tools/CategoryDropdown.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ToolsListData } from '@/types/components/tools/ToolDataType'; import ToolsDataList from '../../config/tools.json'; diff --git a/components/tools/Checkbox.stories.tsx b/components/tools/Checkbox.stories.tsx index d9691aff181..7445b41b412 100644 --- a/components/tools/Checkbox.stories.tsx +++ b/components/tools/Checkbox.stories.tsx @@ -1,5 +1,6 @@ import { useArgs } from '@storybook/preview-api'; import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import type { CheckboxProps } from '@/types/components/tools/CheckboxPropsType'; diff --git a/components/tools/Checkbox.tsx b/components/tools/Checkbox.tsx index 439bb040be0..25b4bceb2c2 100644 --- a/components/tools/Checkbox.tsx +++ b/components/tools/Checkbox.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { CheckboxProps } from '@/types/components/tools/CheckboxPropsType'; diff --git a/components/tools/Filters.tsx b/components/tools/Filters.tsx index 0ca822b7eea..4938828086c 100644 --- a/components/tools/Filters.tsx +++ b/components/tools/Filters.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { useContext, useEffect, useState } from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import { twMerge } from 'tailwind-merge'; import type { Language, Technology, VisibleDataListType } from '@/types/components/tools/ToolDataType'; diff --git a/components/tools/FiltersDisplay.tsx b/components/tools/FiltersDisplay.tsx index 945481cae24..63c34db8dc1 100644 --- a/components/tools/FiltersDisplay.tsx +++ b/components/tools/FiltersDisplay.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; interface FiltersDisplayProps { diff --git a/components/tools/FiltersDropdown.tsx b/components/tools/FiltersDropdown.tsx index beb68e81eb5..6c473541e87 100644 --- a/components/tools/FiltersDropdown.tsx +++ b/components/tools/FiltersDropdown.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { Category, Language, Technology } from '@/types/components/tools/ToolDataType'; diff --git a/components/tools/Tags.tsx b/components/tools/Tags.tsx index 7609b223741..0fd1c2453b2 100644 --- a/components/tools/Tags.tsx +++ b/components/tools/Tags.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface SelectTagsProps { // eslint-disable-next-line prettier/prettier diff --git a/components/tools/Toggle.stories.tsx b/components/tools/Toggle.stories.tsx index 2fcaf81c26d..5e72492197e 100644 --- a/components/tools/Toggle.stories.tsx +++ b/components/tools/Toggle.stories.tsx @@ -1,5 +1,6 @@ import { useArgs } from '@storybook/preview-api'; import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import type { ToggleProps } from '@/types/components/tools/TogglePropsType'; diff --git a/components/tools/Toggle.tsx b/components/tools/Toggle.tsx index bfa324b8538..ee7066e7b90 100644 --- a/components/tools/Toggle.tsx +++ b/components/tools/Toggle.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { ToggleProps } from '@/types/components/tools/TogglePropsType'; diff --git a/components/tools/ToolsDashboard.tsx b/components/tools/ToolsDashboard.tsx index 920aaee66eb..ff9a364c87d 100644 --- a/components/tools/ToolsDashboard.tsx +++ b/components/tools/ToolsDashboard.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { createRef, useContext, useEffect, useMemo, useRef, useState } from 'react'; +import React, { createRef, useContext, useEffect, useMemo, useRef, useState } from 'react'; import type { ToolsListData } from '@/types/components/tools/ToolDataType'; diff --git a/components/tools/ToolsList.tsx b/components/tools/ToolsList.tsx index b6e6eeeafe5..5ce95974d72 100644 --- a/components/tools/ToolsList.tsx +++ b/components/tools/ToolsList.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ToolsListData } from '@/types/components/tools/ToolDataType'; import { HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/typography/Paragraph.tsx b/components/typography/Paragraph.tsx index 261a83d96f4..17f8eadcce8 100644 --- a/components/typography/Paragraph.tsx +++ b/components/typography/Paragraph.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/typography/TextLink.tsx b/components/typography/TextLink.tsx index 4b789ba9e0d..c8f2bb4a628 100644 --- a/components/typography/TextLink.tsx +++ b/components/typography/TextLink.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; import { twMerge } from 'tailwind-merge'; export interface TextLinkProps { diff --git a/context/AppContext.tsx b/context/AppContext.tsx index 696c2ae6f2d..5d53b72dfe7 100644 --- a/context/AppContext.tsx +++ b/context/AppContext.tsx @@ -1,4 +1,5 @@ import { createContext } from 'react'; -import { AppContextType } from '@/types/context/AppContext'; -export default createContext({ path: "" }); +import type { AppContextType } from '@/types/context/AppContext'; + +export default createContext({ path: '' }); diff --git a/context/GenericPostContext.tsx b/context/GenericPostContext.tsx index 65b510b15a8..6d9b519d7bd 100644 --- a/context/GenericPostContext.tsx +++ b/context/GenericPostContext.tsx @@ -2,4 +2,4 @@ import { createContext } from 'react'; import type { IPosts } from '@/types/post'; -export default createContext<{ post: IPosts['blog'][number] | IPosts['docs'][number]} | undefined>(undefined); +export default createContext<{ post: IPosts['blog'][number] | IPosts['docs'][number] } | undefined>(undefined); diff --git a/context/ToolFilterContext.tsx b/context/ToolFilterContext.tsx index b3ea042f49d..0b2b582dcc7 100644 --- a/context/ToolFilterContext.tsx +++ b/context/ToolFilterContext.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { createContext, useEffect, useState } from 'react'; +import React, { createContext, useEffect, useState } from 'react'; interface ToolFilterContextProps { isPaid: string; diff --git a/pages/_document.tsx b/pages/_document.tsx index 80484623fe7..b220a1b4484 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -1,4 +1,5 @@ import Document, { Head, Html, Main, NextScript } from 'next/document'; +import React from 'react'; import i18nextConfig from '../next-i18next.config'; diff --git a/pages/casestudies/[id].tsx b/pages/casestudies/[id].tsx index d200869dc27..1a0a22d4e65 100644 --- a/pages/casestudies/[id].tsx +++ b/pages/casestudies/[id].tsx @@ -2,6 +2,7 @@ import Link from 'next/link'; import type { MDXRemoteSerializeResult } from 'next-mdx-remote'; import { MDXRemote } from 'next-mdx-remote'; import { serialize } from 'next-mdx-remote/serialize'; +import React from 'react'; import { readYamlFile } from '@/components/helpers/read-yaml-file'; import type { ICaseStudy } from '@/types/post'; diff --git a/pages/casestudies/index.tsx b/pages/casestudies/index.tsx index 7216a5bbd83..aa671f2d4de 100644 --- a/pages/casestudies/index.tsx +++ b/pages/casestudies/index.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ICaseStudies } from '@/types/post'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/pages/community/dashboard.tsx b/pages/community/dashboard.tsx index 8b91096b6ae..bfec4d96cc1 100644 --- a/pages/community/dashboard.tsx +++ b/pages/community/dashboard.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import GoodFirstIssues from '../../components/dashboard/GoodFirstIssues'; import Header from '../../components/dashboard/Header'; import Table from '../../components/dashboard/table/Table'; diff --git a/pages/community/newsroom.tsx b/pages/community/newsroom.tsx index a7e7c65e446..5538fceeed0 100644 --- a/pages/community/newsroom.tsx +++ b/pages/community/newsroom.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import Container from '../../components/layout/Container'; import GenericLayout from '../../components/layout/GenericLayout'; import NewsroomSection from '../../components/newsroom/Newsroom'; diff --git a/pages/community/tsc.tsx b/pages/community/tsc.tsx index 2ec652b609f..755652736f1 100644 --- a/pages/community/tsc.tsx +++ b/pages/community/tsc.tsx @@ -1,5 +1,5 @@ import { sortBy } from 'lodash'; -import { useState } from 'react'; +import React, { useState } from 'react'; import type { Tsc } from '@/types/pages/community/Community'; diff --git a/pages/tools/cli.tsx b/pages/tools/cli.tsx index c9f0cae5312..a6e49a0bfe4 100644 --- a/pages/tools/cli.tsx +++ b/pages/tools/cli.tsx @@ -1,4 +1,5 @@ import { BadgeCheckIcon, CodeIcon, DocumentAddIcon, GlobeIcon } from '@heroicons/react/outline'; +import React from 'react'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/pages/tools/generator.tsx b/pages/tools/generator.tsx index 813250bc8b0..8a6b70124e5 100644 --- a/pages/tools/generator.tsx +++ b/pages/tools/generator.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/pages/tools/github-actions.tsx b/pages/tools/github-actions.tsx index c6b7b582dd7..b74c70c0e14 100644 --- a/pages/tools/github-actions.tsx +++ b/pages/tools/github-actions.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import GithubButton from '../../components/buttons/GithubButton'; diff --git a/pages/tools/index.tsx b/pages/tools/index.tsx index 7ed98f27b12..9c35fc55fa8 100644 --- a/pages/tools/index.tsx +++ b/pages/tools/index.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import ToolsDashboard from '@/components/tools/ToolsDashboard'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; diff --git a/pages/tools/parsers.tsx b/pages/tools/parsers.tsx index d3d83558823..ff6704ee109 100644 --- a/pages/tools/parsers.tsx +++ b/pages/tools/parsers.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import GithubButton from '../../components/buttons/GithubButton'; From d744a0d37c2c03770a22ed24390a85bcbca00ff8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 20:24:11 +0200 Subject: [PATCH 02/32] chore(deps): bump cookie and express (#3289) --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 376d2095127..bea2b1cc43e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10621,9 +10621,9 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } @@ -13775,16 +13775,16 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", From 0c898cf19d3b9ed8246be1465e05f9e3577d8521 Mon Sep 17 00:00:00 2001 From: Akshat Nema <76521428+akshatnema@users.noreply.github.com> Date: Sat, 12 Oct 2024 15:59:50 +0530 Subject: [PATCH 03/32] fix: remove hydration errors (#3262) Co-authored-by: Ansh Goyal %0ACo-authored-by: asyncapi-bot --- components/AlgoliaSearch.tsx | 11 +++- components/Avatar.tsx | 12 +++- components/Loader.tsx | 4 +- components/dashboard/table/Row.tsx | 73 +++++++++++++----------- components/navigation/BlogPostItem.tsx | 41 +++++++------ components/newsroom/FeaturedBlogPost.tsx | 13 +---- components/tools/ToolsCard.tsx | 9 ++- next-env.d.ts | 2 +- pages/blog/index.tsx | 22 +++++-- pages/index.tsx | 2 + utils/getStatic.ts | 40 ++++++------- 11 files changed, 127 insertions(+), 102 deletions(-) diff --git a/components/AlgoliaSearch.tsx b/components/AlgoliaSearch.tsx index 43b3cc7ce6b..a7d3604fafb 100644 --- a/components/AlgoliaSearch.tsx +++ b/components/AlgoliaSearch.tsx @@ -5,7 +5,7 @@ import clsx from 'clsx'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react'; +import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react'; import { createPortal } from 'react-dom'; export const INDEX_NAME = 'asyncapi'; @@ -283,6 +283,7 @@ export default function AlgoliaSearch({ children }: { children: React.ReactNode */ export function SearchButton({ children, indexName = INDEX_NAME, ...props }: ISearchButtonProps) { const { onOpen, onInput } = useContext(SearchContext); + const [Children, setChildren] = useState(''); const searchButtonRef = useRef(null); const actionKey = getActionKey(); @@ -308,6 +309,12 @@ export function SearchButton({ children, indexName = INDEX_NAME, ...props }: ISe }; }, [onInput, searchButtonRef]); + useEffect(() => { + if (typeof children === 'function') { + setChildren(children({ actionKey })); + } + }, []); + return ( ); } diff --git a/components/Avatar.tsx b/components/Avatar.tsx index b8bb1e55715..d889cafb9d7 100644 --- a/components/Avatar.tsx +++ b/components/Avatar.tsx @@ -32,9 +32,17 @@ export default function Avatar({ name, photo, link, className }: AvatarProps) { ); return link ? ( - + ) : ( {avatar} ); diff --git a/components/Loader.tsx b/components/Loader.tsx index 94fd2941765..b0be9da3475 100644 --- a/components/Loader.tsx +++ b/components/Loader.tsx @@ -1,6 +1,8 @@ import React from 'react'; import { twMerge } from 'tailwind-merge'; +import AsyncAPIColorIcon from './icons/AsyncAPIColorIcon'; + interface LoaderProps { // eslint-disable-next-line prettier/prettier @@ -25,7 +27,7 @@ interface LoaderProps { */ export default function Loader({ loaderText = '', - loaderIcon = null, + loaderIcon = , className = '', dark = false, pulsating = false diff --git a/components/dashboard/table/Row.tsx b/components/dashboard/table/Row.tsx index f5794faa8c4..8b03be87263 100644 --- a/components/dashboard/table/Row.tsx +++ b/components/dashboard/table/Row.tsx @@ -16,47 +16,52 @@ export default function Row({ item }: RowProps) { return (
  • - -
    -
    - - +
    + - arrow icon + + {item.labels && item?.labels?.length > 0 && ( +
    + {item.labels.map((label) => ( + + {label.name} + + ))} +
    + )}
    - + + arrow icon + +
  • ); diff --git a/components/navigation/BlogPostItem.tsx b/components/navigation/BlogPostItem.tsx index 09559f00523..264fe0b6c66 100644 --- a/components/navigation/BlogPostItem.tsx +++ b/components/navigation/BlogPostItem.tsx @@ -1,7 +1,7 @@ import moment from 'moment'; import Link from 'next/link'; import type { Ref } from 'react'; -import { forwardRef } from 'react'; +import React, { forwardRef } from 'react'; import TextTruncate from 'react-text-truncate'; import { BlogPostType } from '@/types/components/navigation/BlogPostType'; @@ -77,16 +77,14 @@ export default forwardRef(function BlogPostItem( {post.type} - - - - {post.title} - - - - - - + + + {post.title} + + + + +
    @@ -94,30 +92,31 @@ export default forwardRef(function BlogPostItem(
    - + {post.authors .map((author, index) => author.link ? ( - { - e.stopPropagation(); + e.preventDefault(); + + // Handle the click event, e.g., navigate to author.link + window.open(author.link, '_blank'); }} - target='_blank' - rel='noreferrer' > {author.name} - + ) : ( author.name ) ) - .reduce((prev, curr) => ( - <> + .reduce((prev, curr, index) => ( + {prev} & {curr} - + ))} diff --git a/components/newsroom/FeaturedBlogPost.tsx b/components/newsroom/FeaturedBlogPost.tsx index fd459f2977a..49b4c8ef4ab 100644 --- a/components/newsroom/FeaturedBlogPost.tsx +++ b/components/newsroom/FeaturedBlogPost.tsx @@ -88,18 +88,9 @@ export default function FeaturedBlogPost({ post, className = '' }: FeaturedBlogP {post.authors .map((author, index) => author.link ? ( - { - e.stopPropagation(); - }} - target='_blank' - rel='noreferrer' - > + {author.name} - + ) : ( author.name ) diff --git a/components/tools/ToolsCard.tsx b/components/tools/ToolsCard.tsx index b3e73df9364..2a6d9ced02f 100644 --- a/components/tools/ToolsCard.tsx +++ b/components/tools/ToolsCard.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import type { ToolData, VisibleDataListType } from '@/types/components/tools/ToolDataType'; import { HeadingTypeStyle } from '@/types/typography/Heading'; @@ -92,9 +92,12 @@ export default function ToolsCard({ toolData }: ToolsCardProp) { }, 500) } > -
    + {toolData.description} -
    + diff --git a/next-env.d.ts b/next-env.d.ts index 4f11a03dc6c..a4a7b3f5cfa 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information. diff --git a/pages/blog/index.tsx b/pages/blog/index.tsx index 7829daf7435..37958cec430 100644 --- a/pages/blog/index.tsx +++ b/pages/blog/index.tsx @@ -1,8 +1,9 @@ import { useRouter } from 'next/router'; -import { useContext, useState } from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import Empty from '@/components/illustrations/Empty'; import GenericLayout from '@/components/layout/GenericLayout'; +import Loader from '@/components/Loader'; import BlogPostItem from '@/components/navigation/BlogPostItem'; import Filter from '@/components/navigation/Filter'; import Heading from '@/components/typography/Heading'; @@ -33,6 +34,7 @@ export default function BlogIndexPage() { }) : [] ); + const [isClient, setIsClient] = useState(false); const onFilter = (data: IBlogPost[]) => setPosts(data); const toFilter = [ @@ -57,6 +59,10 @@ export default function BlogIndexPage() { const description = 'Find the latest and greatest stories from our community'; const image = '/img/social/blog.webp'; + useEffect(() => { + setIsClient(true); + }, []); + return (
    @@ -108,16 +114,24 @@ export default function BlogIndexPage() { )}
    - {Object.keys(posts).length === 0 ? ( + {Object.keys(posts).length === 0 && (

    No post matches your filter

    - ) : ( + )} + {Object.keys(posts).length > 0 && isClient && (
      - {router.isReady && posts.map((post, index) => )} + {posts.map((post, index) => ( + + ))}
    )} + {Object.keys(posts).length > 0 && !isClient && ( +
    + +
    + )}
    diff --git a/pages/index.tsx b/pages/index.tsx index 906ed8c65cf..826a795c8ae 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import AsyncAPIColorIcon from '@/components/icons/AsyncAPIColorIcon'; import Loader from '@/components/Loader'; diff --git a/utils/getStatic.ts b/utils/getStatic.ts index 9b76ba9d4e5..56af2cf6b1c 100644 --- a/utils/getStatic.ts +++ b/utils/getStatic.ts @@ -2,26 +2,24 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import i18nextConfig from '../next-i18next.config'; -console.log(i18nextConfig.i18n.locales); - /** * Retrieves the internationalization paths for the supported locales. * @returns An array of paths for each supported locale. */ export const getI18nPaths = () => - i18nextConfig.i18n.locales.map((lng) => ({ - params: { - lang: lng - } - })); + i18nextConfig.i18n.locales.map((lng) => ({ + params: { + lang: lng + } + })); /** * Retrieves the static paths for Next.js. * @returns An object containing the fallback value and an array of paths. */ export const getStaticPaths = () => ({ - fallback: false, - paths: getI18nPaths() + fallback: false, + paths: getI18nPaths() }); /** @@ -30,15 +28,13 @@ export const getStaticPaths = () => ({ * @param ns - An array of namespaces to be loaded. * @returns An object containing the internationalization props. */ -export async function getI18nProps(ctx:any, ns = ['common']) { - const locale = ctx?.params?.lang; - - console.log(locale, 'here'); - const props = { - ...(await serverSideTranslations(locale, ns)) - }; +export async function getI18nProps(ctx: any, ns = ['common']) { + const locale = ctx?.params?.lang; + const props = { + ...(await serverSideTranslations(locale, ns)) + }; - return props; + return props; } /** @@ -47,11 +43,9 @@ export async function getI18nProps(ctx:any, ns = ['common']) { * @returns A function that retrieves the static props. */ export function makeStaticProps(ns = {}) { - return async function getStaticProps(ctx:any) { - console.log(ctx, 'ctx'); - - return { - props: await getI18nProps(ctx, ns as any) - }; + return async function getStaticProps(ctx: any) { + return { + props: await getI18nProps(ctx, ns as any) }; + }; } From a46f8708eea9c009af91c6ef10d90f2a9c2cf9ba Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 14:23:50 +0200 Subject: [PATCH 04/32] docs: add raj17ce as a contributor for code (#3288) Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 +++ 2 files changed, 12 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 64e7fe6bdf7..8f3a49ee524 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -555,6 +555,15 @@ "contributions": [ "doc" ] + }, + { + "login": "raj17ce", + "name": "Raj Patel", + "avatar_url": "https://avatars.githubusercontent.com/u/116947399?v=4", + "profile": "https://github.com/raj17ce", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 543ff41d935..2422bd1b2ae 100644 --- a/README.md +++ b/README.md @@ -395,6 +395,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Neutron
    Neutron

    💻 Sagar Kori
    Sagar Kori

    📖 + + Raj Patel
    Raj Patel

    💻 + From e4b2e805f85126d62e398cbb3e01004671c69025 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sun, 13 Oct 2024 12:10:08 +0200 Subject: [PATCH 05/32] docs(community): update latest maintainers list (#3291) --- config/MAINTAINERS.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/MAINTAINERS.json b/config/MAINTAINERS.json index 7ae06a8ebac..d5914331c17 100644 --- a/config/MAINTAINERS.json +++ b/config/MAINTAINERS.json @@ -258,7 +258,6 @@ "website", "spec-json-schemas", "generator", - "asyncapi-react", "extensions-catalog", "bindings", "enterprise-patterns", @@ -321,6 +320,7 @@ "availableForHire": false, "isTscMember": true, "repos": [ + "asyncapi-react", "conference-website", "chatbot" ], From 739f9a557c53ce24e47ab8998375f99e1d0c1a12 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 14 Oct 2024 02:38:45 +0200 Subject: [PATCH 06/32] chore: update tools.json (#3292) --- config/all-tags.json | 2 +- config/tools-automated.json | 254 ++++++++++++++++++------------------ 2 files changed, 128 insertions(+), 128 deletions(-) diff --git a/config/all-tags.json b/config/all-tags.json index b2a1c6f3c3a..bcbe78efc37 100644 --- a/config/all-tags.json +++ b/config/all-tags.json @@ -1 +1 @@ -{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file +{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file diff --git a/config/tools-automated.json b/config/tools-automated.json index 6fac6523de4..a48496cf7dd 100644 --- a/config/tools-automated.json +++ b/config/tools-automated.json @@ -72,19 +72,22 @@ } }, { - "title": "nestjs-asyncapi", - "description": "Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.", + "title": "Zod Sockets", + "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", "links": { - "repoUrl": "https://github.com/flamewow/nestjs-asyncapi" + "websiteUrl": "https://www.npmjs.com/package/zod-sockets", + "repoUrl": "https://github.com/RobinTail/zod-sockets" }, "filters": { - "language": "Typescript", + "language": "TypeScript", "technology": [ "Node.js", - "NestJS" + "TypeScript" ], "categories": [ - "code-first" + "code-first", + "dsl", + "framework" ], "hasCommercial": false, "isAsyncAPIOwner": false @@ -113,22 +116,19 @@ } }, { - "title": "Zod Sockets", - "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", + "title": "nestjs-asyncapi", + "description": "Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.", "links": { - "websiteUrl": "https://www.npmjs.com/package/zod-sockets", - "repoUrl": "https://github.com/RobinTail/zod-sockets" + "repoUrl": "https://github.com/flamewow/nestjs-asyncapi" }, "filters": { - "language": "TypeScript", + "language": "Typescript", "technology": [ "Node.js", - "TypeScript" + "NestJS" ], "categories": [ - "code-first", - "dsl", - "framework" + "code-first" ], "hasCommercial": false, "isAsyncAPIOwner": false @@ -139,32 +139,6 @@ "Code Generators": { "description": "The following is a list of tools that generate code from an AsyncAPI document; not the other way around.", "toolsList": [ - { - "title": "ZenWave SDK", - "description": "DDD and API-First for Event-Driven Microservices", - "links": { - "websiteUrl": "https://zenwave360.github.io/", - "docsUrl": "https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/", - "repoUrl": "https://github.com/zenwave360/zenwave-sdk" - }, - "filters": { - "language": "Java", - "technology": [ - "Maven", - "CLI", - "Spring Cloud Streams", - "JHipster JDL" - ], - "categories": [ - "code-generator", - "dsl", - "mocking-and-testing", - "cli" - ], - "hasCommercial": false, - "isAsyncAPIOwner": false - } - }, { "title": "Golang AsyncAPI Code Generator", "description": "Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n", @@ -200,6 +174,32 @@ "hasCommercial": false, "isAsyncAPIOwner": true } + }, + { + "title": "ZenWave SDK", + "description": "DDD and API-First for Event-Driven Microservices", + "links": { + "websiteUrl": "https://zenwave360.github.io/", + "docsUrl": "https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/", + "repoUrl": "https://github.com/zenwave360/zenwave-sdk" + }, + "filters": { + "language": "Java", + "technology": [ + "Maven", + "CLI", + "Spring Cloud Streams", + "JHipster JDL" + ], + "categories": [ + "code-generator", + "dsl", + "mocking-and-testing", + "cli" + ], + "hasCommercial": false, + "isAsyncAPIOwner": false + } } ] }, @@ -290,48 +290,48 @@ "description": "Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.", "toolsList": [ { - "title": "ZenWave SDK", - "description": "DDD and API-First for Event-Driven Microservices", + "title": "Zod Sockets", + "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", "links": { - "websiteUrl": "https://zenwave360.github.io/", - "docsUrl": "https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/", - "repoUrl": "https://github.com/zenwave360/zenwave-sdk" + "websiteUrl": "https://www.npmjs.com/package/zod-sockets", + "repoUrl": "https://github.com/RobinTail/zod-sockets" }, "filters": { - "language": "Java", + "language": "TypeScript", "technology": [ - "Maven", - "CLI", - "Spring Cloud Streams", - "JHipster JDL" + "Node.js", + "TypeScript" ], "categories": [ - "code-generator", + "code-first", "dsl", - "mocking-and-testing", - "cli" + "framework" ], "hasCommercial": false, "isAsyncAPIOwner": false } }, { - "title": "Zod Sockets", - "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", + "title": "ZenWave SDK", + "description": "DDD and API-First for Event-Driven Microservices", "links": { - "websiteUrl": "https://www.npmjs.com/package/zod-sockets", - "repoUrl": "https://github.com/RobinTail/zod-sockets" + "websiteUrl": "https://zenwave360.github.io/", + "docsUrl": "https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/", + "repoUrl": "https://github.com/zenwave360/zenwave-sdk" }, "filters": { - "language": "TypeScript", + "language": "Java", "technology": [ - "Node.js", - "TypeScript" + "Maven", + "CLI", + "Spring Cloud Streams", + "JHipster JDL" ], "categories": [ - "code-first", + "code-generator", "dsl", - "framework" + "mocking-and-testing", + "cli" ], "hasCommercial": false, "isAsyncAPIOwner": false @@ -387,34 +387,34 @@ } }, { - "title": "GitHub Action for Generator", - "description": "CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!", + "title": "GitHub Action for CLI", + "description": "GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone", "links": { - "repoUrl": "https://github.com/asyncapi/cli" + "repoUrl": "https://github.com/asyncapi/github-action-for-cli" }, "filters": { "technology": [ - "AsyncAPI Generator" + "AsyncAPI CLI" ], "categories": [ - "github-actions" + "github-action" ], "hasCommercial": false, "isAsyncAPIOwner": true } }, { - "title": "GitHub Action for CLI", - "description": "GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone", + "title": "GitHub Action for Generator", + "description": "CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!", "links": { - "repoUrl": "https://github.com/asyncapi/github-action-for-cli" + "repoUrl": "https://github.com/asyncapi/cli" }, "filters": { "technology": [ - "AsyncAPI CLI" + "AsyncAPI Generator" ], "categories": [ - "github-action" + "github-actions" ], "hasCommercial": false, "isAsyncAPIOwner": true @@ -564,6 +564,25 @@ "CLIs": { "description": "The following is a list of tools that you can work with in terminal or do some CI/CD automation.", "toolsList": [ + { + "title": "AsyncAPI CLI", + "description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n", + "links": { + "websiteUrl": "https://www.asyncapi.com/tools/cli", + "repoUrl": "https://github.com/asyncapi/cli" + }, + "filters": { + "technology": [ + "TypeScript" + ], + "categories": [ + "others", + "cli" + ], + "hasCommercial": false, + "isAsyncAPIOwner": true + } + }, { "title": "ZenWave SDK", "description": "DDD and API-First for Event-Driven Microservices", @@ -590,25 +609,6 @@ "isAsyncAPIOwner": false } }, - { - "title": "AsyncAPI CLI", - "description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n", - "links": { - "websiteUrl": "https://www.asyncapi.com/tools/cli", - "repoUrl": "https://github.com/asyncapi/cli" - }, - "filters": { - "technology": [ - "TypeScript" - ], - "categories": [ - "others", - "cli" - ], - "hasCommercial": false, - "isAsyncAPIOwner": true - } - }, { "title": "AsyncAPI CLI", "description": "One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n", @@ -719,15 +719,18 @@ "description": "The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.", "toolsList": [ { - "title": "HTML Template", - "description": "HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.", + "title": "Java Spring Cloud Stream Template", + "description": "Java Spring Cloud Stream template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/html-template" + "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template" }, "filters": { - "language": "javascript", + "language": [ + "javascript" + ], "technology": [ - "HTML" + "Spring Cloud Streams", + "Maven" ], "categories": [ "generator-template" @@ -737,17 +740,15 @@ } }, { - "title": "Java Template", - "description": "Java template for the AsyncAPI Generator", + "title": "Node.js Multiprotocol Template", + "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.", "links": { - "repoUrl": "https://github.com/asyncapi/java-template" + "repoUrl": "https://github.com/asyncapi/nodejs-template" }, "filters": { - "language": [ - "javascript" - ], + "language": "javascript", "technology": [ - "Java" + "Node.js" ], "categories": [ "generator-template" @@ -757,19 +758,17 @@ } }, { - "title": "Java Spring Template", - "description": "Java Spring template for the AsyncAPI Generator", + "title": "Java Template", + "description": "Java template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/java-spring-template" + "repoUrl": "https://github.com/asyncapi/java-template" }, "filters": { "language": [ "javascript" ], "technology": [ - "Springboot", - "Maven", - "Gradle" + "Java" ], "categories": [ "generator-template" @@ -779,18 +778,15 @@ } }, { - "title": "Java Spring Cloud Stream Template", - "description": "Java Spring Cloud Stream template for the AsyncAPI Generator", + "title": "Node.js Websockets Template", + "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.", "links": { - "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template" + "repoUrl": "https://github.com/asyncapi/nodejs-ws-template" }, "filters": { - "language": [ - "javascript" - ], + "language": "javascript", "technology": [ - "Spring Cloud Streams", - "Maven" + "Node.js" ], "categories": [ "generator-template" @@ -800,15 +796,15 @@ } }, { - "title": "Node.js Multiprotocol Template", - "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.", + "title": "HTML Template", + "description": "HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.", "links": { - "repoUrl": "https://github.com/asyncapi/nodejs-template" + "repoUrl": "https://github.com/asyncapi/html-template" }, "filters": { "language": "javascript", "technology": [ - "Node.js" + "HTML" ], "categories": [ "generator-template" @@ -818,15 +814,19 @@ } }, { - "title": "Node.js Websockets Template", - "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.", + "title": "Java Spring Template", + "description": "Java Spring template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/nodejs-ws-template" + "repoUrl": "https://github.com/asyncapi/java-spring-template" }, "filters": { - "language": "javascript", + "language": [ + "javascript" + ], "technology": [ - "Node.js" + "Springboot", + "Maven", + "Gradle" ], "categories": [ "generator-template" From ec62c5ed5eca8c246589b5b7da8f9c98fd805829 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela <90895835+vishvamsinh28@users.noreply.github.com> Date: Tue, 15 Oct 2024 23:15:09 +0530 Subject: [PATCH 07/32] feat: add codecov to the project (#3168) Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com>%0ACo-authored-by: Ansh Goyal %0ACo-authored-by: asyncapi-bot --- .github/workflows/if-nodejs-pr-testing.yml | 10 ++++++++++ jest.config.js | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/if-nodejs-pr-testing.yml b/.github/workflows/if-nodejs-pr-testing.yml index 2154143339c..c50814a4a17 100644 --- a/.github/workflows/if-nodejs-pr-testing.yml +++ b/.github/workflows/if-nodejs-pr-testing.yml @@ -60,6 +60,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: "${{ steps.nodeversion.outputs.version }}" + - name: Install dependencies run: npm ci - if: steps.packagejson.outputs.exists == 'true' @@ -72,3 +73,12 @@ jobs: name: Run release assets generation to make sure PR does not break it shell: bash run: npm run generate:assets --if-present + + - if: steps.packagejson.outputs.exists == 'true' + name: Upload Coverage to Codecov + uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 + with: + fail_ci_if_error: true + files: ./coverage/lcov.info + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true diff --git a/jest.config.js b/jest.config.js index 25c7865434e..9d370a6bb76 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,9 @@ module.exports = { verbose: true, collectCoverage: true, + coverageReporters: ['text', 'lcov', 'json-summary'], + coverageDirectory: 'coverage', collectCoverageFrom: ['scripts/**/*.js'], // To disallow netlify edge function tests from running testMatch: ['**/tests/**/*.test.*', '!**/netlify/**/*.test.*'], -}; +}; \ No newline at end of file From 7abb5fdfbf12277d210634885dbd63e3135e2422 Mon Sep 17 00:00:00 2001 From: Ansh Goyal Date: Thu, 17 Oct 2024 21:16:31 +0530 Subject: [PATCH 08/32] fix: run tests on branch pushes (#3296) --- .github/workflows/if-nodejs-pr-testing.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/if-nodejs-pr-testing.yml b/.github/workflows/if-nodejs-pr-testing.yml index c50814a4a17..769039d1a0a 100644 --- a/.github/workflows/if-nodejs-pr-testing.yml +++ b/.github/workflows/if-nodejs-pr-testing.yml @@ -4,6 +4,8 @@ name: PR testing - if Node project on: pull_request: types: [opened, reopened, synchronize, ready_for_review] + push: + branches: [master] jobs: test-nodejs-pr: From 9a1c3a62cdee842f1925b914fec76e88c1eaf8bf Mon Sep 17 00:00:00 2001 From: Akshat Nema <76521428+akshatnema@users.noreply.github.com> Date: Fri, 18 Oct 2024 23:17:33 +0530 Subject: [PATCH 09/32] fix: updated CSS for tools/generator page buttons (#3294) Co-authored-by: Ansh Goyal --- pages/tools/generator.tsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pages/tools/generator.tsx b/pages/tools/generator.tsx index 8a6b70124e5..0453fddf065 100644 --- a/pages/tools/generator.tsx +++ b/pages/tools/generator.tsx @@ -18,7 +18,7 @@ import Paragraph from '../../components/typography/Paragraph'; */ function renderButtons(): JSX.Element { return ( -
    +
    {/*
    ); } From 3a8f69ade7562c5753381ec33f9fba2d7ba07ff0 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sun, 20 Oct 2024 17:29:27 +0200 Subject: [PATCH 10/32] docs(cli): update latest cli documentation (#3306) --- markdown/docs/tools/cli/usage.md | 66 ++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/markdown/docs/tools/cli/usage.md b/markdown/docs/tools/cli/usage.md index 95669e0efd6..269d438fa4d 100644 --- a/markdown/docs/tools/cli/usage.md +++ b/markdown/docs/tools/cli/usage.md @@ -1,11 +1,11 @@ --- -title: 'Usage' +title: "Usage" weight: 40 --- - The AsyncAPI CLI makes it easier to work with AsyncAPI documents. + # Usage + ```sh-session $ npm install -g @asyncapi/cli $ asyncapi COMMAND @@ -33,36 +35,38 @@ USAGE $ asyncapi COMMAND ... ``` + # Commands -* [`asyncapi bundle`](#asyncapi-bundle) -* [`asyncapi config`](#asyncapi-config) -* [`asyncapi config analytics`](#asyncapi-config-analytics) -* [`asyncapi config context`](#asyncapi-config-context) -* [`asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH`](#asyncapi-config-context-add-context-name-spec-file-path) -* [`asyncapi config context current`](#asyncapi-config-context-current) -* [`asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH`](#asyncapi-config-context-edit-context-name-new-spec-file-path) -* [`asyncapi config context init [CONTEXT-FILE-PATH]`](#asyncapi-config-context-init-context-file-path) -* [`asyncapi config context list`](#asyncapi-config-context-list) -* [`asyncapi config context remove CONTEXT-NAME`](#asyncapi-config-context-remove-context-name) -* [`asyncapi config context use CONTEXT-NAME`](#asyncapi-config-context-use-context-name) -* [`asyncapi config versions`](#asyncapi-config-versions) -* [`asyncapi convert [SPEC-FILE]`](#asyncapi-convert-spec-file) -* [`asyncapi diff OLD NEW`](#asyncapi-diff-old-new) -* [`asyncapi generate`](#asyncapi-generate) -* [`asyncapi generate fromTemplate ASYNCAPI TEMPLATE`](#asyncapi-generate-fromtemplate-asyncapi-template) -* [`asyncapi generate models LANGUAGE FILE`](#asyncapi-generate-models-language-file) -* [`asyncapi new`](#asyncapi-new) -* [`asyncapi new file`](#asyncapi-new-file) -* [`asyncapi new glee`](#asyncapi-new-glee) -* [`asyncapi new template`](#asyncapi-new-template) -* [`asyncapi optimize [SPEC-FILE]`](#asyncapi-optimize-spec-file) -* [`asyncapi start`](#asyncapi-start) -* [`asyncapi start studio`](#asyncapi-start-studio) -* [`asyncapi validate [SPEC-FILE]`](#asyncapi-validate-spec-file) + +- [`asyncapi bundle`](#asyncapi-bundle) +- [`asyncapi config`](#asyncapi-config) +- [`asyncapi config analytics`](#asyncapi-config-analytics) +- [`asyncapi config context`](#asyncapi-config-context) +- [`asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH`](#asyncapi-config-context-add-context-name-spec-file-path) +- [`asyncapi config context current`](#asyncapi-config-context-current) +- [`asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH`](#asyncapi-config-context-edit-context-name-new-spec-file-path) +- [`asyncapi config context init [CONTEXT-FILE-PATH]`](#asyncapi-config-context-init-context-file-path) +- [`asyncapi config context list`](#asyncapi-config-context-list) +- [`asyncapi config context remove CONTEXT-NAME`](#asyncapi-config-context-remove-context-name) +- [`asyncapi config context use CONTEXT-NAME`](#asyncapi-config-context-use-context-name) +- [`asyncapi config versions`](#asyncapi-config-versions) +- [`asyncapi convert [SPEC-FILE]`](#asyncapi-convert-spec-file) +- [`asyncapi diff OLD NEW`](#asyncapi-diff-old-new) +- [`asyncapi generate`](#asyncapi-generate) +- [`asyncapi generate fromTemplate ASYNCAPI TEMPLATE`](#asyncapi-generate-fromtemplate-asyncapi-template) +- [`asyncapi generate models LANGUAGE FILE`](#asyncapi-generate-models-language-file) +- [`asyncapi new`](#asyncapi-new) +- [`asyncapi new file`](#asyncapi-new-file) +- [`asyncapi new glee`](#asyncapi-new-glee) +- [`asyncapi new template`](#asyncapi-new-template) +- [`asyncapi optimize [SPEC-FILE]`](#asyncapi-optimize-spec-file) +- [`asyncapi start`](#asyncapi-start) +- [`asyncapi start studio`](#asyncapi-start-studio) +- [`asyncapi validate [SPEC-FILE]`](#asyncapi-validate-spec-file) ## `asyncapi bundle` @@ -715,8 +719,13 @@ USAGE $ asyncapi start ``` + +DESCRIPTION +main command for starting asyncapi services, currently studio only. + _See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/start/index.ts)_ + ## `asyncapi start studio` starts a new local instance of Studio @@ -765,4 +774,5 @@ DESCRIPTION ``` _See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/validate.ts)_ + From 7b7086192a857f0de9527a2301f47385b30baf6a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 22 Oct 2024 11:06:36 +0200 Subject: [PATCH 11/32] docs(cli): update latest cli documentation (#3314) --- markdown/docs/tools/cli/usage.md | 121 +++++++++++++++---------------- 1 file changed, 58 insertions(+), 63 deletions(-) diff --git a/markdown/docs/tools/cli/usage.md b/markdown/docs/tools/cli/usage.md index 269d438fa4d..d4cae23662b 100644 --- a/markdown/docs/tools/cli/usage.md +++ b/markdown/docs/tools/cli/usage.md @@ -1,11 +1,11 @@ --- -title: "Usage" +title: 'Usage' weight: 40 --- - The AsyncAPI CLI makes it easier to work with AsyncAPI documents. - # Usage - ```sh-session $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/2.5.0 linux-x64 node-v18.20.4 +@asyncapi/cli/2.7.1 linux-x64 node-v18.20.4 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND ... ``` - # Commands - -- [`asyncapi bundle`](#asyncapi-bundle) -- [`asyncapi config`](#asyncapi-config) -- [`asyncapi config analytics`](#asyncapi-config-analytics) -- [`asyncapi config context`](#asyncapi-config-context) -- [`asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH`](#asyncapi-config-context-add-context-name-spec-file-path) -- [`asyncapi config context current`](#asyncapi-config-context-current) -- [`asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH`](#asyncapi-config-context-edit-context-name-new-spec-file-path) -- [`asyncapi config context init [CONTEXT-FILE-PATH]`](#asyncapi-config-context-init-context-file-path) -- [`asyncapi config context list`](#asyncapi-config-context-list) -- [`asyncapi config context remove CONTEXT-NAME`](#asyncapi-config-context-remove-context-name) -- [`asyncapi config context use CONTEXT-NAME`](#asyncapi-config-context-use-context-name) -- [`asyncapi config versions`](#asyncapi-config-versions) -- [`asyncapi convert [SPEC-FILE]`](#asyncapi-convert-spec-file) -- [`asyncapi diff OLD NEW`](#asyncapi-diff-old-new) -- [`asyncapi generate`](#asyncapi-generate) -- [`asyncapi generate fromTemplate ASYNCAPI TEMPLATE`](#asyncapi-generate-fromtemplate-asyncapi-template) -- [`asyncapi generate models LANGUAGE FILE`](#asyncapi-generate-models-language-file) -- [`asyncapi new`](#asyncapi-new) -- [`asyncapi new file`](#asyncapi-new-file) -- [`asyncapi new glee`](#asyncapi-new-glee) -- [`asyncapi new template`](#asyncapi-new-template) -- [`asyncapi optimize [SPEC-FILE]`](#asyncapi-optimize-spec-file) -- [`asyncapi start`](#asyncapi-start) -- [`asyncapi start studio`](#asyncapi-start-studio) -- [`asyncapi validate [SPEC-FILE]`](#asyncapi-validate-spec-file) +* [`asyncapi bundle`](#asyncapi-bundle) +* [`asyncapi config`](#asyncapi-config) +* [`asyncapi config analytics`](#asyncapi-config-analytics) +* [`asyncapi config context`](#asyncapi-config-context) +* [`asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH`](#asyncapi-config-context-add-context-name-spec-file-path) +* [`asyncapi config context current`](#asyncapi-config-context-current) +* [`asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH`](#asyncapi-config-context-edit-context-name-new-spec-file-path) +* [`asyncapi config context init [CONTEXT-FILE-PATH]`](#asyncapi-config-context-init-context-file-path) +* [`asyncapi config context list`](#asyncapi-config-context-list) +* [`asyncapi config context remove CONTEXT-NAME`](#asyncapi-config-context-remove-context-name) +* [`asyncapi config context use CONTEXT-NAME`](#asyncapi-config-context-use-context-name) +* [`asyncapi config versions`](#asyncapi-config-versions) +* [`asyncapi convert [SPEC-FILE]`](#asyncapi-convert-spec-file) +* [`asyncapi diff OLD NEW`](#asyncapi-diff-old-new) +* [`asyncapi generate`](#asyncapi-generate) +* [`asyncapi generate fromTemplate ASYNCAPI TEMPLATE`](#asyncapi-generate-fromtemplate-asyncapi-template) +* [`asyncapi generate models LANGUAGE FILE`](#asyncapi-generate-models-language-file) +* [`asyncapi new`](#asyncapi-new) +* [`asyncapi new file`](#asyncapi-new-file) +* [`asyncapi new glee`](#asyncapi-new-glee) +* [`asyncapi new template`](#asyncapi-new-template) +* [`asyncapi optimize [SPEC-FILE]`](#asyncapi-optimize-spec-file) +* [`asyncapi start`](#asyncapi-start) +* [`asyncapi start studio`](#asyncapi-start-studio) +* [`asyncapi validate [SPEC-FILE]`](#asyncapi-validate-spec-file) ## `asyncapi bundle` @@ -103,7 +99,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml -o final-asyncapi.yaml --base ../public-api/main.yaml --baseDir ./social-media/comments-service ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/bundle.ts)_ ## `asyncapi config` @@ -117,7 +113,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/index.ts)_ ## `asyncapi config analytics` @@ -137,7 +133,7 @@ DESCRIPTION Enable or disable analytics for metrics collection ``` -_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/analytics.ts)_ +_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/analytics.ts)_ ## `asyncapi config context` @@ -151,7 +147,7 @@ DESCRIPTION Manage short aliases for full paths to AsyncAPI documents ``` -_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/index.ts)_ +_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/index.ts)_ ## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH` @@ -173,7 +169,7 @@ DESCRIPTION Add a context to the store ``` -_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/add.ts)_ +_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/add.ts)_ ## `asyncapi config context current` @@ -190,7 +186,7 @@ DESCRIPTION Shows the current context that is being used ``` -_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/current.ts)_ +_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/current.ts)_ ## `asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH` @@ -211,7 +207,7 @@ DESCRIPTION Edit a context in the store ``` -_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/edit.ts)_ +_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/edit.ts)_ ## `asyncapi config context init [CONTEXT-FILE-PATH]` @@ -234,7 +230,7 @@ DESCRIPTION Initialize context ``` -_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/init.ts)_ +_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/init.ts)_ ## `asyncapi config context list` @@ -251,7 +247,7 @@ DESCRIPTION List all the stored contexts in the store ``` -_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/list.ts)_ +_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/list.ts)_ ## `asyncapi config context remove CONTEXT-NAME` @@ -271,7 +267,7 @@ DESCRIPTION Delete a context from the store ``` -_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/remove.ts)_ +_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/remove.ts)_ ## `asyncapi config context use CONTEXT-NAME` @@ -291,7 +287,7 @@ DESCRIPTION Set a context as current ``` -_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/use.ts)_ +_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/use.ts)_ ## `asyncapi config versions` @@ -308,7 +304,7 @@ DESCRIPTION Show versions of AsyncAPI tools used ``` -_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/versions.ts)_ +_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/versions.ts)_ ## `asyncapi convert [SPEC-FILE]` @@ -336,7 +332,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions or OpenAPI/postman-collection documents to AsyncAPI ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -376,7 +372,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/diff.ts)_ ## `asyncapi generate` @@ -390,7 +386,7 @@ DESCRIPTION Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates. ``` -_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -435,7 +431,7 @@ EXAMPLES $ asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template --param version=1.0.0 singleFile=true --output ./docs --force-write ``` -_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/generate/fromTemplate.ts)_ +_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/generate/fromTemplate.ts)_ ## `asyncapi generate models LANGUAGE FILE` @@ -506,7 +502,7 @@ DESCRIPTION Generates typed models ``` -_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/generate/models.ts)_ +_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/generate/models.ts)_ ## `asyncapi new` @@ -564,7 +560,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -622,7 +618,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/new/file.ts)_ +_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/new/file.ts)_ ## `asyncapi new glee` @@ -644,7 +640,7 @@ DESCRIPTION Creates a new Glee project ``` -_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/new/glee.ts)_ +_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/new/glee.ts)_ ## `asyncapi new template` @@ -668,7 +664,7 @@ DESCRIPTION Creates a new template ``` -_See code: [src/commands/new/template.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/new/template.ts)_ +_See code: [src/commands/new/template.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/new/template.ts)_ ## `asyncapi optimize [SPEC-FILE]` @@ -710,21 +706,21 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --ignore=schema ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/optimize.ts)_ ## `asyncapi start` +Starts AsyncAPI-related services. Currently, it supports launching the AsyncAPI Studio + ``` USAGE $ asyncapi start -``` - DESCRIPTION -main command for starting asyncapi services, currently studio only. - -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/start/index.ts)_ + Starts AsyncAPI-related services. Currently, it supports launching the AsyncAPI Studio +``` +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -743,7 +739,7 @@ DESCRIPTION starts a new local instance of Studio ``` -_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/start/studio.ts)_ +_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/start/studio.ts)_ ## `asyncapi validate [SPEC-FILE]` @@ -773,6 +769,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/validate.ts)_ - +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/validate.ts)_ From 2be7824492b6228f376ba853bf62d6d0bb715aca Mon Sep 17 00:00:00 2001 From: Akshat Nema <76521428+akshatnema@users.noreply.github.com> Date: Wed, 23 Oct 2024 10:06:24 +0530 Subject: [PATCH 12/32] fix: fixed dashboard scripts (#3304) Co-authored-by: Ansh Goyal %0ACo-authored-by: asyncapi-bot --- .../regenerate-meetings-and-videos.yml | 8 +- components/newsroom/Newsroom.tsx | 10 +- scripts/dashboard/build-dashboard.js | 190 +++++++++--------- 3 files changed, 106 insertions(+), 102 deletions(-) diff --git a/.github/workflows/regenerate-meetings-and-videos.yml b/.github/workflows/regenerate-meetings-and-videos.yml index 72aeda4e9e6..34509995d06 100644 --- a/.github/workflows/regenerate-meetings-and-videos.yml +++ b/.github/workflows/regenerate-meetings-and-videos.yml @@ -1,6 +1,6 @@ name: List everyday latest list of AsyncAPI Meetings, Newsroom Videos and Dashboard data. -on: +on: workflow_dispatch: schedule: #every day at midnight @@ -23,7 +23,7 @@ jobs: - name: Check package-lock version uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master id: lockversion - + - name: Use Node.js uses: actions/setup-node@v3 with: @@ -45,7 +45,7 @@ jobs: committer: asyncapi-bot author: asyncapi-bot title: 'chore: update meetings.json and newsrooom_videos.json' - branch: update-meetings/${{ github.job }} + branch: update-meetings/${{ github.sha }} - if: failure() # Only, on failure, send a message on the 94_bot-failing-ci slack channel name: Report workflow run status to Slack uses: 8398a7/action-slack@fbd6aa58ba854a740e11a35d0df80cb5d12101d8 #using https://github.com/8398a7/action-slack/releases/tag/v3.15.1 @@ -54,4 +54,4 @@ jobs: fields: repo,action,workflow text: 'AsyncAPI Meetings and Videos workflow failed' env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} \ No newline at end of file + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} diff --git a/components/newsroom/Newsroom.tsx b/components/newsroom/Newsroom.tsx index 87b8bdff180..a88c4e2f14c 100644 --- a/components/newsroom/Newsroom.tsx +++ b/components/newsroom/Newsroom.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { TwitterTimelineEmbed } from 'react-twitter-embed'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; @@ -69,19 +68,14 @@ export default function Newsroom() {
    -
    +
    -
    +
    -
    -
    - -
    -
    diff --git a/scripts/dashboard/build-dashboard.js b/scripts/dashboard/build-dashboard.js index 49fbf8b5d4f..120109a05c2 100644 --- a/scripts/dashboard/build-dashboard.js +++ b/scripts/dashboard/build-dashboard.js @@ -1,34 +1,90 @@ const { writeFileSync } = require('fs'); const { resolve } = require('path'); const { graphql } = require('@octokit/graphql'); -const { Promise } = require('node-fetch'); const { Queries } = require('./issue-queries'); -async function getHotDiscussions(discussions) { - const result = await Promise.all( - discussions.map(async (discussion) => { +/** + * Introduces a delay in the execution flow. + * @param {number} ms - The number of milliseconds to pause. + * @returns {Promise} A promise that resolves after the specified delay. + */ +async function pause(ms) { + return new Promise((res) => { + setTimeout(res, ms); + }); +} + +async function getDiscussions(query, pageSize, endCursor = null) { + try { + const result = await graphql(query, { + first: pageSize, + after: endCursor, + headers: { + authorization: `token ${process.env.GITHUB_TOKEN}` + } + }); + + if (result.rateLimit.remaining <= 100) { + console.log( + `[WARNING] GitHub GraphQL rateLimit`, + `cost = ${result.rateLimit.cost}`, + `limit = ${result.rateLimit.limit}`, + `remaining = ${result.rateLimit.remaining}`, + `resetAt = ${result.rateLimit.resetAt}` + ); + } + + await pause(500); + + const { hasNextPage } = result.search.pageInfo; + + if (!hasNextPage) { + return result.search.nodes; + } + return result.search.nodes.concat(await getDiscussions(query, pageSize, result.search.pageInfo.endCursor)); + } catch (e) { + console.error(e); + + return Promise.reject(e); + } +} +async function getDiscussionByID(isPR, id) { + try { + const result = await graphql(isPR ? Queries.pullRequestById : Queries.issueById, { + id, + headers: { + authorization: `token ${process.env.GITHUB_TOKEN}` + } + }); + + return result; + } catch (e) { + console.error(e); + + return Promise.reject(e); + } +} + +async function processHotDiscussions(batch) { + return Promise.all( + batch.map(async (discussion) => { try { + // eslint-disable-next-line no-underscore-dangle const isPR = discussion.__typename === 'PullRequest'; if (discussion.comments.pageInfo.hasNextPage) { - let fetchedDiscussion = await getDiscussionByID(isPR, discussion.id); + const fetchedDiscussion = await getDiscussionByID(isPR, discussion.id); discussion = fetchedDiscussion.node; } const interactionsCount = discussion.reactions.totalCount + discussion.comments.totalCount + - discussion.comments.nodes.reduce( - (acc, curr) => acc + curr.reactions.totalCount, - 0 - ); + discussion.comments.nodes.reduce((acc, curr) => acc + curr.reactions.totalCount, 0); const finalInteractionsCount = isPR ? interactionsCount + - discussion.reviews.totalCount + - discussion.reviews.nodes.reduce( - (acc, curr) => acc + curr.comments.totalCount, - 0 - ) + discussion.reviews.totalCount + + discussion.reviews.nodes.reduce((acc, curr) => acc + curr.comments.totalCount, 0) : interactionsCount; return { id: discussion.id, @@ -37,31 +93,38 @@ async function getHotDiscussions(discussions) { title: discussion.title, author: discussion.author ? discussion.author.login : '', resourcePath: discussion.resourcePath, - repo: 'asyncapi/' + discussion.repository.name, + repo: `asyncapi/${discussion.repository.name}`, labels: discussion.labels ? discussion.labels.nodes : [], - score: - finalInteractionsCount / - Math.pow(monthsSince(discussion.timelineItems.updatedAt) + 2, 1.8), + score: finalInteractionsCount / (monthsSince(discussion.timelineItems.updatedAt) + 2) ** 1.8 }; } catch (e) { - console.error( - `there was some issues while parsing this item: ${JSON.stringify( - discussion - )}` - ); + console.error(`there was some issues while parsing this item: ${JSON.stringify(discussion)}`); throw e; } }) ); +} + +async function getHotDiscussions(discussions) { + const result = []; + const batchSize = 5; + + for (let i = 0; i < discussions.length; i += batchSize) { + const batch = discussions.slice(i, i + batchSize); + // eslint-disable-next-line no-await-in-loop + const batchResults = await processHotDiscussions(batch); + + // eslint-disable-next-line no-await-in-loop + await pause(1000); + + result.push(...batchResults); + } result.sort((ElemA, ElemB) => ElemB.score - ElemA.score); - const filteredResult = result.filter(issue => issue.author !== 'asyncapi-bot'); + const filteredResult = result.filter((issue) => issue.author !== 'asyncapi-bot'); return filteredResult.slice(0, 12); } async function writeToFile(content) { - writeFileSync( - resolve(__dirname, '..', '..', 'dashboard.json'), - JSON.stringify(content, null, ' ') - ); + writeFileSync(resolve(__dirname, '..', '..', 'dashboard.json'), JSON.stringify(content, null, ' ')); } async function mapGoodFirstIssues(issues) { return issues.map((issue) => ({ @@ -69,25 +132,20 @@ async function mapGoodFirstIssues(issues) { title: issue.title, isAssigned: !!issue.assignees.totalCount, resourcePath: issue.resourcePath, - repo: 'asyncapi/' + issue.repository.name, + repo: `asyncapi/${issue.repository.name}`, author: issue.author.login, area: getLabel(issue, 'area/') || 'Unknown', labels: issue.labels.nodes.filter( - (label) => - !label.name.startsWith('area/') && - !label.name.startsWith('good first issue') - ), + (label) => !label.name.startsWith('area/') && !label.name.startsWith('good first issue') + ) })); } function getLabel(issue, filter) { - const result = issue.labels.nodes.find((label) => - label.name.startsWith(filter) - ); - return result && result.name.split('/')[1]; + const result = issue.labels.nodes.find((label) => label.name.startsWith(filter)); + return result?.name.split('/')[1]; } - function monthsSince(date) { const seconds = Math.floor((new Date() - new Date(date)) / 1000); // 2592000 = number of seconds in a month = 30 * 24 * 60 * 60 @@ -95,72 +153,24 @@ function monthsSince(date) { return Math.floor(months); } -async function getDiscussions(query, pageSize, endCursor = null) { - try { - let result = await graphql(query, { - first: pageSize, - after: endCursor, - headers: { - authorization: `token ${process.env.GITHUB_TOKEN}`, - }, - }); - - if (result.rateLimit.remaining <= 100) { - console.log( - `[WARNING] GitHub GraphQL rateLimit`, - `cost = ${result.rateLimit.cost}`, - `limit = ${result.rateLimit.limit}`, - `remaining = ${result.rateLimit.remaining}`, - `resetAt = ${result.rateLimit.resetAt}` - ) - } - - const hasNextPage = result.search.pageInfo.hasNextPage; - - if (!hasNextPage) { - return result.search.nodes; - } else { - return result.search.nodes.concat( - await getDiscussions(query, pageSize, result.search.pageInfo.endCursor) - ); - } - } catch (e) { - console.error(e); - } -} -async function getDiscussionByID(isPR, id) { - try { - let result = await graphql(isPR ? Queries.pullRequestById : Queries.issueById, { - id, - headers: { - authorization: `token ${process.env.GITHUB_TOKEN}`, - }, - - } - ); - return result; - } catch (e) { - console.error(e); - } -} async function start() { try { const [issues, PRs, rawGoodFirstIssues] = await Promise.all([ getDiscussions(Queries.hotDiscussionsIssues, 20), getDiscussions(Queries.hotDiscussionsPullRequests, 20), - getDiscussions(Queries.goodFirstIssues, 20), + getDiscussions(Queries.goodFirstIssues, 20) ]); const discussions = issues.concat(PRs); const [hotDiscussions, goodFirstIssues] = await Promise.all([ getHotDiscussions(discussions), - mapGoodFirstIssues(rawGoodFirstIssues), + mapGoodFirstIssues(rawGoodFirstIssues) ]); writeToFile({ hotDiscussions, goodFirstIssues }); } catch (e) { - console.log('There were some issues parsing data from github.') + console.log('There were some issues parsing data from github.'); console.log(e); } } start(); -module.exports = { getLabel, monthsSince, mapGoodFirstIssues, getHotDiscussions, getDiscussionByID } \ No newline at end of file +module.exports = { getLabel, monthsSince, mapGoodFirstIssues, getHotDiscussions, getDiscussionByID }; From 6387b719d63f6893d6731e50fb70403a5f1d8667 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 23 Oct 2024 06:49:26 +0200 Subject: [PATCH 13/32] chore: update meetings.json and newsrooom_videos.json (#3316) --- config/meetings.json | 255 ++++++++++++++---------------------- config/newsroom_videos.json | 40 +++--- 2 files changed, 117 insertions(+), 178 deletions(-) diff --git a/config/meetings.json b/config/meetings.json index d17a57704fd..4fbe2b0b8e2 100644 --- a/config/meetings.json +++ b/config/meetings.json @@ -1,224 +1,163 @@ [ { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=ZzZ0OG1iNmkyZW5lbnF2bnE5ZnY5ZW9ua28gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1067", - "banner": "https://github.com/asyncapi/community/assets/40604284/897e0278-8da4-41dc-b2b2-b5add9370d6f", - "date": "2024-02-20T16:00:00.000Z" - }, - { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=dHJ1dGxncm81b3VvZjI0ZjE1MDkxY25lcjggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1068", - "banner": "https://github.com/asyncapi/community/assets/40604284/70eff71e-5de5-4c99-bc89-86a1b9b81e81", - "date": "2024-03-05T08:00:00.000Z" - }, - { - "title": "Essential building blocks for AsyncAPI", - "calLink": "https://www.google.com/calendar/event?eid=dmoyY2ZjNXZ1cDh2cGRiZzFnNG92YzQzZHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1084", + "title": "Essential Building Blocks Working Group", + "calLink": "https://www.google.com/calendar/event?eid=M2pxNGNwZnRqNGpjcDg2cXVnc3VqZ2wwMHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1294", "banner": "", - "date": "2024-03-12T20:00:00.000Z" - }, - { - "title": "AACoT'24 Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=aG9xMzUyam82cDluaDNpY2c2aDBlb25pdDggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1087", - "banner": "https://github.com/asyncapi/community/assets/66913810/43114d9e-ee7f-4479-8714-475d67a374aa", - "date": "2024-03-13T14:00:00.000Z" + "date": "2024-07-16T18:00:00.000Z" }, { "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=OTE2Y3YxdGVzNzhqNXJrZThqYml0M2Uwa2MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1103", - "banner": "https://github-production-user-asset-6210df.s3.amazonaws.com/40604284/313431824-6d286502-6a69-4584-9c01-a2f6984d8320.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240316%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240316T213213Z&X-Amz-Expires=300&X-Amz-Signature=558069f389931870f0ec70cc3f7f4e3bf0e1c4f669a2bd74763f6ed5ae4b2206&X-Amz-SignedHeaders=host&actor_id=40604284&key_id=0&repo_id=347621559", - "date": "2024-03-19T08:00:00.000Z" + "calLink": "https://www.google.com/calendar/event?eid=am5kcG50YW9obGUzcmVucWZqMTQ4NDlsbjQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1305", + "banner": "https://github.com/asyncapi/community/assets/40604284/65376079-c5e8-467d-b513-21dfaba4570f", + "date": "2024-07-23T16:00:00.000Z" }, { - "title": "Let's talk about contributing GSoC FAQ", - "calLink": "https://www.google.com/calendar/event?eid=ZmVkcTI2aTNsZjhwcHZuNWZhb2UwNHE1a2MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1104", - "banner": "https://github-production-user-asset-6210df.s3.amazonaws.com/40604284/313431821-e905e25c-87b1-466a-adc5-e8551556d7ba.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240316%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240316T213412Z&X-Amz-Expires=300&X-Amz-Signature=4bbf99e0b0da3bfd2b5c3a42394f49314acf5cec64be0394487a5809dc489d71&X-Amz-SignedHeaders=host&actor_id=40604284&key_id=0&repo_id=347621559", - "date": "2024-03-21T14:00:00.000Z" - }, - { - "title": "Essential building blocks", - "calLink": "https://www.google.com/calendar/event?eid=cjFnc2VrNjIzMGZmOXE2Y2FqazF1aHJobWMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1107", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=Z3NzN2JvcjdnY2diMnJpczA4dWMxMGh2ZGcgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1309", "banner": "", - "date": "2024-03-26T18:00:00.000Z" + "date": "2024-07-16T14:00:00.000Z" }, { - "title": "Essential building blocks", - "calLink": "https://www.google.com/calendar/event?eid=NW42YmtrcTl1ajRscThmMm9qMzhqMG05dHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1108", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=b2twOWkyZ3ExcGxnYnAxbzBobzA1MWxvcW8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1321", "banner": "", - "date": "2024-04-02T18:00:00.000Z" + "date": "2024-07-30T14:00:00.000Z" }, { - "title": "AsyncAPI Marketing in 2024 - kick off", - "calLink": "https://www.google.com/calendar/event?eid=bmkyZm9pMzZhNjNjM2RwMjllOHB1YnEwczggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1109", - "banner": "", - "date": "2024-03-26T14:00:00.000Z" - }, - { - "title": "AACoT'24 Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=c24wbzZkM2VqMTh1MjUzNGoxOGszZXBxOGMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1110", - "banner": "https://github.com/asyncapi/community/assets/66913810/8769dbe0-baef-42f7-b55e-74f5a288da55", - "date": "2024-03-27T14:00:00.000Z" - }, - { - "title": "Community Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=MXU4ZXJnOW5sbWZuOW5ndmE3MGwyYzRvdjggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1118", + "title": "Essential Building Blocks Working Group", + "calLink": "https://www.google.com/calendar/event?eid=YzYyaHNiNTdqbGQ1OTNybjE1NDZlb2ppODAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1331", "banner": "", - "date": "2024-03-27T16:00:00.000Z" + "date": "2024-08-13T18:00:00.000Z" }, { "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=bWdldGthMGpycXBtaHZ2MXA0dmJlOGpvOXMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1123", - "banner": "https://github.com/asyncapi/community/assets/40604284/10c8e2ef-8c1b-4758-9751-d37a7e123864", - "date": "2024-04-02T16:00:00.000Z" + "calLink": "https://www.google.com/calendar/event?eid=aG45bXYwN2I4NWthanBpZ290bzRnbjE1cWMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1335", + "banner": "https://github.com/user-attachments/assets/9d68eacc-c5b3-4f49-a7a2-4120ead380b0", + "date": "2024-08-06T08:00:00.000Z" }, { "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=ZGRuZ290dGk0aGQ3cmtoMXFhc205NHVsYW8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1124", - "banner": "https://github.com/asyncapi/community/assets/40604284/e4085ee6-6e1a-45d7-8bbe-11b44432f8ef", - "date": "2024-04-16T08:00:00.000Z" + "calLink": "https://www.google.com/calendar/event?eid=cnIwc3U0c2o1a3FoaWM0M2VvZXFjNzJvZzQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1336", + "banner": "https://github.com/user-attachments/assets/7756ebe2-f8c7-4bda-91e3-6a678c1fad99", + "date": "2024-08-20T16:00:00.000Z" }, { - "title": "Cheat Sheet Poster - Content discussion", - "calLink": "https://www.google.com/calendar/event?eid=dHA1MWNlZTl2c3RkOWxwdTk4YzBkZWtxcGMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1126", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=dDNtNmxyODRkNzdvOTdvaWV0NjhtZnYyMGcgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1338", "banner": "", - "date": "2024-04-03T10:00:00.000Z" + "date": "2024-08-13T14:00:00.000Z" }, { - "title": "Essential building blocks", - "calLink": "https://www.google.com/calendar/event?eid=c2pqamo4YXUwMWg1YmdqbDE3bXZncWpzb2cgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1144", + "title": "Essential Building Blocks Working Group", + "calLink": "https://www.google.com/calendar/event?eid=c28zazMxcDk3MThpMWFpNG9lYzRrbmIzNW8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1342", "banner": "", - "date": "2024-04-09T18:00:00.000Z" - }, - { - "title": "AACoT'24 Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=NmJlNWE0dmlhZnZvNmwzNnRmNGp1OW1sNzQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1147", - "banner": "https://github.com/asyncapi/community/assets/66913810/8769dbe0-baef-42f7-b55e-74f5a288da55", - "date": "2024-04-10T14:00:00.000Z" + "date": "2024-08-27T18:00:00.000Z" }, { - "title": "Community Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=NWluOTRmcG9vYjVjcWoydjVocDAzbjJtb2sgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1154", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=MmpwdGxqb29wcHQyaGk3dXU1cTJ0M3E2aGMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1354", "banner": "", - "date": "2024-04-09T14:00:00.000Z" + "date": "2024-09-10T14:00:00.000Z" }, { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=M2JoNHViMGE4MXQwZjdlM2RmMWRqczJpZXMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1159", - "banner": "", - "date": "2024-04-16T18:00:00.000Z" + "title": "Community Meeting", + "calLink": "https://www.google.com/calendar/event?eid=b2lsN3YwcGNmdWZiNTltNm1lM25wYXYwc3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1355", + "banner": "https://github.com/user-attachments/assets/399c2eec-5123-47e9-ad41-024cd478a667", + "date": "2024-09-03T08:00:00.000Z" }, { - "title": "Community Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=a25zaTduazV2ZTI1NGcxYzJ2N2h2NXJ0MnMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1169", - "banner": "", - "date": "2024-04-15T14:00:00.000Z" + "title": "Community Meeting", + "calLink": "https://www.google.com/calendar/event?eid=dG1nMGxqMWg4ajVqZ3Z2NHRpYW42bmUyNWMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1356", + "banner": "https://github.com/user-attachments/assets/bfcd9509-ba05-4e23-9fbd-65fcaed1bccc", + "date": "2024-09-17T16:00:00.000Z" }, { - "title": "Marketing - Next steps", - "calLink": "https://www.google.com/calendar/event?eid=bG5rcGc3bWZuODhrajU2aGtxamtvajI4c28gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1175", + "title": "Design Onboarding Call", + "calLink": "https://www.google.com/calendar/event?eid=dTU0c212bjVpcTFtYmp0aXVqMGFidG1paDAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1372", "banner": "", - "date": "2024-04-25T14:00:00.000Z" + "date": "2024-09-12T10:00:00.000Z" }, { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=M2RqZ3FmODRyZzRxM3RwOW9uMHEyNzVudjQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1177", + "title": "Marketing WG Meeting,", + "calLink": "https://www.google.com/calendar/event?eid=NDVmcGpjM3Y2aGFxMDhhMjMxZGgyNzlkNGsgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1534", "banner": "", - "date": "2024-04-23T18:00:00.000Z" + "date": "2024-10-08T14:00:00.000Z" }, { - "title": "Maintainers Growth Working Group Meeting", - "calLink": "https://www.google.com/calendar/event?eid=NGZ0NWZiNWw0MzJsbGR0M2Ewdm5kcGNkYzEgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "date": "2024-04-22T14:00:00.000Z" + "title": "Community Meeting", + "calLink": "https://www.google.com/calendar/event?eid=MHRvMzJtb2pxZWs5bDM4a3Jxb2RhYmVhMmMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1545", + "banner": "https://github.com/user-attachments/assets/91fca5af-ae9a-46be-aa44-0f2ef20ce34e", + "date": "2024-10-15T08:00:00.000Z" }, { "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=cmk4OTNzZGxvZDd2NHZxb243cG44NzlibWsgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1184", - "banner": "https://github.com/asyncapi/community/assets/40604284/d5358c67-20c3-48a9-b61c-cbea54bbf95c", - "date": "2024-04-30T16:00:00.000Z" + "calLink": "https://www.google.com/calendar/event?eid=amw3ZTBwZWllOTViYmMzMGFpNDhtdW9pZDggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1546", + "banner": "https://github.com/user-attachments/assets/123ebfbe-6662-47ae-b36c-c2ba2e5d40f9", + "date": "2024-10-29T16:00:00.000Z" }, { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=cjNxYm9sOXIwNDlpazY5MmoyNHE3NGxoZHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1186", - "banner": "", - "date": "2024-04-30T18:00:00.000Z" + "title": "Let's talk about contributing Hacktoberfest Edition", + "calLink": "https://www.google.com/calendar/event?eid=Zm9lMzRvM2F2MGljbWplZDJnNWYwczIwMzQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1549", + "banner": "https://github.com/user-attachments/assets/0cd48545-5e26-4240-aa8f-f39306617e94", + "date": "2024-10-08T12:00:00.000Z" }, { - "title": "Marketing - WG setup and hiring", - "calLink": "https://www.google.com/calendar/event?eid=cjdhZTcxM25zNG1pMzloc2g5b2I3aTMyaG8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1192", - "banner": "", - "date": "2024-05-09T14:00:00.000Z" + "title": "AsyncAPI Mentorship Program FAQ", + "calLink": "https://www.google.com/calendar/event?eid=NGlzdDFubzY1YWlwNjhpbm8ycTJzNGU1ZjQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1550", + "banner": "https://github.com/user-attachments/assets/d9e9e2cd-714b-48a8-a40d-03c7683a973c", + "date": "2024-10-10T11:00:00.000Z" }, { - "title": "Maintainers Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=ZG9tMTVxazhybm5vMnE2cHIxbG4wOHQ3djAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1197", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=NDd1NzNqdWprNWdqc3U3aGsyZnBhOWpobXMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1553", "banner": "", - "date": "2024-05-08T14:00:00.000Z" + "date": "2024-10-22T14:00:00.000Z" }, { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=ZzQ4aDFsbnZpaXBmZ2h2amdrdWpxZXZrYmcgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1200", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=MG9qY2RycjY2cm0xMW1ibTVpZGh2MXZuNjQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1554", "banner": "", - "date": "2024-05-14T18:00:00.000Z" - }, - { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=bG5pdGoxcWZjc3VxMnJib2p2ZXZpYW8xM3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1201", - "banner": "https://github.com/asyncapi/community/assets/40604284/0b128389-fad9-4342-bbc6-4e5624327374", - "date": "2024-05-14T08:00:00.000Z" + "date": "2024-11-05T14:00:00.000Z" }, { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=OWZwaWlyOWJ0dmExcDJ0c2llaXZiMXA3M3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1202", - "banner": "https://github.com/asyncapi/community/assets/40604284/be6af5ec-9697-4ba4-a70b-4b9dd2c54c78", - "date": "2024-05-28T16:00:00.000Z" - }, - { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=Z2M2dWxkZWI1YzY1amJydTQzcTlrYW1uZzggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1210", + "title": "Design Meeting", + "calLink": "https://www.google.com/calendar/event?eid=ZWptamE1cWRzdGE5Mjlybm9vcGlqYTJkOXMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1558", "banner": "", - "date": "2024-05-28T18:00:00.000Z" + "date": "2024-10-17T12:00:00.000Z" }, { - "title": "Maintainers Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=ZG45NjF1dXIyc2ZuajkwMTQwMWtxNGhma28gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1212", + "title": "AsyncAPI Online Conference 2024 Dry-Run", + "calLink": "https://www.google.com/calendar/event?eid=cnY0NDB2Y2dvcm1uZ2V0MmlrdDdyc3ByNTAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1559", "banner": "", - "date": "2024-05-22T14:00:00.000Z" + "date": "2024-10-18T16:00:00.000Z" }, { - "title": "Developer Experience Working Group", - "calLink": "https://www.google.com/calendar/event?eid=ZWd1bWVrMjNrN3JoM3A3cXJndmZvNGFsdmsgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1220", + "title": "AsyncAPI Online Conference 2024", + "calLink": "https://www.google.com/calendar/event?eid=cjZwdnVldDd2Z29zb3Jlcm9pdTBvYzJmMnMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1562", "banner": "", - "date": "2024-05-23T14:00:00.000Z" + "date": "2024-10-30T10:00:00.000Z" } ] \ No newline at end of file diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json index 52eefddc49b..6a3893e2316 100644 --- a/config/newsroom_videos.json +++ b/config/newsroom_videos.json @@ -1,32 +1,32 @@ [ { - "image_url": "https://i.ytimg.com/vi/K7fvKbOfqOg/hqdefault.jpg", - "title": "Developer Experience Working Group, 14:00 UTC Thursday May 23rd 2024", - "description": "Define our vision and plans https://github.com/asyncapi/community/issues/1220.", - "videoId": "K7fvKbOfqOg" + "image_url": "https://i.ytimg.com/vi/2WUchTKDPfs/hqdefault.jpg", + "title": "Marketing WG Meeting, 14:00 UTC Tuesday October 22nd 2024", + "description": "https://github.com/asyncapi/community/issues/1553.", + "videoId": "2WUchTKDPfs" }, { - "image_url": "https://i.ytimg.com/vi/94SSXX78VCU/hqdefault.jpg", - "title": "Essential Building Blocks Working Group, 18:00 UTC Tuesday May 14th 2024", - "description": "https://github.com/asyncapi/community/issues/1200.", - "videoId": "94SSXX78VCU" + "image_url": "https://i.ytimg.com/vi/FzRxTpOeIDA/hqdefault.jpg", + "title": "Design Meeting, 12:00 UTC Thursday October 17th 2024", + "description": "https://github.com/asyncapi/community/issues/1558.", + "videoId": "FzRxTpOeIDA" }, { - "image_url": "https://i.ytimg.com/vi/RijgS6y_JAo/hqdefault.jpg", - "title": "Maintainers Growth Working Group, 14:00 UTC Wednesday May 8th 2024", - "description": "https://github.com/asyncapi/community/issues/1197.", - "videoId": "RijgS6y_JAo" + "image_url": "https://i.ytimg.com/vi/maMQC97q_6E/hqdefault.jpg", + "title": "Community Meeting, 8:00 UTC Tuesday October 15th 2024", + "description": "https://github.com/asyncapi/community/issues/1545.", + "videoId": "maMQC97q_6E" }, { - "image_url": "https://i.ytimg.com/vi/8F3mTwf7JEs/hqdefault.jpg", - "title": "Essential Building Blocks Working Group, 18:00 UTC Tuesday May 14th 2024", - "description": "https://github.com/asyncapi/community/issues/1200.", - "videoId": "8F3mTwf7JEs" + "image_url": "https://i.ytimg.com/vi/P1ZqaVBb6XM/hqdefault.jpg", + "title": "AsyncAPI Mentorship Program FAQ, 11:00 UTC Thursday October 10th 2024", + "description": "https://github.com/asyncapi/community/issues/1550.", + "videoId": "P1ZqaVBb6XM" }, { - "image_url": "https://i.ytimg.com/vi/eQed8AKDlsM/hqdefault.jpg", - "title": "Marketing - WG setup and hiring, 14:00 UTC Wednesday May 9th 2024", - "description": "https://github.com/asyncapi/community/issues/1192.", - "videoId": "eQed8AKDlsM" + "image_url": "https://i.ytimg.com/vi/4jaACa7geT0/hqdefault.jpg", + "title": "Design Onboarding Call, 10:00 UTC Thursday September 12th 2024", + "description": "https://github.com/asyncapi/community/issues/1372.", + "videoId": "4jaACa7geT0" } ] \ No newline at end of file From 0b09994e899077c86643bc5fe535b2ca020ed393 Mon Sep 17 00:00:00 2001 From: Ansh Goyal Date: Wed, 23 Oct 2024 12:46:21 +0530 Subject: [PATCH 14/32] test: add markdown tests (#3301) Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com> --- .github/workflows/if-nodejs-pr-testing.yml | 38 +++++- markdown/docs/migration/index.md | 1 + markdown/docs/migration/migrating-to-v3.md | 1 + package.json | 1 + scripts/markdown/check-markdown.js | 146 +++++++++++++++++++++ 5 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 scripts/markdown/check-markdown.js diff --git a/.github/workflows/if-nodejs-pr-testing.yml b/.github/workflows/if-nodejs-pr-testing.yml index 769039d1a0a..c8c3bec4d3c 100644 --- a/.github/workflows/if-nodejs-pr-testing.yml +++ b/.github/workflows/if-nodejs-pr-testing.yml @@ -61,8 +61,7 @@ jobs: name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "${{ steps.nodeversion.outputs.version }}" - + node-version: '${{ steps.nodeversion.outputs.version }}' - name: Install dependencies run: npm ci - if: steps.packagejson.outputs.exists == 'true' @@ -76,6 +75,41 @@ jobs: shell: bash run: npm run generate:assets --if-present + # Run the test:md script and capture output + - if: steps.packagejson.outputs.exists == 'true' + name: Run markdown checks + id: markdown_check + run: | + ERRORS=$(npm run test:md | sed -n '/Errors in file/,$p') + echo "markdown_output<> $GITHUB_OUTPUT + echo "$ERRORS" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + # Post a comment using sticky-pull-request-comment + - name: Comment on PR with markdown issues + if: ${{ steps.markdown_check.outputs.markdown_output != '' }} + uses: marocchino/sticky-pull-request-comment@3d60a5b2dae89d44e0c6ddc69dd7536aec2071cd + with: + header: markdown-check-error + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + message: | + ### Markdown Check Results + + We found issues in the following markdown files: + + ``` + ${{ steps.markdown_check.outputs.markdown_output }} + ``` + + # Delete the comment if there are no issues + - if: ${{ steps.markdown_check.outputs.markdown_output == '' }} + name: Delete markdown check comment + uses: marocchino/sticky-pull-request-comment@3d60a5b2dae89d44e0c6ddc69dd7536aec2071cd + with: + header: markdown-check-error + delete: true + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + - if: steps.packagejson.outputs.exists == 'true' name: Upload Coverage to Codecov uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 diff --git a/markdown/docs/migration/index.md b/markdown/docs/migration/index.md index 195bcc35cf5..a8a57359ae2 100644 --- a/markdown/docs/migration/index.md +++ b/markdown/docs/migration/index.md @@ -1,5 +1,6 @@ --- title: "Overview" +weight: 1 --- Migration to a new major version is always difficult, and AsyncAPI is no exception, but we want to provide as smooth a transition as possible. diff --git a/markdown/docs/migration/migrating-to-v3.md b/markdown/docs/migration/migrating-to-v3.md index 85fa6bb47a7..00587645fee 100644 --- a/markdown/docs/migration/migrating-to-v3.md +++ b/markdown/docs/migration/migrating-to-v3.md @@ -1,5 +1,6 @@ --- title: "Migrating to v3" +weight: 2 --- diff --git a/package.json b/package.json index 04ba37b586e..29269ed3e1d 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "generate:videos": "node scripts/build-newsroom-videos.js", "generate:tools": "node scripts/build-tools.js", "test:netlify": "deno test --allow-env --trace-ops netlify/**/*.test.ts", + "test:md": "node scripts/markdown/check-markdown.js", "dev:storybook": "storybook dev -p 6006", "build:storybook": "storybook build" }, diff --git a/scripts/markdown/check-markdown.js b/scripts/markdown/check-markdown.js new file mode 100644 index 00000000000..8979f7e0b4a --- /dev/null +++ b/scripts/markdown/check-markdown.js @@ -0,0 +1,146 @@ +const fs = require('fs'); +const matter = require('gray-matter'); +const path = require('path'); + +/** + * Checks if a given string is a valid URL. + * @param {string} str - The string to validate as a URL. + * @returns {boolean} True if the string is a valid URL, false otherwise. + */ +function isValidURL(str) { + try { + new URL(str); + return true; + } catch (err) { + return false; + } +} + +/** + * Validates the frontmatter of a blog post. + * @param {object} frontmatter - The frontmatter object to validate. + * @param {string} filePath - The path to the file being validated. + * @returns {string[]|null} An array of validation error messages, or null if no errors. + */ +function validateBlogs(frontmatter) { + const requiredAttributes = ['title', 'date', 'type', 'tags', 'cover', 'authors']; + const errors = []; + + // Check for required attributes + requiredAttributes.forEach(attr => { + if (!frontmatter.hasOwnProperty(attr)) { + errors.push(`${attr} is missing`); + } + }); + + // Validate date format + if (frontmatter.date && Number.isNaN(Date.parse(frontmatter.date))) { + errors.push(`Invalid date format: ${frontmatter.date}`); + } + + // Validate tags format (must be an array) + if (frontmatter.tags && !Array.isArray(frontmatter.tags)) { + errors.push(`Tags should be an array`); + } + + // Validate cover is a string + if (frontmatter.cover && typeof frontmatter.cover !== 'string') { + errors.push(`Cover must be a string`); + } + + // Validate authors (must be an array with valid attributes) + if (frontmatter.authors) { + if (!Array.isArray(frontmatter.authors)) { + errors.push('Authors should be an array'); + } else { + frontmatter.authors.forEach((author, index) => { + if (!author.name) { + errors.push(`Author at index ${index} is missing a name`); + } + if (author.link && !isValidURL(author.link)) { + errors.push(`Invalid URL for author at index ${index}: ${author.link}`); + } + if (!author.photo) { + errors.push(`Author at index ${index} is missing a photo`); + } + }); + } + } + + return errors.length ? errors : null; +} + +/** + * Validates the frontmatter of a documentation file. + * @param {object} frontmatter - The frontmatter object to validate. + * @param {string} filePath - The path to the file being validated. + * @returns {string[]|null} An array of validation error messages, or null if no errors. + */ +function validateDocs(frontmatter) { + const errors = []; + + // Check if title exists and is a string + if (!frontmatter.title || typeof frontmatter.title !== 'string') { + errors.push('Title is missing or not a string'); + } + + // Check if weight exists and is a number + if (frontmatter.weight === undefined || typeof frontmatter.weight !== 'number') { + errors.push('Weight is missing or not a number'); + } + + return errors.length ? errors : null; +} + +/** + * Recursively checks markdown files in a folder and validates their frontmatter. + * @param {string} folderPath - The path to the folder to check. + * @param {Function} validateFunction - The function used to validate the frontmatter. + * @param {string} [relativePath=''] - The relative path of the folder for logging purposes. + */ +function checkMarkdownFiles(folderPath, validateFunction, relativePath = '') { + fs.readdir(folderPath, (err, files) => { + if (err) { + console.error('Error reading directory:', err); + return; + } + + files.forEach(file => { + const filePath = path.join(folderPath, file); + const relativeFilePath = path.join(relativePath, file); + + // Skip the folder 'docs/reference/specification' + if (relativeFilePath.includes('reference/specification')) { + return; + } + + fs.stat(filePath, (err, stats) => { + if (err) { + console.error('Error reading file stats:', err); + return; + } + + // Recurse if directory, otherwise validate markdown file + if (stats.isDirectory()) { + checkMarkdownFiles(filePath, validateFunction, relativeFilePath); + } else if (path.extname(file) === '.md') { + const fileContent = fs.readFileSync(filePath, 'utf-8'); + const { data: frontmatter } = matter(fileContent); + + const errors = validateFunction(frontmatter); + if (errors) { + console.log(`Errors in file ${relativeFilePath}:`); + errors.forEach(error => console.log(` - ${error}`)); + process.exitCode = 1; + } + } + }); + }); + }); +} + +const docsFolderPath = path.resolve(__dirname, '../../markdown/docs'); +const blogsFolderPath = path.resolve(__dirname, '../../markdown/blog'); + +checkMarkdownFiles(docsFolderPath, validateDocs); +checkMarkdownFiles(blogsFolderPath, validateBlogs); From 62d6e9a415d7e1ad20da7e854b173d78308a304d Mon Sep 17 00:00:00 2001 From: Ansh Goyal Date: Wed, 23 Oct 2024 17:36:23 +0530 Subject: [PATCH 15/32] fix: restrict markdown tests to ubuntu runner (#3318) --- .github/workflows/if-nodejs-pr-testing.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/if-nodejs-pr-testing.yml b/.github/workflows/if-nodejs-pr-testing.yml index c8c3bec4d3c..a0fb664221c 100644 --- a/.github/workflows/if-nodejs-pr-testing.yml +++ b/.github/workflows/if-nodejs-pr-testing.yml @@ -2,7 +2,7 @@ name: PR testing - if Node project on: - pull_request: + pull_request_target: types: [opened, reopened, synchronize, ready_for_review] push: branches: [master] @@ -42,6 +42,9 @@ jobs: - if: steps.should_run.outputs.shouldrun == 'true' name: Checkout repository uses: actions/checkout@v4 + with: + ref: refs/pull/${{ github.event.pull_request.number }}/merge + - if: steps.should_run.outputs.shouldrun == 'true' name: Check if Node.js project and has package.json id: packagejson @@ -76,7 +79,7 @@ jobs: run: npm run generate:assets --if-present # Run the test:md script and capture output - - if: steps.packagejson.outputs.exists == 'true' + - if: ${{ steps.packagejson.outputs.exists == 'true' && matrix.os == 'ubuntu-latest' }} name: Run markdown checks id: markdown_check run: | @@ -87,7 +90,7 @@ jobs: # Post a comment using sticky-pull-request-comment - name: Comment on PR with markdown issues - if: ${{ steps.markdown_check.outputs.markdown_output != '' }} + if: ${{ steps.markdown_check.outputs.markdown_output != '' && matrix.os == 'ubuntu-latest' }} uses: marocchino/sticky-pull-request-comment@3d60a5b2dae89d44e0c6ddc69dd7536aec2071cd with: header: markdown-check-error @@ -102,7 +105,7 @@ jobs: ``` # Delete the comment if there are no issues - - if: ${{ steps.markdown_check.outputs.markdown_output == '' }} + - if: ${{ steps.markdown_check.outputs.markdown_output == '' && matrix.os == 'ubuntu-latest' }} name: Delete markdown check comment uses: marocchino/sticky-pull-request-comment@3d60a5b2dae89d44e0c6ddc69dd7536aec2071cd with: From adb4832c3c4734f87a44cf51e01a2233bdb79475 Mon Sep 17 00:00:00 2001 From: Akshat Nema <76521428+akshatnema@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:44:13 +0530 Subject: [PATCH 16/32] fix: fixed rate limiting (#3319) Co-authored-by: asyncapi-bot --- scripts/dashboard/build-dashboard.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/scripts/dashboard/build-dashboard.js b/scripts/dashboard/build-dashboard.js index 120109a05c2..5b0a34bee17 100644 --- a/scripts/dashboard/build-dashboard.js +++ b/scripts/dashboard/build-dashboard.js @@ -155,11 +155,9 @@ function monthsSince(date) { async function start() { try { - const [issues, PRs, rawGoodFirstIssues] = await Promise.all([ - getDiscussions(Queries.hotDiscussionsIssues, 20), - getDiscussions(Queries.hotDiscussionsPullRequests, 20), - getDiscussions(Queries.goodFirstIssues, 20) - ]); + const issues = await getDiscussions(Queries.hotDiscussionsIssues, 20); + const PRs = await getDiscussions(Queries.hotDiscussionsPullRequests, 20); + const rawGoodFirstIssues = await getDiscussions(Queries.goodFirstIssues, 20); const discussions = issues.concat(PRs); const [hotDiscussions, goodFirstIssues] = await Promise.all([ getHotDiscussions(discussions), From b3eeb0115135b64a4dc77f0fa75eb62f8072b852 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 23 Oct 2024 14:24:37 +0200 Subject: [PATCH 17/32] chore: update meetings.json and newsrooom_videos.json (#3321) --- dashboard.json | 675 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 439 insertions(+), 236 deletions(-) diff --git a/dashboard.json b/dashboard.json index 53053b94e94..1b19808d255 100644 --- a/dashboard.json +++ b/dashboard.json @@ -1,366 +1,518 @@ { "hotDiscussions": [ { - "id": "I_kwDOFLhIt85_y16Y", + "id": "I_kwDOFLhIt84-OUI3", "isPR": false, - "isAssigned": true, - "title": "Automate Slack user groups + channels creation and management", - "author": "smoya", - "resourcePath": "/asyncapi/community/issues/1072", + "isAssigned": false, + "title": "Create educational & technical video explaining AsyncAPI's main features", + "author": "quetzalliwrites", + "resourcePath": "/asyncapi/community/issues/155", "repo": "asyncapi/community", "labels": [ { "name": "enhancement", "color": "a2eeef" - }, - { - "name": "bounty", - "color": "0E8A16" } ], - "score": 104.24437571598092 + "score": 34.46095064991105 }, { - "id": "PR_kwDOFLhIt85js7KX", + "id": "PR_kwDOFLhIt855u7Eb", "isPR": true, "isAssigned": false, - "title": "chore: add documents CoC Committee and Incident Resolution Procedures", - "author": "Barbanio", - "resourcePath": "/asyncapi/community/pull/1013", + "title": "docs: added community marketing strategy doc", + "author": "iambami", + "resourcePath": "/asyncapi/community/pull/1358", "repo": "asyncapi/community", "labels": [], - "score": 22.9739670999407 + "score": 19.527872034949596 }, { - "id": "PR_kwDOFLhIt85bqKL8", + "id": "PR_kwDOFLhIt85oVQqh", "isPR": true, "isAssigned": false, - "title": "docs: add Bounty Program Rules", - "author": "aeworxet", - "resourcePath": "/asyncapi/community/pull/897", + "title": "feat: docs automation for website", + "author": "AnimeshKumar923", + "resourcePath": "/asyncapi/community/pull/1082", "repo": "asyncapi/community", "labels": [], - "score": 22.112443333692923 + "score": 18.37917367995256 }, { - "id": "I_kwDOBW5R_c580Z0o", - "isPR": false, + "id": "PR_kwDOBW5R_c52BRgf", + "isPR": true, "isAssigned": false, - "title": "New Contributor Guide and Maintenance Setup", - "author": "derberg", - "resourcePath": "/asyncapi/website/issues/2586", + "title": "feat: added test for build-rss.js", + "author": "vishvamsinh28", + "resourcePath": "/asyncapi/website/pull/3101", "repo": "asyncapi/website", + "labels": [], + "score": 17.517649913704783 + }, + { + "id": "I_kwDOGQYLdM5AX1lK", + "isPR": false, + "isAssigned": true, + "title": "Brand Refresh: Mascot", + "author": "mcturco", + "resourcePath": "/asyncapi/brand/issues/12", + "repo": "asyncapi/brand", "labels": [ { - "name": "enhancement", - "color": "84b6eb" + "name": ":art: design", + "color": "0D67D3" + }, + { + "name": "bounty", + "color": "0E8A16" } ], - "score": 18.091999091203302 + "score": 15.794602381209232 }, { - "id": "I_kwDOCVQpZM5M_dcV", - "isPR": false, - "isAssigned": true, - "title": "DocsUI: Messages Object output", - "author": "mcturco", - "resourcePath": "/asyncapi/asyncapi-react/issues/618", - "repo": "asyncapi/asyncapi-react", + "id": "PR_kwDOFLhIt853IEwA", + "isPR": true, + "isAssigned": false, + "title": "docs: added asyncapi student ambassador md file", + "author": "iambami", + "resourcePath": "/asyncapi/community/pull/1333", + "repo": "asyncapi/community", "labels": [], - "score": 17.230475324955524 + "score": 15.220253203710714 }, { - "id": "PR_kwDOBW5R_c5p28Vu", - "isPR": true, + "id": "I_kwDOFLhIt85bebeO", + "isPR": false, "isAssigned": false, - "title": "fix: navigation to correct heading in tools section", - "author": "Vishal2002", - "resourcePath": "/asyncapi/website/pull/2790", - "repo": "asyncapi/website", + "title": "Meeting Banners Storage", + "author": "AceTheCreator", + "resourcePath": "/asyncapi/community/issues/568", + "repo": "asyncapi/community", "labels": [], "score": 14.933078614961456 }, { - "id": "PR_kwDOCoBobc5tRBZn", + "id": "PR_kwDOCHlHJM54CmhW", "isPR": true, "isAssigned": false, - "title": "chore: introduce the turborepo to the parser.js", - "author": "ayushnau", - "resourcePath": "/asyncapi/parser-js/pull/992", - "repo": "asyncapi/parser-js", + "title": "fix: add the migration guide and nunjucks depreciation notes", + "author": "Gmin2", + "resourcePath": "/asyncapi/generator/pull/1253", + "repo": "asyncapi/generator", "labels": [], - "score": 14.358729437462937 + "score": 13.78438025996442 }, { - "id": "I_kwDOFi_gUM5hpuWl", + "id": "I_kwDODou01c5o2x-Z", "isPR": false, - "isAssigned": true, - "title": "Improve kafka adapter", - "author": "KhudaDad414", - "resourcePath": "/asyncapi/glee/issues/411", - "repo": "asyncapi/glee", + "isAssigned": false, + "title": "Start using a React framework", + "author": "fmvilas", + "resourcePath": "/asyncapi/studio/issues/661", + "repo": "asyncapi/studio", + "labels": [], + "score": 13.210031082465903 + }, + { + "id": "I_kwDOFLhIt85xI2wH", + "isPR": false, + "isAssigned": false, + "title": "Measure AsyncAPI Adoption", + "author": "fmvilas", + "resourcePath": "/asyncapi/community/issues/879", + "repo": "asyncapi/community", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "good first issue", - "color": "7057ff" - }, - { - "name": "area/typescript", - "color": "007acc" + "name": "stale", + "color": "ededed" } ], - "score": 13.78438025996442 + "score": 12.922856493716644 }, { - "id": "I_kwDODou01c5BZZv-", + "id": "I_kwDOBW5R_c5Pi3rO", "isPR": false, "isAssigned": false, - "title": "Open Graph link preview image according to the document to open", - "author": "smoya", - "resourcePath": "/asyncapi/studio/issues/224", - "repo": "asyncapi/studio", + "title": "Epic roadmap to the new AsyncAPI community section", + "author": "AceTheCreator", + "resourcePath": "/asyncapi/website/issues/903", + "repo": "asyncapi/website", "labels": [ { - "name": "enhancement", - "color": "a2eeef" + "name": "keep-open", + "color": "ffee84" }, { - "name": "keep-open", - "color": "f9dd4b" + "name": "🎨 design", + "color": "0D67D3" } ], - "score": 13.703040335770691 + "score": 11.073163907693488 }, { - "id": "I_kwDOFLhIt85bebeO", + "id": "I_kwDODwv8N86BkfYV", "isPR": false, "isAssigned": false, - "title": "Meeting Banners Storage", + "title": "Add Gallery Section to AACoT'24 Conference Website", + "author": "Mayaleeeee", + "resourcePath": "/asyncapi/conference-website/issues/264", + "repo": "asyncapi/conference-website", + "labels": [ + { + "name": "Hacktoberfest", + "color": "FF8AE2" + } + ], + "score": 10.912634372471834 + } + ], + "goodFirstIssues": [ + { + "id": "I_kwDODwv8N86bdV6Z", + "title": "Links in the Resources Hub Should Open in a New Window", + "isAssigned": false, + "resourcePath": "/asyncapi/conference-website/issues/434", + "repo": "asyncapi/conference-website", "author": "AceTheCreator", - "resourcePath": "/asyncapi/community/issues/568", + "area": "Unknown", + "labels": [ + { + "name": "Hacktoberfest", + "color": "FF8AE2" + } + ] + }, + { + "id": "I_kwDOFLhIt86bdQd-", + "title": "Add Proposed Project Ideas to Mentorship Directory", + "isAssigned": false, + "resourcePath": "/asyncapi/community/issues/1564", "repo": "asyncapi/community", - "labels": [], - "score": 13.497205671215161 + "author": "AceTheCreator", + "area": "Unknown", + "labels": [ + { + "name": "Hacktoberfest", + "color": "FF8AE2" + } + ] }, { - "id": "PR_kwDODou01c5r4UjU", - "isPR": true, + "id": "I_kwDOBW5R_c6aKzLD", + "title": "[FEATURE] Add coderabbit configuration to the repo", + "isAssigned": true, + "resourcePath": "/asyncapi/website/issues/3293", + "repo": "asyncapi/website", + "author": "akshatnema", + "area": "Unknown", + "labels": [ + { + "name": "enhancement", + "color": "84b6eb" + }, + { + "name": "Hacktoberfest", + "color": "FF8AE2" + } + ] + }, + { + "id": "I_kwDOCHlHJM6ZrKEr", + "title": "[📑 Docs]: Fix the relative paths of `index.md` & `migration.md` files.", "isAssigned": false, - "title": "fix: Enhancement of Visual Json Schema Editor", + "resourcePath": "/asyncapi/generator/issues/1294", + "repo": "asyncapi/generator", "author": "Gmin2", - "resourcePath": "/asyncapi/studio/pull/1065", - "repo": "asyncapi/studio", - "labels": [], - "score": 13.497205671215161 + "area": "Unknown", + "labels": [ + { + "name": "Hacktoberfest", + "color": "FF8AE2" + }, + { + "name": "📑 docs", + "color": "E50E99" + } + ] }, { - "id": "PR_kwDOFDnrNc5tl-_j", - "isPR": true, + "id": "I_kwDOCVQpZM6YZd4E", + "title": "A fragment with only one child is redundant.", "isAssigned": false, - "title": "test: replicate incorrect bundling and missing assertions part of #1323", - "author": "francocm", - "resourcePath": "/asyncapi/cli/pull/1389", - "repo": "asyncapi/cli", - "labels": [], - "score": 12.061332727468868 - } - ], - "goodFirstIssues": [ + "resourcePath": "/asyncapi/asyncapi-react/issues/1054", + "repo": "asyncapi/asyncapi-react", + "author": "AceTheCreator", + "area": "Unknown", + "labels": [ + { + "name": "Hacktoberfest", + "color": "FF8AE2" + } + ] + }, { - "id": "I_kwDOE8Qh386HJeIz", - "title": "[BUG] Implement avro schema data type ", + "id": "I_kwDOCVQpZM6YZc4E", + "title": "Remove this redundant \"undefined\"", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1974", - "repo": "asyncapi/modelina", - "author": "akkshitgupta", - "area": "typescript", + "resourcePath": "/asyncapi/asyncapi-react/issues/1053", + "repo": "asyncapi/asyncapi-react", + "author": "AceTheCreator", + "area": "Unknown", "labels": [ { - "name": "avro", - "color": "EC3D91" + "name": "Hacktoberfest", + "color": "FF8AE2" } ] }, { - "id": "I_kwDODwv8N86CASyz", - "title": "Card text is unreadable ", + "id": "I_kwDOCVQpZM6YZbiE", + "title": "Remove this redundant \"undefined\"", "isAssigned": false, - "resourcePath": "/asyncapi/conference-website/issues/266", - "repo": "asyncapi/conference-website", + "resourcePath": "/asyncapi/asyncapi-react/issues/1052", + "repo": "asyncapi/asyncapi-react", "author": "AceTheCreator", "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" + "name": "Hacktoberfest", + "color": "FF8AE2" } ] }, { - "id": "I_kwDOCxglSM6Bxg4I", - "title": "Convert OpenAPI 3.0 to AsyncAPI 3.0", - "isAssigned": true, - "resourcePath": "/asyncapi/converter-js/issues/233", - "repo": "asyncapi/converter-js", - "author": "jonaslagoni", - "area": "typescript", + "id": "I_kwDODwv8N86YYYFf", + "title": "Fix the way the ticket section is being rendered", + "isAssigned": false, + "resourcePath": "/asyncapi/conference-website/issues/395", + "repo": "asyncapi/conference-website", + "author": "AceTheCreator", + "area": "Unknown", "labels": [ { "name": "enhancement", "color": "a2eeef" }, { - "name": "keep-open", - "color": "f4d473" - }, - { - "name": "bounty", - "color": "0E8A16" + "name": "Hacktoberfest", + "color": "FF8AE2" } ] }, { - "id": "I_kwDOE8Qh385-gvCP", - "title": "Add \"generated-code\" XmlDoc and `[GeneratedCode]` attribute to C# models.", + "id": "I_kwDODwv8N86Vde8t", + "title": "Sponsor announcement design for social media", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1784", - "repo": "asyncapi/modelina", - "author": "RowlandBanks", - "area": "typescript", + "resourcePath": "/asyncapi/conference-website/issues/380", + "repo": "asyncapi/conference-website", + "author": "thulieblack", + "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, + "name": "design", + "color": "5D0F46" + } + ] + }, + { + "id": "I_kwDODwv8N86VdePb", + "title": "The conference countdown banner", + "isAssigned": false, + "resourcePath": "/asyncapi/conference-website/issues/378", + "repo": "asyncapi/conference-website", + "author": "thulieblack", + "area": "Unknown", + "labels": [ { - "name": "C# generator", - "color": "c5def5" + "name": "design", + "color": "5D0F46" } ] }, { - "id": "I_kwDOCHlHJM58YMi8", - "title": "Improve arborist (npm installation) to have no hacks", + "id": "I_kwDOBW5R_c6VIyCf", + "title": "[Docs Bug 🐞 report]: Broken link to Generator Github Actions", "isAssigned": false, - "resourcePath": "/asyncapi/generator/issues/1102", - "repo": "asyncapi/generator", - "author": "derberg", - "area": "javascript", + "resourcePath": "/asyncapi/website/issues/3190", + "repo": "asyncapi/website", + "author": "chinma-yyy", + "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, + "name": "🐞 docs bug", + "color": "FFD23F" + } + ] + }, + { + "id": "I_kwDOGQYLdM6VGsJA", + "title": "Design a Graphic for the Member Spotlight Post", + "isAssigned": false, + "resourcePath": "/asyncapi/brand/issues/108", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", + "area": "Unknown", + "labels": [ { - "name": "stale", - "color": "ededed" + "name": ":art: design", + "color": "0D67D3" } ] }, { - "id": "I_kwDOE8Qh38572pxu", - "title": "Add runtime tests for Dart", + "id": "I_kwDOGQYLdM6VAt9d", + "title": "Create \"Did You Know?\" Social Media Posts (3-4 Graphics)", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1744", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", + "resourcePath": "/asyncapi/brand/issues/107", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, + "name": "🎨 design", + "color": "0D67D3" + } + ] + }, + { + "id": "I_kwDOGQYLdM6VAsmz", + "title": "Create a Graphic for \"Ask Me Anything\" (AMA) Session Announcement", + "isAssigned": false, + "resourcePath": "/asyncapi/brand/issues/106", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", + "area": "Unknown", + "labels": [ { - "name": "Dart generator", - "color": "296FBA" + "name": "🎨 design", + "color": "0D67D3" } ] }, { - "id": "I_kwDOE8Qh38572gDd", - "title": "Add XSD support ", + "id": "I_kwDOGQYLdM6VArWv", + "title": "Design a Graphic for Mentorship Program Announcement", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1742", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "typescript", + "resourcePath": "/asyncapi/brand/issues/105", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", + "area": "design", + "labels": [] + }, + { + "id": "I_kwDOGQYLdM6VApSN", + "title": "Design a Graphic for Newsletter Promo", + "isAssigned": false, + "resourcePath": "/asyncapi/brand/issues/104", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", + "area": "design", + "labels": [] + }, + { + "id": "I_kwDOBW5R_c6U79Xr", + "title": "[Docs Bug 🐞 report]: Github handle link of alequetzalli is not working ", + "isAssigned": false, + "resourcePath": "/asyncapi/website/issues/3176", + "repo": "asyncapi/website", + "author": "NoIdea2001", + "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, + "name": "🐞 docs bug", + "color": "FFD23F" + } + ] + }, + { + "id": "I_kwDOFLhIt86O7jFN", + "title": "[DESIGN] Holopin Design Tracking", + "isAssigned": true, + "resourcePath": "/asyncapi/community/issues/1306", + "repo": "asyncapi/community", + "author": "Mayaleeeee", + "area": "design", + "labels": [ { - "name": "stale", - "color": "ededed" + "name": "🎨 design", + "color": "0D67D3" } ] }, { - "id": "I_kwDOE8Qh38572bME", - "title": "Add JSON Type definition support ", + "id": "I_kwDOE8Qh386HJeIz", + "title": "[BUG] Implement avro schema data type ", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1740", + "resourcePath": "/asyncapi/modelina/issues/1974", "repo": "asyncapi/modelina", - "author": "jonaslagoni", + "author": "akkshitgupta", "area": "typescript", "labels": [ { - "name": "enhancement", - "color": "a2eeef" + "name": "avro", + "color": "EC3D91" } ] }, { - "id": "I_kwDOE8Qh3857Kllp", - "title": "Add loading animation for when playground generate models ", + "id": "I_kwDOFDnrNc6Gp88n", + "title": " Implement new UI/UX improvements in start command", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1725", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", + "resourcePath": "/asyncapi/cli/issues/1384", + "repo": "asyncapi/cli", + "author": "Amzani", + "area": "typescript", + "labels": [] + }, + { + "id": "I_kwDOFDnrNc6Gp8Qd", + "title": " Implement new UI/UX improvements in config command", + "isAssigned": false, + "resourcePath": "/asyncapi/cli/issues/1380", + "repo": "asyncapi/cli", + "author": "Amzani", + "area": "typescript", + "labels": [] + }, + { + "id": "I_kwDOFDnrNc59gY4V", + "title": "Validate command output is polluted by noisy messages", + "isAssigned": false, + "resourcePath": "/asyncapi/cli/issues/1095", + "repo": "asyncapi/cli", + "author": "cykl", "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" + "name": "Hacktoberfest", + "color": "FF8AE2" }, { - "name": "website", - "color": "57A793" + "name": "bug", + "color": "d73a4a" } ] }, { - "id": "I_kwDOE8Qh3857KYj1", - "title": "Add input document for OpenAPI", + "id": "I_kwDOCHlHJM58YMi8", + "title": "Improve arborist (npm installation) to have no hacks", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1723", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "Unknown", + "resourcePath": "/asyncapi/generator/issues/1102", + "repo": "asyncapi/generator", + "author": "derberg", + "area": "javascript", "labels": [ { "name": "enhancement", "color": "a2eeef" - }, - { - "name": "stale", - "color": "ededed" - }, - { - "name": "📑 docs", - "color": "E50E99" } ] }, { - "id": "I_kwDOE8Qh3857KYQc", - "title": "Add input document for AsyncAPI", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1722", + "id": "I_kwDOE8Qh3857Kllp", + "title": "Add loading animation for when playground generate models ", + "isAssigned": true, + "resourcePath": "/asyncapi/modelina/issues/1725", "repo": "asyncapi/modelina", "author": "jonaslagoni", "area": "Unknown", @@ -370,12 +522,8 @@ "color": "a2eeef" }, { - "name": "stale", - "color": "ededed" - }, - { - "name": "📑 docs", - "color": "E50E99" + "name": "website", + "color": "57A793" } ] }, @@ -406,6 +554,10 @@ { "name": "enhancement", "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" } ] }, @@ -417,7 +569,27 @@ "repo": "asyncapi/studio", "author": "princerajpoot20", "area": "typescript", - "labels": [] + "labels": [ + { + "name": "stale", + "color": "ededed" + } + ] + }, + { + "id": "I_kwDOFDnrNc50wZMh", + "title": "Add support for proxy", + "isAssigned": false, + "resourcePath": "/asyncapi/cli/issues/862", + "repo": "asyncapi/cli", + "author": "mamyn0va", + "area": "typescript", + "labels": [ + { + "name": "enhancement", + "color": "a2eeef" + } + ] }, { "id": "I_kwDOCoBobc5zovn3", @@ -431,6 +603,10 @@ { "name": "bug", "color": "d73a4a" + }, + { + "name": "stale", + "color": "ededed" } ] }, @@ -454,21 +630,32 @@ ] }, { - "id": "I_kwDODwv8N85yh95N", - "title": "would be nice if venue from past events is grayed out", + "id": "I_kwDOFDnrNc5xaTa3", + "title": "Parallel execution command asyncapi generate got error", "isAssigned": false, - "resourcePath": "/asyncapi/conference-website/issues/208", - "repo": "asyncapi/conference-website", - "author": "derberg", - "area": "javascript", + "resourcePath": "/asyncapi/cli/issues/814", + "repo": "asyncapi/cli", + "author": "Zacama", + "area": "Unknown", + "labels": [ + { + "name": "bug", + "color": "d73a4a" + } + ] + }, + { + "id": "I_kwDOFDnrNc5wmQBl", + "title": "Need to Consider the Case Senstive feature in CLI while creating new file.", + "isAssigned": false, + "resourcePath": "/asyncapi/cli/issues/790", + "repo": "asyncapi/cli", + "author": "AayushSaini101", + "area": "typescript", "labels": [ { "name": "enhancement", "color": "a2eeef" - }, - { - "name": "Hacktoberfest", - "color": "FF8AE2" } ] }, @@ -484,6 +671,10 @@ { "name": "bug", "color": "d73a4a" + }, + { + "name": "stale", + "color": "ededed" } ] }, @@ -518,6 +709,10 @@ { "name": "bug", "color": "d73a4a" + }, + { + "name": "stale", + "color": "ededed" } ] }, @@ -586,13 +781,17 @@ { "name": "enhancement", "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" } ] }, { "id": "I_kwDOBW5R_c5eFaBF", "title": "Add proper dropdowns to the Filters Select Menu", - "isAssigned": false, + "isAssigned": true, "resourcePath": "/asyncapi/website/issues/1318", "repo": "asyncapi/website", "author": "akshatnema", @@ -662,25 +861,10 @@ { "name": "enhancement", "color": "a2eeef" - } - ] - }, - { - "id": "I_kwDOBW5R_c5dfidP", - "title": "docs: new style guide - Glossary", - "isAssigned": true, - "resourcePath": "/asyncapi/website/issues/1294", - "repo": "asyncapi/website", - "author": "alequetzalli", - "area": "docs", - "labels": [ + }, { "name": "stale", "color": "ededed" - }, - { - "name": "📑 docs", - "color": "E50E99" } ] }, @@ -764,6 +948,25 @@ } ] }, + { + "id": "I_kwDOFiHaLM5DeQ4y", + "title": "Add support for HTML output", + "isAssigned": false, + "resourcePath": "/asyncapi/diff/issues/85", + "repo": "asyncapi/diff", + "author": "aayushmau5", + "area": "Unknown", + "labels": [ + { + "name": "enhancement", + "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" + } + ] + }, { "id": "I_kwDOBW5R_c48lGJg", "title": "Add visual on the \"generator\" and maybe others....", @@ -771,7 +974,7 @@ "resourcePath": "/asyncapi/website/issues/403", "repo": "asyncapi/website", "author": "boyney123", - "area": "typescript", + "area": "design", "labels": [ { "name": "enhancement", From 10fab1c72b68e3a96ce6452e03323bfbbaa74ae1 Mon Sep 17 00:00:00 2001 From: Ansh Goyal Date: Wed, 23 Oct 2024 17:59:08 +0530 Subject: [PATCH 18/32] fix: fix testing workflow ref for branch pushes (#3320) --- .github/workflows/if-nodejs-pr-testing.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/if-nodejs-pr-testing.yml b/.github/workflows/if-nodejs-pr-testing.yml index a0fb664221c..d5489e7ab8f 100644 --- a/.github/workflows/if-nodejs-pr-testing.yml +++ b/.github/workflows/if-nodejs-pr-testing.yml @@ -43,7 +43,9 @@ jobs: name: Checkout repository uses: actions/checkout@v4 with: - ref: refs/pull/${{ github.event.pull_request.number }}/merge + # Checkout the merge commit instead of the pull request head commit for a pull request + # Fallback to the head commit if its not a pull request + ref: ${{ github.event.pull_request.number != '' && format('refs/pull/{0}/merge', github.event.pull_request.number) || github.ref }} - if: steps.should_run.outputs.shouldrun == 'true' name: Check if Node.js project and has package.json From 4f813d04eb7847eb06142b9bf1a049a270e51934 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 24 Oct 2024 08:03:26 +0200 Subject: [PATCH 19/32] docs(cli): update latest cli documentation (#3322) --- markdown/docs/tools/cli/usage.md | 52 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/markdown/docs/tools/cli/usage.md b/markdown/docs/tools/cli/usage.md index d4cae23662b..8b0f4669705 100644 --- a/markdown/docs/tools/cli/usage.md +++ b/markdown/docs/tools/cli/usage.md @@ -27,7 +27,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/2.7.1 linux-x64 node-v18.20.4 +@asyncapi/cli/2.7.2 linux-x64 node-v18.20.4 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -99,7 +99,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml -o final-asyncapi.yaml --base ../public-api/main.yaml --baseDir ./social-media/comments-service ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/bundle.ts)_ ## `asyncapi config` @@ -113,7 +113,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/index.ts)_ ## `asyncapi config analytics` @@ -133,7 +133,7 @@ DESCRIPTION Enable or disable analytics for metrics collection ``` -_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/analytics.ts)_ +_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/analytics.ts)_ ## `asyncapi config context` @@ -147,7 +147,7 @@ DESCRIPTION Manage short aliases for full paths to AsyncAPI documents ``` -_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/index.ts)_ +_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/index.ts)_ ## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH` @@ -169,7 +169,7 @@ DESCRIPTION Add a context to the store ``` -_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/add.ts)_ +_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/add.ts)_ ## `asyncapi config context current` @@ -186,7 +186,7 @@ DESCRIPTION Shows the current context that is being used ``` -_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/current.ts)_ +_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/current.ts)_ ## `asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH` @@ -207,7 +207,7 @@ DESCRIPTION Edit a context in the store ``` -_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/edit.ts)_ +_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/edit.ts)_ ## `asyncapi config context init [CONTEXT-FILE-PATH]` @@ -230,7 +230,7 @@ DESCRIPTION Initialize context ``` -_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/init.ts)_ +_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/init.ts)_ ## `asyncapi config context list` @@ -247,7 +247,7 @@ DESCRIPTION List all the stored contexts in the store ``` -_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/list.ts)_ +_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/list.ts)_ ## `asyncapi config context remove CONTEXT-NAME` @@ -267,7 +267,7 @@ DESCRIPTION Delete a context from the store ``` -_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/remove.ts)_ +_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/remove.ts)_ ## `asyncapi config context use CONTEXT-NAME` @@ -287,7 +287,7 @@ DESCRIPTION Set a context as current ``` -_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/context/use.ts)_ +_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/use.ts)_ ## `asyncapi config versions` @@ -304,7 +304,7 @@ DESCRIPTION Show versions of AsyncAPI tools used ``` -_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/config/versions.ts)_ +_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/versions.ts)_ ## `asyncapi convert [SPEC-FILE]` @@ -332,7 +332,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions or OpenAPI/postman-collection documents to AsyncAPI ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -372,7 +372,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/diff.ts)_ ## `asyncapi generate` @@ -386,7 +386,7 @@ DESCRIPTION Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates. ``` -_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -431,7 +431,7 @@ EXAMPLES $ asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template --param version=1.0.0 singleFile=true --output ./docs --force-write ``` -_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/generate/fromTemplate.ts)_ +_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/generate/fromTemplate.ts)_ ## `asyncapi generate models LANGUAGE FILE` @@ -502,7 +502,7 @@ DESCRIPTION Generates typed models ``` -_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/generate/models.ts)_ +_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/generate/models.ts)_ ## `asyncapi new` @@ -560,7 +560,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -618,7 +618,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/new/file.ts)_ +_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/new/file.ts)_ ## `asyncapi new glee` @@ -640,7 +640,7 @@ DESCRIPTION Creates a new Glee project ``` -_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/new/glee.ts)_ +_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/new/glee.ts)_ ## `asyncapi new template` @@ -664,7 +664,7 @@ DESCRIPTION Creates a new template ``` -_See code: [src/commands/new/template.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/new/template.ts)_ +_See code: [src/commands/new/template.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/new/template.ts)_ ## `asyncapi optimize [SPEC-FILE]` @@ -706,7 +706,7 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --ignore=schema ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/optimize.ts)_ ## `asyncapi start` @@ -720,7 +720,7 @@ DESCRIPTION Starts AsyncAPI-related services. Currently, it supports launching the AsyncAPI Studio ``` -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/start/index.ts)_ +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -739,7 +739,7 @@ DESCRIPTION starts a new local instance of Studio ``` -_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/start/studio.ts)_ +_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/start/studio.ts)_ ## `asyncapi validate [SPEC-FILE]` @@ -769,5 +769,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.7.1/src/commands/validate.ts)_ +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/validate.ts)_ From 1a1d9402a546c75a74080c21b077126fd0d01ede Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 24 Oct 2024 15:11:39 +0200 Subject: [PATCH 20/32] docs(cli): update latest cli documentation (#3324) --- markdown/docs/tools/cli/usage.md | 52 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/markdown/docs/tools/cli/usage.md b/markdown/docs/tools/cli/usage.md index 8b0f4669705..a8d86b446bc 100644 --- a/markdown/docs/tools/cli/usage.md +++ b/markdown/docs/tools/cli/usage.md @@ -27,7 +27,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/2.7.2 linux-x64 node-v18.20.4 +@asyncapi/cli/2.7.3 linux-x64 node-v18.20.4 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -99,7 +99,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml -o final-asyncapi.yaml --base ../public-api/main.yaml --baseDir ./social-media/comments-service ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/bundle.ts)_ ## `asyncapi config` @@ -113,7 +113,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/index.ts)_ ## `asyncapi config analytics` @@ -133,7 +133,7 @@ DESCRIPTION Enable or disable analytics for metrics collection ``` -_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/analytics.ts)_ +_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/analytics.ts)_ ## `asyncapi config context` @@ -147,7 +147,7 @@ DESCRIPTION Manage short aliases for full paths to AsyncAPI documents ``` -_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/index.ts)_ +_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/index.ts)_ ## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH` @@ -169,7 +169,7 @@ DESCRIPTION Add a context to the store ``` -_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/add.ts)_ +_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/add.ts)_ ## `asyncapi config context current` @@ -186,7 +186,7 @@ DESCRIPTION Shows the current context that is being used ``` -_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/current.ts)_ +_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/current.ts)_ ## `asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH` @@ -207,7 +207,7 @@ DESCRIPTION Edit a context in the store ``` -_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/edit.ts)_ +_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/edit.ts)_ ## `asyncapi config context init [CONTEXT-FILE-PATH]` @@ -230,7 +230,7 @@ DESCRIPTION Initialize context ``` -_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/init.ts)_ +_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/init.ts)_ ## `asyncapi config context list` @@ -247,7 +247,7 @@ DESCRIPTION List all the stored contexts in the store ``` -_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/list.ts)_ +_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/list.ts)_ ## `asyncapi config context remove CONTEXT-NAME` @@ -267,7 +267,7 @@ DESCRIPTION Delete a context from the store ``` -_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/remove.ts)_ +_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/remove.ts)_ ## `asyncapi config context use CONTEXT-NAME` @@ -287,7 +287,7 @@ DESCRIPTION Set a context as current ``` -_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/context/use.ts)_ +_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/use.ts)_ ## `asyncapi config versions` @@ -304,7 +304,7 @@ DESCRIPTION Show versions of AsyncAPI tools used ``` -_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/config/versions.ts)_ +_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/versions.ts)_ ## `asyncapi convert [SPEC-FILE]` @@ -332,7 +332,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions or OpenAPI/postman-collection documents to AsyncAPI ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -372,7 +372,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/diff.ts)_ ## `asyncapi generate` @@ -386,7 +386,7 @@ DESCRIPTION Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates. ``` -_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -431,7 +431,7 @@ EXAMPLES $ asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template --param version=1.0.0 singleFile=true --output ./docs --force-write ``` -_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/generate/fromTemplate.ts)_ +_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/generate/fromTemplate.ts)_ ## `asyncapi generate models LANGUAGE FILE` @@ -502,7 +502,7 @@ DESCRIPTION Generates typed models ``` -_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/generate/models.ts)_ +_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/generate/models.ts)_ ## `asyncapi new` @@ -560,7 +560,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -618,7 +618,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/new/file.ts)_ +_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/new/file.ts)_ ## `asyncapi new glee` @@ -640,7 +640,7 @@ DESCRIPTION Creates a new Glee project ``` -_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/new/glee.ts)_ +_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/new/glee.ts)_ ## `asyncapi new template` @@ -664,7 +664,7 @@ DESCRIPTION Creates a new template ``` -_See code: [src/commands/new/template.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/new/template.ts)_ +_See code: [src/commands/new/template.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/new/template.ts)_ ## `asyncapi optimize [SPEC-FILE]` @@ -706,7 +706,7 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --ignore=schema ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/optimize.ts)_ ## `asyncapi start` @@ -720,7 +720,7 @@ DESCRIPTION Starts AsyncAPI-related services. Currently, it supports launching the AsyncAPI Studio ``` -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/start/index.ts)_ +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -739,7 +739,7 @@ DESCRIPTION starts a new local instance of Studio ``` -_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/start/studio.ts)_ +_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/start/studio.ts)_ ## `asyncapi validate [SPEC-FILE]` @@ -769,5 +769,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.7.2/src/commands/validate.ts)_ +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/validate.ts)_ From bb69a47b082597f06180f7714c315c52dcdbdae9 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Fri, 25 Oct 2024 02:36:55 +0200 Subject: [PATCH 21/32] chore: update meetings.json and newsrooom_videos.json (#3326) --- config/meetings.json | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/config/meetings.json b/config/meetings.json index 4fbe2b0b8e2..850bac956a6 100644 --- a/config/meetings.json +++ b/config/meetings.json @@ -1,11 +1,4 @@ [ - { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=M2pxNGNwZnRqNGpjcDg2cXVnc3VqZ2wwMHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1294", - "banner": "", - "date": "2024-07-16T18:00:00.000Z" - }, { "title": "Community Meeting", "calLink": "https://www.google.com/calendar/event?eid=am5kcG50YW9obGUzcmVucWZqMTQ4NDlsbjQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", @@ -13,13 +6,6 @@ "banner": "https://github.com/asyncapi/community/assets/40604284/65376079-c5e8-467d-b513-21dfaba4570f", "date": "2024-07-23T16:00:00.000Z" }, - { - "title": "Marketing WG Meeting", - "calLink": "https://www.google.com/calendar/event?eid=Z3NzN2JvcjdnY2diMnJpczA4dWMxMGh2ZGcgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1309", - "banner": "", - "date": "2024-07-16T14:00:00.000Z" - }, { "title": "Marketing WG Meeting", "calLink": "https://www.google.com/calendar/event?eid=b2twOWkyZ3ExcGxnYnAxbzBobzA1MWxvcW8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", @@ -159,5 +145,12 @@ "url": "https://github.com/asyncapi/community/issues/1562", "banner": "", "date": "2024-10-30T10:00:00.000Z" + }, + { + "title": "Conference Dry Run", + "calLink": "https://www.google.com/calendar/event?eid=ZmR1c25lZG1wc2swOWloNDd2c2VudWc5OTggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1566", + "banner": "", + "date": "2024-10-28T16:00:00.000Z" } ] \ No newline at end of file From 67aafb6fd59030cf57e3b43da4d047c1ff3323ea Mon Sep 17 00:00:00 2001 From: Varun Kolanu Date: Fri, 25 Oct 2024 22:31:59 +0530 Subject: [PATCH 22/32] fix: make the edit page on github point to correct resource (#3327) --- config/edit-page-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/edit-page-config.json b/config/edit-page-config.json index dbd5fa50b9e..32921f145d4 100644 --- a/config/edit-page-config.json +++ b/config/edit-page-config.json @@ -13,7 +13,7 @@ }, { "value": "", - "href": "https://github.com/asyncapi/website/blob/master/pages" + "href": "https://github.com/asyncapi/website/blob/master/markdown" }, { "value": "reference/extensions/", From 6ae313db852ec1aaf4c5a42810d904f9a4438534 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 26 Oct 2024 02:39:51 +0200 Subject: [PATCH 23/32] chore: update meetings.json and newsrooom_videos.json (#3329) --- dashboard.json | 55 +++++++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/dashboard.json b/dashboard.json index 1b19808d255..2c675544b9a 100644 --- a/dashboard.json +++ b/dashboard.json @@ -27,6 +27,17 @@ "labels": [], "score": 19.527872034949596 }, + { + "id": "PR_kwDOBW5R_c52BRgf", + "isPR": true, + "isAssigned": false, + "title": "feat: added test for build-rss.js", + "author": "vishvamsinh28", + "resourcePath": "/asyncapi/website/pull/3101", + "repo": "asyncapi/website", + "labels": [], + "score": 19.240697446200336 + }, { "id": "PR_kwDOFLhIt85oVQqh", "isPR": true, @@ -38,17 +49,6 @@ "labels": [], "score": 18.37917367995256 }, - { - "id": "PR_kwDOBW5R_c52BRgf", - "isPR": true, - "isAssigned": false, - "title": "feat: added test for build-rss.js", - "author": "vishvamsinh28", - "resourcePath": "/asyncapi/website/pull/3101", - "repo": "asyncapi/website", - "labels": [], - "score": 17.517649913704783 - }, { "id": "I_kwDOGQYLdM5AX1lK", "isPR": false, @@ -67,7 +67,7 @@ "color": "0E8A16" } ], - "score": 15.794602381209232 + "score": 16.08177696995849 }, { "id": "PR_kwDOFLhIt853IEwA", @@ -129,26 +129,6 @@ ], "score": 12.922856493716644 }, - { - "id": "I_kwDOBW5R_c5Pi3rO", - "isPR": false, - "isAssigned": false, - "title": "Epic roadmap to the new AsyncAPI community section", - "author": "AceTheCreator", - "resourcePath": "/asyncapi/website/issues/903", - "repo": "asyncapi/website", - "labels": [ - { - "name": "keep-open", - "color": "ffee84" - }, - { - "name": "🎨 design", - "color": "0D67D3" - } - ], - "score": 11.073163907693488 - }, { "id": "I_kwDODwv8N86BkfYV", "isPR": false, @@ -164,6 +144,17 @@ } ], "score": 10.912634372471834 + }, + { + "id": "PR_kwDOFLhIt85bqKL8", + "isPR": true, + "isAssigned": false, + "title": "docs: add Bounty Program Rules", + "author": "aeworxet", + "resourcePath": "/asyncapi/community/pull/897", + "repo": "asyncapi/community", + "labels": [], + "score": 10.657920261154981 } ], "goodFirstIssues": [ From 0cc300d86580643bc4c4087cc4fa543898b2d2cb Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela <90895835+vishvamsinh28@users.noreply.github.com> Date: Sat, 26 Oct 2024 23:57:16 +0530 Subject: [PATCH 24/32] fix: file write errors for tools and newsroom video (#3297) Co-authored-by: Ansh Goyal --- package-lock.json | 124 ++++++++-------------------- package.json | 1 + scripts/build-newsroom-videos.js | 4 +- scripts/build-tools.js | 7 +- tests/build-newsroom-videos.test.js | 14 ++-- tests/build-tools.test.js | 18 ++-- 6 files changed, 59 insertions(+), 109 deletions(-) diff --git a/package-lock.json b/package-lock.json index bea2b1cc43e..3e06c5cffdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "clsx": "^2.1.0", "cssnano": "^6.0.3", "dotenv": "^16.4.4", + "fs-extra": "^11.2.0", "fuse.js": "^7.0.0", "googleapis": "^133.0.0", "gray-matter": "^4.0.3", @@ -4697,20 +4698,6 @@ "unstorage": "1.9.0" } }, - "node_modules/@netlify/ipx/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/@netlify/ipx/node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -4787,6 +4774,21 @@ "node": ">=14.0.0" } }, + "node_modules/@netlify/plugin-nextjs/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@netlify/plugin-nextjs/node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -6253,20 +6255,6 @@ "storybook": "^8.2.9" } }, - "node_modules/@storybook/addon-docs/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/@storybook/addon-essentials": { "version": "8.2.9", "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.2.9.tgz", @@ -6526,20 +6514,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/@storybook/builder-webpack5/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/@storybook/codemod": { "version": "8.2.9", "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.2.9.tgz", @@ -6829,20 +6803,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/@storybook/nextjs/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/@storybook/preset-react-webpack": { "version": "8.2.9", "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.2.9.tgz", @@ -6890,20 +6850,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/@storybook/preset-react-webpack/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/@storybook/preview-api": { "version": "8.2.9", "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.2.9.tgz", @@ -14227,6 +14173,21 @@ "concat-map": "0.0.1" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -14339,17 +14300,17 @@ "dev": true }, "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.14" } }, "node_modules/fs-minipass": { @@ -27097,19 +27058,6 @@ "node": ">= 6" } }, - "node_modules/storybook/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/storybook/node_modules/globby": { "version": "14.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", diff --git a/package.json b/package.json index 29269ed3e1d..3885874ae36 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "clsx": "^2.1.0", "cssnano": "^6.0.3", "dotenv": "^16.4.4", + "fs-extra": "^11.2.0", "fuse.js": "^7.0.0", "googleapis": "^133.0.0", "gray-matter": "^4.0.3", diff --git a/scripts/build-newsroom-videos.js b/scripts/build-newsroom-videos.js index b67ee0378cf..383927765d3 100644 --- a/scripts/build-newsroom-videos.js +++ b/scripts/build-newsroom-videos.js @@ -1,4 +1,4 @@ -const { writeFileSync } = require('fs'); +const { writeFileSync } = require('fs-extra'); const { resolve } = require('path'); const fetch = require('node-fetch-2'); @@ -19,7 +19,7 @@ async function buildNewsroomVideos(writePath) { } const data = await response.json(); - console.log(data) + console.log(data); if (!data.items || !Array.isArray(data.items)) { throw new Error('Invalid data structure received from YouTube API'); diff --git a/scripts/build-tools.js b/scripts/build-tools.js index 84965815dcc..c5cce74a7cb 100644 --- a/scripts/build-tools.js +++ b/scripts/build-tools.js @@ -1,7 +1,7 @@ const { getData } = require('./tools/extract-tools-github'); const { convertTools } = require('./tools/tools-object'); const { combineTools } = require('./tools/combine-tools'); -const fs = require('fs'); +const fs = require('fs-extra'); const { resolve } = require('path'); const buildTools = async (automatedToolsPath, manualToolsPath, toolsPath, tagsPath) => { @@ -9,10 +9,7 @@ const buildTools = async (automatedToolsPath, manualToolsPath, toolsPath, tagsPa let githubExtractData = await getData(); let automatedTools = await convertTools(githubExtractData); - fs.writeFileSync( - automatedToolsPath, - JSON.stringify(automatedTools, null, ' ') - ); + await fs.writeFile(automatedToolsPath, JSON.stringify(automatedTools, null, ' ')); await combineTools(automatedTools, require(manualToolsPath), toolsPath, tagsPath); } catch (err) { diff --git a/tests/build-newsroom-videos.test.js b/tests/build-newsroom-videos.test.js index 63f57146694..494f91f2734 100644 --- a/tests/build-newsroom-videos.test.js +++ b/tests/build-newsroom-videos.test.js @@ -1,22 +1,23 @@ -const { readFileSync, rmSync, mkdirSync } = require('fs'); -const { resolve } = require('path'); +const { readFileSync, removeSync, mkdirpSync } = require('fs-extra'); +const { resolve, join } = require('path'); const { buildNewsroomVideos } = require('../scripts/build-newsroom-videos'); const { mockApiResponse, expectedResult } = require('./fixtures/newsroomData'); const fetch = require('node-fetch-2'); +const os = require('os'); jest.mock('node-fetch-2', () => jest.fn()); describe('buildNewsroomVideos', () => { - const testDir = resolve(__dirname, 'test_config'); + const testDir = join(os.tmpdir(), 'test_config'); const testFilePath = resolve(testDir, 'newsroom_videos.json'); beforeAll(() => { - mkdirSync(testDir, { recursive: true }); + mkdirpSync(testDir); process.env.YOUTUBE_TOKEN = 'testkey'; }); afterAll(() => { - rmSync(testDir, { recursive: true, force: true }); + removeSync(testDir); }); beforeEach(() => { @@ -89,7 +90,7 @@ describe('buildNewsroomVideos', () => { json: jest.fn().mockResolvedValue(mockApiResponse), }); - const invalidPath = '/invalid_dir/newsroom_videos.json'; + const invalidPath = resolve(os.tmpdir(), 'invalid_dir', 'newsroom_videos.json'); try { await buildNewsroomVideos(invalidPath); @@ -97,5 +98,4 @@ describe('buildNewsroomVideos', () => { expect(err.message).toMatch(/ENOENT|EACCES/); } }); - }); diff --git a/tests/build-tools.test.js b/tests/build-tools.test.js index 2bc4592e8e1..74524ddb977 100644 --- a/tests/build-tools.test.js +++ b/tests/build-tools.test.js @@ -2,7 +2,9 @@ const axios = require('axios'); const { resolve } = require('path'); const { buildTools } = require('../scripts/build-tools'); const { tagsData, manualTools, mockConvertedData, mockExtractData } = require('../tests/fixtures/buildToolsData'); -const fs = require('fs'); +const fs = require('fs-extra'); +const os = require('os'); +const path = require('path'); jest.mock('axios'); jest.mock('../scripts/tools/categorylist', () => ({ @@ -24,19 +26,22 @@ jest.mock('../scripts/tools/tags-color', () => ({ })); describe('buildTools', () => { - const testDir = resolve(__dirname, 'test_config'); + const testDir = path.join(os.tmpdir(), 'test_config'); const toolsPath = resolve(testDir, 'tools.json'); const tagsPath = resolve(testDir, 'all-tags.json'); const automatedToolsPath = resolve(testDir, 'tools-automated.json'); const manualToolsPath = resolve(testDir, 'tools-manual.json'); + let consoleErrorMock; beforeAll(() => { - fs.mkdirSync(testDir, { recursive: true }); - fs.writeFileSync(manualToolsPath, JSON.stringify(manualTools)); + consoleErrorMock = jest.spyOn(console, 'error').mockImplementation(() => {}); + fs.ensureDirSync(testDir); + fs.outputFileSync(manualToolsPath, JSON.stringify(manualTools)); }); afterAll(() => { - fs.rmSync(testDir, { recursive: true, force: true }); + fs.removeSync(testDir); + consoleErrorMock.mockRestore(); }); beforeEach(() => { @@ -62,7 +67,6 @@ describe('buildTools', () => { expect(combinedToolsContent["Category2"].description).toEqual(mockConvertedData["Category2"].description); expect(tagsContent).toEqual(tagsData); - }); it('should handle getData error', async () => { @@ -78,7 +82,7 @@ describe('buildTools', () => { it('should handle file write errors', async () => { axios.get.mockResolvedValue({ data: mockExtractData }); - const invalidPath = '/invalid_dir/tools.json'; + const invalidPath = path.resolve(os.tmpdir(), 'invalid_dir', 'tools.json'); try { await buildTools(invalidPath, manualToolsPath, toolsPath, tagsPath); From 90caba9e955b96cdd2f599a347fd37b19b1f7c25 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela <90895835+vishvamsinh28@users.noreply.github.com> Date: Sun, 27 Oct 2024 00:07:56 +0530 Subject: [PATCH 25/32] feat: exclude scripts with import errors (#3285) Co-authored-by: Ansh Goyal --- jest.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/jest.config.js b/jest.config.js index 9d370a6bb76..39211f19dc4 100644 --- a/jest.config.js +++ b/jest.config.js @@ -4,6 +4,7 @@ module.exports = { coverageReporters: ['text', 'lcov', 'json-summary'], coverageDirectory: 'coverage', collectCoverageFrom: ['scripts/**/*.js'], + coveragePathIgnorePatterns: ['scripts/compose.js'], // To disallow netlify edge function tests from running testMatch: ['**/tests/**/*.test.*', '!**/netlify/**/*.test.*'], }; \ No newline at end of file From c9ef36daa9e8ec2dc058746f3ce6eee52c0d7cba Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sun, 27 Oct 2024 02:40:21 +0200 Subject: [PATCH 26/32] chore: update meetings.json and newsrooom_videos.json (#3332) --- config/meetings.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/config/meetings.json b/config/meetings.json index 850bac956a6..06ad36dae20 100644 --- a/config/meetings.json +++ b/config/meetings.json @@ -152,5 +152,12 @@ "url": "https://github.com/asyncapi/community/issues/1566", "banner": "", "date": "2024-10-28T16:00:00.000Z" + }, + { + "title": "AsyncAPI + WebSocket: The Collaborative Combo ", + "calLink": "https://www.google.com/calendar/event?eid=bGo4aXNjNzg3Ym5tbWRtb2wxZ2ZuMmtxN2sgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1569", + "banner": "https://github.com/user-attachments/assets/0cdfc741-e61d-4710-bb0a-af9f7485ff9a", + "date": "2024-11-01T13:00:00.000Z" } ] \ No newline at end of file From 5c11eb089d9fb4e82156adb08754443da5a039b2 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sun, 27 Oct 2024 12:29:40 +0100 Subject: [PATCH 27/32] docs(cli): update latest cli documentation (#3333) --- markdown/docs/tools/cli/usage.md | 52 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/markdown/docs/tools/cli/usage.md b/markdown/docs/tools/cli/usage.md index a8d86b446bc..98ccd5e79dd 100644 --- a/markdown/docs/tools/cli/usage.md +++ b/markdown/docs/tools/cli/usage.md @@ -27,7 +27,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/2.7.3 linux-x64 node-v18.20.4 +@asyncapi/cli/2.7.4 linux-x64 node-v18.20.4 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -99,7 +99,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml -o final-asyncapi.yaml --base ../public-api/main.yaml --baseDir ./social-media/comments-service ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/bundle.ts)_ ## `asyncapi config` @@ -113,7 +113,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/index.ts)_ ## `asyncapi config analytics` @@ -133,7 +133,7 @@ DESCRIPTION Enable or disable analytics for metrics collection ``` -_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/analytics.ts)_ +_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/analytics.ts)_ ## `asyncapi config context` @@ -147,7 +147,7 @@ DESCRIPTION Manage short aliases for full paths to AsyncAPI documents ``` -_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/index.ts)_ +_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/context/index.ts)_ ## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH` @@ -169,7 +169,7 @@ DESCRIPTION Add a context to the store ``` -_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/add.ts)_ +_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/context/add.ts)_ ## `asyncapi config context current` @@ -186,7 +186,7 @@ DESCRIPTION Shows the current context that is being used ``` -_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/current.ts)_ +_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/context/current.ts)_ ## `asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH` @@ -207,7 +207,7 @@ DESCRIPTION Edit a context in the store ``` -_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/edit.ts)_ +_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/context/edit.ts)_ ## `asyncapi config context init [CONTEXT-FILE-PATH]` @@ -230,7 +230,7 @@ DESCRIPTION Initialize context ``` -_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/init.ts)_ +_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/context/init.ts)_ ## `asyncapi config context list` @@ -247,7 +247,7 @@ DESCRIPTION List all the stored contexts in the store ``` -_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/list.ts)_ +_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/context/list.ts)_ ## `asyncapi config context remove CONTEXT-NAME` @@ -267,7 +267,7 @@ DESCRIPTION Delete a context from the store ``` -_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/remove.ts)_ +_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/context/remove.ts)_ ## `asyncapi config context use CONTEXT-NAME` @@ -287,7 +287,7 @@ DESCRIPTION Set a context as current ``` -_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/context/use.ts)_ +_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/context/use.ts)_ ## `asyncapi config versions` @@ -304,7 +304,7 @@ DESCRIPTION Show versions of AsyncAPI tools used ``` -_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/config/versions.ts)_ +_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/config/versions.ts)_ ## `asyncapi convert [SPEC-FILE]` @@ -332,7 +332,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions or OpenAPI/postman-collection documents to AsyncAPI ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -372,7 +372,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/diff.ts)_ ## `asyncapi generate` @@ -386,7 +386,7 @@ DESCRIPTION Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates. ``` -_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -431,7 +431,7 @@ EXAMPLES $ asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template --param version=1.0.0 singleFile=true --output ./docs --force-write ``` -_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/generate/fromTemplate.ts)_ +_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/generate/fromTemplate.ts)_ ## `asyncapi generate models LANGUAGE FILE` @@ -502,7 +502,7 @@ DESCRIPTION Generates typed models ``` -_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/generate/models.ts)_ +_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/generate/models.ts)_ ## `asyncapi new` @@ -560,7 +560,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -618,7 +618,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/new/file.ts)_ +_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/new/file.ts)_ ## `asyncapi new glee` @@ -640,7 +640,7 @@ DESCRIPTION Creates a new Glee project ``` -_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/new/glee.ts)_ +_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/new/glee.ts)_ ## `asyncapi new template` @@ -664,7 +664,7 @@ DESCRIPTION Creates a new template ``` -_See code: [src/commands/new/template.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/new/template.ts)_ +_See code: [src/commands/new/template.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/new/template.ts)_ ## `asyncapi optimize [SPEC-FILE]` @@ -706,7 +706,7 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --ignore=schema ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/optimize.ts)_ ## `asyncapi start` @@ -720,7 +720,7 @@ DESCRIPTION Starts AsyncAPI-related services. Currently, it supports launching the AsyncAPI Studio ``` -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/start/index.ts)_ +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -739,7 +739,7 @@ DESCRIPTION starts a new local instance of Studio ``` -_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/start/studio.ts)_ +_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/start/studio.ts)_ ## `asyncapi validate [SPEC-FILE]` @@ -769,5 +769,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.7.3/src/commands/validate.ts)_ +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v2.7.4/src/commands/validate.ts)_ From fd48c6a6489f74345ebbd7a27a23da1ec11012e2 Mon Sep 17 00:00:00 2001 From: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> Date: Sun, 27 Oct 2024 19:27:35 +0200 Subject: [PATCH 28/32] feat: create banner for online conf (#3312) Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com>%0ACo-authored-by: akshatnema %0ACo-authored-by: Ansh Goyal --- components/campaigns/AnnouncementHero.tsx | 49 +++++++++++------------ components/campaigns/banners.ts | 20 ++++----- 2 files changed, 31 insertions(+), 38 deletions(-) diff --git a/components/campaigns/AnnouncementHero.tsx b/components/campaigns/AnnouncementHero.tsx index 61ffb47b85e..bee864e495c 100644 --- a/components/campaigns/AnnouncementHero.tsx +++ b/components/campaigns/AnnouncementHero.tsx @@ -1,10 +1,10 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import ArrowLeft from '../icons/ArrowLeft'; import ArrowRight from '../icons/ArrowRight'; import Container from '../layout/Container'; import Banner from './AnnouncementBanner'; -import { banners } from './banners'; +import { banners, shouldShowBanner } from './banners'; interface IAnnouncementHeroProps { className?: string; @@ -21,15 +21,15 @@ interface IAnnouncementHeroProps { export default function AnnouncementHero({ className = '', small = false }: IAnnouncementHeroProps) { const [activeIndex, setActiveIndex] = useState(0); - const len = banners.length; - const numberOfVisibleBanners = banners.filter((banner) => banner.show).length; + const visibleBanners = useMemo(() => banners.filter((banner) => shouldShowBanner(banner.cfpDeadline)), [banners]); + const numberOfVisibleBanners = visibleBanners.length; const goToPrevious = () => { - setActiveIndex((prevIndex) => (prevIndex === 0 ? len - 1 : prevIndex - 1)); + setActiveIndex((prevIndex) => (prevIndex === 0 ? numberOfVisibleBanners - 1 : prevIndex - 1)); }; const goToNext = () => { - setActiveIndex((prevIndex) => (prevIndex === len - 1 ? 0 : prevIndex + 1)); + setActiveIndex((prevIndex) => (prevIndex === numberOfVisibleBanners - 1 ? 0 : prevIndex + 1)); }; const goToIndex = (index: number) => { @@ -62,31 +62,28 @@ export default function AnnouncementHero({ className = '', small = false }: IAnn )}
    - {banners.map( - (banner, index) => - banner.show && ( - - ) - )} + {visibleBanners.map((banner, index) => ( + + ))}
    - {banners.map((banner, index) => ( + {visibleBanners.map((banner, index) => (
    goToIndex(index)} /> diff --git a/components/campaigns/banners.ts b/components/campaigns/banners.ts index b6472dbf4a2..0620e6bdde9 100644 --- a/components/campaigns/banners.ts +++ b/components/campaigns/banners.ts @@ -3,7 +3,7 @@ * @returns Whether the banner should be shown * @description Check if the current date is after the deadline */ -function shouldShowBanner(cfpDeadline: string) { +export function shouldShowBanner(cfpDeadline: string) { const currentDate = new Date(); // G et the current date const deadline = new Date(cfpDeadline); // Convert the cfpDeadline string to a Date object @@ -15,18 +15,14 @@ function shouldShowBanner(cfpDeadline: string) { return true; } -const cfpDeadlineParis = '2024-10-12T06:00:00Z'; -const showBannerParis = shouldShowBanner(cfpDeadlineParis); - export const banners = [ { - title: "AsyncAPI Conf on Tour'24", - city: 'Paris', - dateLocation: '3rd - 5th of December, 2024 | France, Paris', - cfaText: 'Apply To Speak', - eventName: 'the end of Call for Speakers', - cfpDeadline: cfpDeadlineParis, - link: 'https://conference.asyncapi.com/venue/Paris', - show: showBannerParis + title: "AsyncAPI Online Conference'24", + city: 'YouTube', + dateLocation: '30th of October, 2024 | YouTube & LinkedIn', + cfaText: 'Join us Live', + eventName: 'the AsyncAPI Online Conference', + cfpDeadline: '2024-10-30T06:00:00Z', + link: 'https://www.youtube.com/live/F9wHxd-v2f0?si=kPCqgUzqAKC0FaqJ' } ]; From 7c27ab646f9bebf4a2acf0add21cde0bc8fd2f34 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 28 Oct 2024 01:39:10 +0100 Subject: [PATCH 29/32] chore: update tools.json (#3336) --- config/all-tags.json | 2 +- config/tools-automated.json | 161 ++++++++++++++++++------------------ config/tools.json | 2 +- 3 files changed, 82 insertions(+), 83 deletions(-) diff --git a/config/all-tags.json b/config/all-tags.json index bcbe78efc37..b2a1c6f3c3a 100644 --- a/config/all-tags.json +++ b/config/all-tags.json @@ -1 +1 @@ -{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file +{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file diff --git a/config/tools-automated.json b/config/tools-automated.json index a48496cf7dd..6378b0db96c 100644 --- a/config/tools-automated.json +++ b/config/tools-automated.json @@ -94,41 +94,41 @@ } }, { - "title": "SIO-AsyncAPI", - "description": "This is code-first approach to generate AsyncAPI specification from Socket.IO server.", + "title": "nestjs-asyncapi", + "description": "Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.", "links": { - "websiteUrl": "https://github.com/daler-rahimov/sio-asyncapi", - "docsUrl": "https://github.com/daler-rahimov/sio-asyncapi", - "repoUrl": "https://github.com/daler-rahimov/sio-asyncapi" + "repoUrl": "https://github.com/flamewow/nestjs-asyncapi" }, "filters": { - "language": "Python", + "language": "Typescript", "technology": [ - "Socket.IO", - "Flask" + "Node.js", + "NestJS" ], "categories": [ - "code-first", - "api" + "code-first" ], "hasCommercial": false, "isAsyncAPIOwner": false } }, { - "title": "nestjs-asyncapi", - "description": "Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.", + "title": "SIO-AsyncAPI", + "description": "This is code-first approach to generate AsyncAPI specification from Socket.IO server.", "links": { - "repoUrl": "https://github.com/flamewow/nestjs-asyncapi" + "websiteUrl": "https://github.com/daler-rahimov/sio-asyncapi", + "docsUrl": "https://github.com/daler-rahimov/sio-asyncapi", + "repoUrl": "https://github.com/daler-rahimov/sio-asyncapi" }, "filters": { - "language": "Typescript", + "language": "Python", "technology": [ - "Node.js", - "NestJS" + "Socket.IO", + "Flask" ], "categories": [ - "code-first" + "code-first", + "api" ], "hasCommercial": false, "isAsyncAPIOwner": false @@ -154,27 +154,6 @@ "isAsyncAPIOwner": false } }, - { - "title": "AsyncAPI Modelina", - "description": "Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization", - "links": { - "websiteUrl": "https://modelina.org", - "docsUrl": "https://github.com/asyncapi/modelina/tree/master/docs", - "repoUrl": "https://github.com/asyncapi/modelina" - }, - "filters": { - "language": "TypeScript", - "technology": [ - "React JS", - "Docker" - ], - "categories": [ - "code-generator" - ], - "hasCommercial": false, - "isAsyncAPIOwner": true - } - }, { "title": "ZenWave SDK", "description": "DDD and API-First for Event-Driven Microservices", @@ -200,6 +179,27 @@ "hasCommercial": false, "isAsyncAPIOwner": false } + }, + { + "title": "AsyncAPI Modelina", + "description": "Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization", + "links": { + "websiteUrl": "https://modelina.org", + "docsUrl": "https://github.com/asyncapi/modelina/tree/master/docs", + "repoUrl": "https://github.com/asyncapi/modelina" + }, + "filters": { + "language": "TypeScript", + "technology": [ + "React JS", + "Docker" + ], + "categories": [ + "code-generator" + ], + "hasCommercial": false, + "isAsyncAPIOwner": true + } } ] }, @@ -342,6 +342,23 @@ "Frameworks": { "description": "The following is a list of API/application frameworks that make use of AsyncAPI.", "toolsList": [ + { + "title": "Glee", + "description": "Glee — The AsyncAPI framework that will make you smile again :)", + "links": { + "repoUrl": "https://github.com/asyncapi/glee" + }, + "filters": { + "technology": [ + "TypeScript" + ], + "categories": [ + "framework" + ], + "hasCommercial": false, + "isAsyncAPIOwner": true + } + }, { "title": "Zod Sockets", "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", @@ -694,24 +711,6 @@ "hasCommercial": false, "isAsyncAPIOwner": true } - }, - { - "title": "asyncapi-preview", - "description": "VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n", - "links": { - "repoUrl": "https://github.com/Savio629/testing2" - }, - "filters": { - "technology": [ - "VSCode", - "SmartPaste" - ], - "categories": [ - "ide-extension" - ], - "hasCommercial": false, - "isAsyncAPIOwner": false - } } ] }, @@ -719,18 +718,15 @@ "description": "The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.", "toolsList": [ { - "title": "Java Spring Cloud Stream Template", - "description": "Java Spring Cloud Stream template for the AsyncAPI Generator", + "title": "Node.js Websockets Template", + "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.", "links": { - "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template" + "repoUrl": "https://github.com/asyncapi/nodejs-ws-template" }, "filters": { - "language": [ - "javascript" - ], + "language": "javascript", "technology": [ - "Spring Cloud Streams", - "Maven" + "Node.js" ], "categories": [ "generator-template" @@ -740,15 +736,15 @@ } }, { - "title": "Node.js Multiprotocol Template", - "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.", + "title": "HTML Template", + "description": "HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.", "links": { - "repoUrl": "https://github.com/asyncapi/nodejs-template" + "repoUrl": "https://github.com/asyncapi/html-template" }, "filters": { "language": "javascript", "technology": [ - "Node.js" + "HTML" ], "categories": [ "generator-template" @@ -758,17 +754,18 @@ } }, { - "title": "Java Template", - "description": "Java template for the AsyncAPI Generator", + "title": "Java Spring Cloud Stream Template", + "description": "Java Spring Cloud Stream template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/java-template" + "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template" }, "filters": { "language": [ "javascript" ], "technology": [ - "Java" + "Spring Cloud Streams", + "Maven" ], "categories": [ "generator-template" @@ -778,15 +775,17 @@ } }, { - "title": "Node.js Websockets Template", - "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.", + "title": "Java Template", + "description": "Java template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/nodejs-ws-template" + "repoUrl": "https://github.com/asyncapi/java-template" }, "filters": { - "language": "javascript", + "language": [ + "javascript" + ], "technology": [ - "Node.js" + "Java" ], "categories": [ "generator-template" @@ -796,15 +795,15 @@ } }, { - "title": "HTML Template", - "description": "HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.", + "title": "Node.js Multiprotocol Template", + "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.", "links": { - "repoUrl": "https://github.com/asyncapi/html-template" + "repoUrl": "https://github.com/asyncapi/nodejs-template" }, "filters": { "language": "javascript", "technology": [ - "HTML" + "Node.js" ], "categories": [ "generator-template" diff --git a/config/tools.json b/config/tools.json index ccb2d7a5f45..0265d466afd 100644 --- a/config/tools.json +++ b/config/tools.json @@ -1 +1 @@ -{"APIs":{"description":"The following is a list of APIs that expose functionality related to AsyncAPI.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Server API","description":"Server API providing official AsyncAPI tools","links":{"websiteUrl":"https://api.asyncapi.com/v1","docsUrl":"https://api.asyncapi.com/v1/docs","repoUrl":"https://github.com/asyncapi/server-api"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncApi.Net.Generator","description":"Code-first AsyncAPI documentation generator and ui","links":{"repoUrl":"https://github.com/yurvon-screamo/asyncapi.net"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"EventBridge Atlas","description":"Tool that translates your AWS EventBridge Schemas into an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://eventbridge-atlas.netlify.app/","repoUrl":"https://github.com/boyney123/eventbridge-atlas"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Go AsyncAPI","description":"This library helps to create AsyncAPI spec from your Go message structures. It uses reflection to translate Go structures in JSON Schema definitions and arrange them in AsyncAPI schema.","links":{"repoUrl":"https://github.com/swaggest/go-asyncapi"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Java AsyncAPI","description":"This tool stores modules, which simplifies interacting with AsyncAPI in jvm ecosystem.","links":{"repoUrl":"https://github.com/asyncapi/jasyncapi"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Kotlin AsyncAPI","description":"The Kotlin AsyncAPI project aims to provide convenience tools for generating and serving AsyncAPI documentation. The core of this project is a Kotlin DSL for building the specification in a typesafe way.","links":{"repoUrl":"https://github.com/OpenFolder/kotlin-asyncapi"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"nestjs-asyncapi","description":"Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.","links":{"repoUrl":"https://github.com/flamewow/nestjs-asyncapi"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Neuroglia AsyncAPI","description":"A .NET SDK for the Async API specification. Automatically generates and serves AsyncAPI documents based on your code. Includes fluent-builders to create AsyncAPI documents from scratch, and provides a web-based GUI to browse generated documents.","links":{"repoUrl":"https://github.com/neuroglia-io/AsyncApi"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Saunter","description":"Saunter is an AsyncAPI documentation generator for dotnet. Generates (and hosts) an AsyncAPI schema document from your code.","links":{"repoUrl":"https://github.com/tehmantra/saunter"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"sttp tapir","description":"Library for describing HTTP endpoints, and then interpreting them as a server, client, or documentation","links":{"websiteUrl":"https://tapir.softwaremill.com/","repoUrl":"https://github.com/softwaremill/tapir"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Modelina","description":"Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization","links":{"websiteUrl":"https://modelina.org","docsUrl":"https://github.com/asyncapi/modelina/tree/master/docs","repoUrl":"https://github.com/asyncapi/modelina"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Golang AsyncAPI Code Generator","description":"Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n","links":{"repoUrl":"https://github.com/lerenn/asyncapi-codegen"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"MultiAPI Generator","description":"This is a plugin designed to help developers automatizing the creation of code classes from YML files based on AsyncApi and OpenAPI. It is presented in 2 flavours Maven and Gradle","links":{"repoUrl":"https://github.com/sngular/scs-multiapi-plugin"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Node-RED AsyncAPI plugin","description":"A plugin for generating and configuring nodes for Kafka, MQTT, AMQP, etc. automatically from an AsyncAPI specification.","links":{"repoUrl":"https://github.com/dalelane/node-red-contrib-plugin-asyncapi"},"filters":{"technology":[{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Converters":{"description":"The following is a list of tools that do not yet belong to any specific category but are also useful for the community.","toolsList":[{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/thim81/asyncapi-format"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Converter","description":"Converts old versions of AsyncAPI files into the latest version.","links":{"repoUrl":"https://github.com/asyncapi/converter-js"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Converter-Go","description":"The AsyncAPI Converter converts AsyncAPI documents from versions 1.0.0, 1.1.0 and 1.2.0 to version 2.0.0. It supports both json and yaml formats on input and output. By default, the AsyncAPI Converter converts a document into the json format.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}}]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-asciidoc-template","description":"Asciidoc template for the asyncapi generator","links":{"repoUrl":"https://gitlab.com/djencks/asyncapi-asciidoc-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"}],"categories":["documentation-generator","generator-template"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Bump.sh","description":"OpenAPI 2 & 3 / AsyncAPI 2 documentation generator, with automatic changelog and visual diff.","links":{"websiteUrl":"https://bump.sh/","docsUrl":"https://docs.bump.sh/help/","repoUrl":""},"filters":{"categories":["documentation-generator"],"hasCommercial":true,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Cupid","description":"A library that focuses on finding and analyzing the relationships between AsyncAPI documents. It outputs a map of the system architecture.","links":{"repoUrl":"https://github.com/asyncapi/cupid"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Widdershins","description":"OpenAPI 3.0 / Swagger 2.0 / AsyncAPI 1.0 definition to Slate / Shins compatible markdown.","links":{"websiteUrl":"https://mermade.github.io/reslate/","repoUrl":"https://github.com/Mermade/widdershins"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[{"title":"AsyncAPI Studio","description":"Visually design your AsyncAPI files and event-driven architecture.","links":{"websiteUrl":"https://studio.asyncapi.com","repoUrl":"https://github.com/asyncapi/studio"},"filters":{"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["editor"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"title":"Api-Diff-Viewer","description":"React component to view the difference between two Json based API documents. Supported specifications: JsonSchema, OpenAPI 3.x, AsyncAPI 2.x.","links":{"repoUrl":"https://github.com/udamir/api-diff-viewer","websiteUrl":"https://api-diff-viewer.vercel.app/"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI React component","description":"React component for rendering documentation from your specification in real-time in the browser. It also provides a WebComponent and bundle for Angular and Vue","links":{"repoUrl":"https://github.com/asyncapi/asyncapi-react"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"DSL":{"description":"Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.","toolsList":[{"title":"BOATS","description":"Compile your single AsyncAPI file from multiple YAML files with BOATS and with the help of the template engine Nunjucks, plus a many extra helpers to automate much of the donkey work.","links":{"repoUrl":"https://github.com/j-d-carmichael/boats"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["dsl"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Frameworks":{"description":"The following is a list of API/application frameworks that make use of AsyncAPI.","toolsList":[{"title":"Asynction","description":"SocketIO server framework driven by the AsyncAPI specification. Asynction guarantees that your API will work in accordance with its AsyncAPI documentation. Built on top of Flask-SocketIO.","links":{"websiteUrl":"https://pypi.org/project/asynction/","repoUrl":"https://github.com/dedoussis/asynction"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["framework"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"API documentation generation on Bump.sh","description":"With this GitHub Action you can automatically generate your API reference (with the changelog and diff) on Bump.sh from any AsyncAPI file.","links":{"websiteUrl":"https://github.com/marketplace/actions/api-documentation-on-bump","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Automated version bump for AsyncAPI documents","description":"With this GitHub Action, you can automatically bump the version based on commit messages, which is similar to what semantic-release is for NPM.","links":{"websiteUrl":"https://github.com/marketplace/actions/automated-version-bump-for-asyncapi","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for CLI","description":"GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"GitHub Action for Generator","description":null,"links":{"repoUrl":"https://github.com/actions-marketplace-validations/asyncapi_github-action-for-generator"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for Generator","description":"CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!","links":{"repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-actions"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Mocking and Testing":{"description":"The tools below take specification documents as input, then publish fake messages to broker destinations for simulation purposes. They may also check that publisher messages are compliant with schemas.","toolsList":[{"title":"Microcks","description":"Mocking and testing platform for API and microservices. Turn your AsyncAPI, OpenAPI contract examples, or Postman collections into ready-to-use mocks. Use examples to simulate and validate received messages according to schema elements.","links":{"websiteUrl":"https://microcks.io/","repoUrl":"https://github.com/microcks/microcks"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"MultiAPI Converter","description":"Use AsyncAPI definition, to generate Spring Cloud Contract producer validation or consumer stubs, using maven.","links":{"repoUrl":"https://github.com/sngular/scc-multiapi-converter"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Specmatic","description":"An API contract testing tool that helps ensure the correctness APIs by automatically generating test cases and verifying them against the API spec. It simplifies the process of testing APIs and reduces the likelihood of bugs and compatibility issues.","links":{"websiteUrl":"https://specmatic.io","docsUrl":"https://specmatic.io/documentation/","repoUrl":"https://github.com/znsio/specmatic"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Virtualan","description":"Mocking and testing platform for API and microservices. Allows you to create and setup mocks for OpenAPI and AsyncAPI contracts. Shows how to setup and create AsyncAPI GitHub Reference Examples and OpenAPI GitHub Reference Examples.","links":{"websiteUrl":"https://www.virtualan.io/index.html","repoUrl":"https://github.com/virtualansoftware"},"filters":{"technology":[{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[{"title":"AMF","description":"AMF (AML Modeling Framework) is an open-source library capable of parsing and validating AML metadata documents.","links":{"docsUrl":"https://a.ml/docs/","repoUrl":"https://github.com/aml-org/amf"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Parser","description":"Use this package to parse and validate AsyncAPI documents —either YAML or JSON— in your Node.js or browser application. Updated bundle for the browser is always attached to the GitHub Release.","links":{"repoUrl":"https://github.com/asyncapi/parser-js"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Parser","description":"The AsyncAPI Parser validates AsyncAPI documents according to dedicated schemas.","links":{"repoUrl":"https://github.com/asyncapi/parser-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}},{"title":"AsyncAPI Parser Wrapper","description":"Use this library to parse and validate AsyncAPI documents — either YAML or JSON — in your Java application. It is a Java wrapper over JavaScript Parser implemented using J2V8.","links":{"repoUrl":"https://github.com/AsyncAPITools/parser-java-wrapper"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Validation","description":"Message validation package for YAML and JSON AsyncAPI documents.","links":{"repoUrl":"https://github.com/Elhebert/asyncapi-validation"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"asyncapi-validator","description":"It allows you to validate the schema of your messages against your AsyncAPI schema definition. You can use it with Kafka, RabbitMQ or any other messaging/queue.","links":{"repoUrl":"https://github.com/WaleedAshraf/asyncapi-validator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Spectral","description":"A flexible JSON/YAML linter for creating automated style guides, with baked in support for OpenAPI v3.1, v3.0, and v2.0 as well as AsyncAPI v2.x.","links":{"repoUrl":"https://github.com/stoplightio/spectral"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Compare tools":{"description":"The following is a list of tools that compare AsyncAPI documents.","toolsList":[{"title":"Api-Smart-Diff","description":"It allows you to compare two API documents and classify changes. Supported API specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-smart-diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Diff","description":"Diff is a library that compares two AsyncAPI Documents and provides information about the differences by pointing out explicitly information like breaking changes.","links":{"repoUrl":"https://github.com/asyncapi/diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"jasyncapicmp","description":"Tool for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","docsUrl":"https://github.com/siom79/jasyncapicmp","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jasyncapicmp","description":"Tool/library/maven-plugin for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"CLIs":{"description":"The following is a list of tools that you can work with in terminal or do some CI/CD automation.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"title":"Api-ref-bundler","description":"It allows you bundle/dereference external/internal $refs in Json based API document. Supported specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-ref-bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Bundler","description":"Combine multiple AsyncAPI specification files into one.","links":{"repoUrl":"https://github.com/asyncapi/bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"IDE Extensions":{"description":"The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others","toolsList":[{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/asyncapi/vs-asyncapi-preview"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/Savio629/testing2"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jAsyncAPI - IDEA plugin","description":"Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.","links":{"websiteUrl":"https://plugins.jetbrains.com/plugin/15673-asyncapi","docsUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin#usage","repoUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"AsyncAPI Generator Templates":{"description":"The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.","toolsList":[{"title":"HTML Template","description":"HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.","links":{"repoUrl":"https://github.com/asyncapi/html-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Cloud Stream Template","description":"Java Spring Cloud Stream template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-cloud-stream-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Template","description":"Java Spring template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Template","description":"Java template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Node.js Multiprotocol Template","description":"This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.","links":{"repoUrl":"https://github.com/asyncapi/nodejs-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Node.js Websockets Template","description":"Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.","links":{"repoUrl":"https://github.com/asyncapi/nodejs-ws-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Others":{"description":"The following is a list of tools that comes under Other category.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]}} \ No newline at end of file +{"APIs":{"description":"The following is a list of APIs that expose functionality related to AsyncAPI.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Server API","description":"Server API providing official AsyncAPI tools","links":{"websiteUrl":"https://api.asyncapi.com/v1","docsUrl":"https://api.asyncapi.com/v1/docs","repoUrl":"https://github.com/asyncapi/server-api"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncApi.Net.Generator","description":"Code-first AsyncAPI documentation generator and ui","links":{"repoUrl":"https://github.com/yurvon-screamo/asyncapi.net"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"EventBridge Atlas","description":"Tool that translates your AWS EventBridge Schemas into an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://eventbridge-atlas.netlify.app/","repoUrl":"https://github.com/boyney123/eventbridge-atlas"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Go AsyncAPI","description":"This library helps to create AsyncAPI spec from your Go message structures. It uses reflection to translate Go structures in JSON Schema definitions and arrange them in AsyncAPI schema.","links":{"repoUrl":"https://github.com/swaggest/go-asyncapi"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Java AsyncAPI","description":"This tool stores modules, which simplifies interacting with AsyncAPI in jvm ecosystem.","links":{"repoUrl":"https://github.com/asyncapi/jasyncapi"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Kotlin AsyncAPI","description":"The Kotlin AsyncAPI project aims to provide convenience tools for generating and serving AsyncAPI documentation. The core of this project is a Kotlin DSL for building the specification in a typesafe way.","links":{"repoUrl":"https://github.com/OpenFolder/kotlin-asyncapi"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"nestjs-asyncapi","description":"Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.","links":{"repoUrl":"https://github.com/flamewow/nestjs-asyncapi"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Neuroglia AsyncAPI","description":"A .NET SDK for the Async API specification. Automatically generates and serves AsyncAPI documents based on your code. Includes fluent-builders to create AsyncAPI documents from scratch, and provides a web-based GUI to browse generated documents.","links":{"repoUrl":"https://github.com/neuroglia-io/AsyncApi"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Saunter","description":"Saunter is an AsyncAPI documentation generator for dotnet. Generates (and hosts) an AsyncAPI schema document from your code.","links":{"repoUrl":"https://github.com/tehmantra/saunter"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"sttp tapir","description":"Library for describing HTTP endpoints, and then interpreting them as a server, client, or documentation","links":{"websiteUrl":"https://tapir.softwaremill.com/","repoUrl":"https://github.com/softwaremill/tapir"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Modelina","description":"Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization","links":{"websiteUrl":"https://modelina.org","docsUrl":"https://github.com/asyncapi/modelina/tree/master/docs","repoUrl":"https://github.com/asyncapi/modelina"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Golang AsyncAPI Code Generator","description":"Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n","links":{"repoUrl":"https://github.com/lerenn/asyncapi-codegen"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"MultiAPI Generator","description":"This is a plugin designed to help developers automatizing the creation of code classes from YML files based on AsyncApi and OpenAPI. It is presented in 2 flavours Maven and Gradle","links":{"repoUrl":"https://github.com/sngular/scs-multiapi-plugin"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Node-RED AsyncAPI plugin","description":"A plugin for generating and configuring nodes for Kafka, MQTT, AMQP, etc. automatically from an AsyncAPI specification.","links":{"repoUrl":"https://github.com/dalelane/node-red-contrib-plugin-asyncapi"},"filters":{"technology":[{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Converters":{"description":"The following is a list of tools that do not yet belong to any specific category but are also useful for the community.","toolsList":[{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/thim81/asyncapi-format"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Converter","description":"Converts old versions of AsyncAPI files into the latest version.","links":{"repoUrl":"https://github.com/asyncapi/converter-js"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Converter-Go","description":"The AsyncAPI Converter converts AsyncAPI documents from versions 1.0.0, 1.1.0 and 1.2.0 to version 2.0.0. It supports both json and yaml formats on input and output. By default, the AsyncAPI Converter converts a document into the json format.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}}]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-asciidoc-template","description":"Asciidoc template for the asyncapi generator","links":{"repoUrl":"https://gitlab.com/djencks/asyncapi-asciidoc-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"}],"categories":["documentation-generator","generator-template"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Bump.sh","description":"OpenAPI 2 & 3 / AsyncAPI 2 documentation generator, with automatic changelog and visual diff.","links":{"websiteUrl":"https://bump.sh/","docsUrl":"https://docs.bump.sh/help/","repoUrl":""},"filters":{"categories":["documentation-generator"],"hasCommercial":true,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Cupid","description":"A library that focuses on finding and analyzing the relationships between AsyncAPI documents. It outputs a map of the system architecture.","links":{"repoUrl":"https://github.com/asyncapi/cupid"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Widdershins","description":"OpenAPI 3.0 / Swagger 2.0 / AsyncAPI 1.0 definition to Slate / Shins compatible markdown.","links":{"websiteUrl":"https://mermade.github.io/reslate/","repoUrl":"https://github.com/Mermade/widdershins"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[{"title":"AsyncAPI Studio","description":"Visually design your AsyncAPI files and event-driven architecture.","links":{"websiteUrl":"https://studio.asyncapi.com","repoUrl":"https://github.com/asyncapi/studio"},"filters":{"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["editor"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"title":"Api-Diff-Viewer","description":"React component to view the difference between two Json based API documents. Supported specifications: JsonSchema, OpenAPI 3.x, AsyncAPI 2.x.","links":{"repoUrl":"https://github.com/udamir/api-diff-viewer","websiteUrl":"https://api-diff-viewer.vercel.app/"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI React component","description":"React component for rendering documentation from your specification in real-time in the browser. It also provides a WebComponent and bundle for Angular and Vue","links":{"repoUrl":"https://github.com/asyncapi/asyncapi-react"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"DSL":{"description":"Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.","toolsList":[{"title":"BOATS","description":"Compile your single AsyncAPI file from multiple YAML files with BOATS and with the help of the template engine Nunjucks, plus a many extra helpers to automate much of the donkey work.","links":{"repoUrl":"https://github.com/j-d-carmichael/boats"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["dsl"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Frameworks":{"description":"The following is a list of API/application frameworks that make use of AsyncAPI.","toolsList":[{"title":"Asynction","description":"SocketIO server framework driven by the AsyncAPI specification. Asynction guarantees that your API will work in accordance with its AsyncAPI documentation. Built on top of Flask-SocketIO.","links":{"websiteUrl":"https://pypi.org/project/asynction/","repoUrl":"https://github.com/dedoussis/asynction"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["framework"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Glee","description":"Glee — The AsyncAPI framework that will make you smile again :)","links":{"repoUrl":"https://github.com/asyncapi/glee"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["framework"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"API documentation generation on Bump.sh","description":"With this GitHub Action you can automatically generate your API reference (with the changelog and diff) on Bump.sh from any AsyncAPI file.","links":{"websiteUrl":"https://github.com/marketplace/actions/api-documentation-on-bump","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Automated version bump for AsyncAPI documents","description":"With this GitHub Action, you can automatically bump the version based on commit messages, which is similar to what semantic-release is for NPM.","links":{"websiteUrl":"https://github.com/marketplace/actions/automated-version-bump-for-asyncapi","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for CLI","description":"GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"GitHub Action for Generator","description":null,"links":{"repoUrl":"https://github.com/actions-marketplace-validations/asyncapi_github-action-for-generator"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for Generator","description":"CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!","links":{"repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-actions"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Mocking and Testing":{"description":"The tools below take specification documents as input, then publish fake messages to broker destinations for simulation purposes. They may also check that publisher messages are compliant with schemas.","toolsList":[{"title":"Microcks","description":"Mocking and testing platform for API and microservices. Turn your AsyncAPI, OpenAPI contract examples, or Postman collections into ready-to-use mocks. Use examples to simulate and validate received messages according to schema elements.","links":{"websiteUrl":"https://microcks.io/","repoUrl":"https://github.com/microcks/microcks"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"MultiAPI Converter","description":"Use AsyncAPI definition, to generate Spring Cloud Contract producer validation or consumer stubs, using maven.","links":{"repoUrl":"https://github.com/sngular/scc-multiapi-converter"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Specmatic","description":"An API contract testing tool that helps ensure the correctness APIs by automatically generating test cases and verifying them against the API spec. It simplifies the process of testing APIs and reduces the likelihood of bugs and compatibility issues.","links":{"websiteUrl":"https://specmatic.io","docsUrl":"https://specmatic.io/documentation/","repoUrl":"https://github.com/znsio/specmatic"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Virtualan","description":"Mocking and testing platform for API and microservices. Allows you to create and setup mocks for OpenAPI and AsyncAPI contracts. Shows how to setup and create AsyncAPI GitHub Reference Examples and OpenAPI GitHub Reference Examples.","links":{"websiteUrl":"https://www.virtualan.io/index.html","repoUrl":"https://github.com/virtualansoftware"},"filters":{"technology":[{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[{"title":"AMF","description":"AMF (AML Modeling Framework) is an open-source library capable of parsing and validating AML metadata documents.","links":{"docsUrl":"https://a.ml/docs/","repoUrl":"https://github.com/aml-org/amf"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Parser","description":"Use this package to parse and validate AsyncAPI documents —either YAML or JSON— in your Node.js or browser application. Updated bundle for the browser is always attached to the GitHub Release.","links":{"repoUrl":"https://github.com/asyncapi/parser-js"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Parser","description":"The AsyncAPI Parser validates AsyncAPI documents according to dedicated schemas.","links":{"repoUrl":"https://github.com/asyncapi/parser-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}},{"title":"AsyncAPI Parser Wrapper","description":"Use this library to parse and validate AsyncAPI documents — either YAML or JSON — in your Java application. It is a Java wrapper over JavaScript Parser implemented using J2V8.","links":{"repoUrl":"https://github.com/AsyncAPITools/parser-java-wrapper"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Validation","description":"Message validation package for YAML and JSON AsyncAPI documents.","links":{"repoUrl":"https://github.com/Elhebert/asyncapi-validation"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"asyncapi-validator","description":"It allows you to validate the schema of your messages against your AsyncAPI schema definition. You can use it with Kafka, RabbitMQ or any other messaging/queue.","links":{"repoUrl":"https://github.com/WaleedAshraf/asyncapi-validator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Spectral","description":"A flexible JSON/YAML linter for creating automated style guides, with baked in support for OpenAPI v3.1, v3.0, and v2.0 as well as AsyncAPI v2.x.","links":{"repoUrl":"https://github.com/stoplightio/spectral"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Compare tools":{"description":"The following is a list of tools that compare AsyncAPI documents.","toolsList":[{"title":"Api-Smart-Diff","description":"It allows you to compare two API documents and classify changes. Supported API specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-smart-diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Diff","description":"Diff is a library that compares two AsyncAPI Documents and provides information about the differences by pointing out explicitly information like breaking changes.","links":{"repoUrl":"https://github.com/asyncapi/diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"jasyncapicmp","description":"Tool for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","docsUrl":"https://github.com/siom79/jasyncapicmp","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jasyncapicmp","description":"Tool/library/maven-plugin for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"CLIs":{"description":"The following is a list of tools that you can work with in terminal or do some CI/CD automation.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"title":"Api-ref-bundler","description":"It allows you bundle/dereference external/internal $refs in Json based API document. Supported specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-ref-bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Bundler","description":"Combine multiple AsyncAPI specification files into one.","links":{"repoUrl":"https://github.com/asyncapi/bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"IDE Extensions":{"description":"The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others","toolsList":[{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/asyncapi/vs-asyncapi-preview"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"jAsyncAPI - IDEA plugin","description":"Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.","links":{"websiteUrl":"https://plugins.jetbrains.com/plugin/15673-asyncapi","docsUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin#usage","repoUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"AsyncAPI Generator Templates":{"description":"The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.","toolsList":[{"title":"HTML Template","description":"HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.","links":{"repoUrl":"https://github.com/asyncapi/html-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Cloud Stream Template","description":"Java Spring Cloud Stream template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-cloud-stream-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Template","description":"Java Spring template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Template","description":"Java template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Node.js Multiprotocol Template","description":"This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.","links":{"repoUrl":"https://github.com/asyncapi/nodejs-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Node.js Websockets Template","description":"Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.","links":{"repoUrl":"https://github.com/asyncapi/nodejs-ws-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Others":{"description":"The following is a list of tools that comes under Other category.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]}} \ No newline at end of file From d7ee919f951be00c431cbcadab92ca4ba79b3c11 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 28 Oct 2024 15:46:11 +0100 Subject: [PATCH 30/32] docs(generator): update latest generator documentation (#3339) --- markdown/docs/tools/generator/asyncapi-document.md | 2 +- markdown/docs/tools/generator/hooks.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/markdown/docs/tools/generator/asyncapi-document.md b/markdown/docs/tools/generator/asyncapi-document.md index b6a3607b066..dfd2db6e854 100644 --- a/markdown/docs/tools/generator/asyncapi-document.md +++ b/markdown/docs/tools/generator/asyncapi-document.md @@ -41,7 +41,7 @@ graph LR The AsyncAPI document's content is accessible to you while writing your template in two distinct ways: - The `originalAsyncAPI`, which is a stringified version of the AsyncAPI document provided as input, without any modifications. -- The `asyncapi` (`AsyncAPIDocument`) which is an object with a set of helper functions, that comes as a result of the `Parser` manipulating the `originalAsyncAPI` .The `asyncapi` functions make it easier to access the contents of AsyncAPI documents in your templates. +- The `asyncapi` (`AsyncAPIDocument`) which is an object with a set of helper functions, that comes as a result of the `Parser` manipulating the `originalAyncAPI` .The `asyncapi` functions make it easier to access the contents of AsyncAPI documents in your templates. In the following sections, you will learn how to use either the **originalAsyncAPI** or the **asyncapi** in your template. diff --git a/markdown/docs/tools/generator/hooks.md b/markdown/docs/tools/generator/hooks.md index d2c06ddc0c4..cf1cb1dbc20 100644 --- a/markdown/docs/tools/generator/hooks.md +++ b/markdown/docs/tools/generator/hooks.md @@ -8,9 +8,9 @@ The following types of hooks are currently supported: |Hook type|Description| Return type | Arguments |---|---|---|---| -| `generate:before` | Called after registration of all filters and before the generator starts processing of the template. | void : Nothing is expected to be returned. | [The generator instance](https://github.com/asyncapi/generator/blob/master/docs/api.md) -| `generate:after` | Called at the very end of the generation. | void : Nothing is expected to be returned. | [The generator instance](https://github.com/asyncapi/generator/blob/master/docs/api.md) -| `setFileTemplateName ` | Called right before saving a new file generated by [file template](./file-templates.md). | string : a new filename for the generator to use for the file template. | [The generator instance](https://github.com/asyncapi/generator/blob/master/docs/api.md) and object in the form of `{ "originalFilename" : string }` +| `generate:before` | Called after registration of all filters and before the generator starts processing of the template. | void : Nothing is expected to be returned. | [The generator instance](/api) +| `generate:after` | Called at the very end of the generation. | void : Nothing is expected to be returned. | [The generator instance](/api) +| `setFileTemplateName ` | Called right before saving a new file generated by [file template](./file-templates.md). | string : a new filename for the generator to use for the file template. | [The generator instance](/api) and object in the form of `{ "originalFilename" : string }` The generator parses: - All the files in the `.hooks` directory inside the template. From 7753444299abdb99797fe6097a5683b0d6c13f2a Mon Sep 17 00:00:00 2001 From: Lukasz Gornicki Date: Mon, 28 Oct 2024 18:15:10 +0100 Subject: [PATCH 31/32] chore: add Adidas and Morgan Stanley to list of adopters (#3338) --- components/sponsors/SilverSponsorsList.ts | 2 +- config/adopters.yml | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/components/sponsors/SilverSponsorsList.ts b/components/sponsors/SilverSponsorsList.ts index 6c86f88eaa8..e49c6667d88 100644 --- a/components/sponsors/SilverSponsorsList.ts +++ b/components/sponsors/SilverSponsorsList.ts @@ -4,7 +4,7 @@ export const Silversponsors: SponsorType[] = [ { name: 'Bump.sh', website: 'https://bump.sh/asyncapi?utm_source=asyncapi&utm_medium=referral&utm_campaign=sponsor', - altText: 'Bump', + altText: 'OpenAPI & AsyncAPI API docs - Bump.sh', imageSrc: '/img/sponsors/bumpsh.svg', imageClass: 'inline-block sm:h-9' }, diff --git a/config/adopters.yml b/config/adopters.yml index 0ffaba4966c..456ac537a4f 100644 --- a/config/adopters.yml +++ b/config/adopters.yml @@ -80,4 +80,16 @@ useCase: Implementing a GitOps-based pipeline to enable self-service management of Kafka infrastructure, including access control management. Automation of AsyncAPI document governance ensures consistency in the infrastructure at the pull request level. resources: - title: "Slides: AsyncAPI For Platform Self-Service: A GitOps Tale" - link: https://drive.google.com/file/d/1y67PI8NaITPPwZAiDF2Zs7ISfcIpqMV8/view?usp=sharing \ No newline at end of file + link: https://drive.google.com/file/d/1y67PI8NaITPPwZAiDF2Zs7ISfcIpqMV8/view?usp=sharing + +- companyName: Adidas + useCase: AsyncAPI is a standard for defining asynchronous APIs using Apache Kafka. AsyncAPI governed under official guidelines. AsyncAPI is promoted to be used for documentation and code generation. + resources: + - title: "Docs: AsyncAPI and Kafka Guidelines" + link: https://adidas.gitbook.io/api-guidelines/asynchronous-api-guidelines/kafka-asynchronous-guidelines/a_introduction/why-asyncapi + +- companyName: Morgan Stanley + useCase: AsyncAPI is promoted not only inside the company but also as a standard for FinOS Foundation for managing architecture as code. + resources: + - title: "Slides: Deploying WebSockets with AsyncAPI and Architecture as Code" + link: https://drive.google.com/file/d/1YzLwQZsMUXGwj_Lsqv-ZnvV2knuowWrS/view?usp=drive_link From 85c9a356377b3bd044f1c78251ae850e3b286505 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 29 Oct 2024 01:41:36 +0100 Subject: [PATCH 32/32] chore: update meetings.json and newsrooom_videos.json (#3341) --- config/newsroom_videos.json | 12 ++++++------ dashboard.json | 32 ++++++++++++++++---------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json index 6a3893e2316..cf77baeb7b3 100644 --- a/config/newsroom_videos.json +++ b/config/newsroom_videos.json @@ -1,4 +1,10 @@ [ + { + "image_url": "https://i.ytimg.com/vi/Hy3-C6V2ir8/hqdefault.jpg", + "title": "AsyncAPI Conference Dry Run", + "description": "Setup and conference prep.", + "videoId": "Hy3-C6V2ir8" + }, { "image_url": "https://i.ytimg.com/vi/2WUchTKDPfs/hqdefault.jpg", "title": "Marketing WG Meeting, 14:00 UTC Tuesday October 22nd 2024", @@ -22,11 +28,5 @@ "title": "AsyncAPI Mentorship Program FAQ, 11:00 UTC Thursday October 10th 2024", "description": "https://github.com/asyncapi/community/issues/1550.", "videoId": "P1ZqaVBb6XM" - }, - { - "image_url": "https://i.ytimg.com/vi/4jaACa7geT0/hqdefault.jpg", - "title": "Design Onboarding Call, 10:00 UTC Thursday September 12th 2024", - "description": "https://github.com/asyncapi/community/issues/1372.", - "videoId": "4jaACa7geT0" } ] \ No newline at end of file diff --git a/dashboard.json b/dashboard.json index 2c675544b9a..8bd59dd608c 100644 --- a/dashboard.json +++ b/dashboard.json @@ -36,7 +36,7 @@ "resourcePath": "/asyncapi/website/pull/3101", "repo": "asyncapi/website", "labels": [], - "score": 19.240697446200336 + "score": 19.527872034949596 }, { "id": "PR_kwDOFLhIt85oVQqh", @@ -47,7 +47,7 @@ "resourcePath": "/asyncapi/community/pull/1082", "repo": "asyncapi/community", "labels": [], - "score": 18.37917367995256 + "score": 18.666348268701817 }, { "id": "I_kwDOGQYLdM5AX1lK", @@ -67,7 +67,7 @@ "color": "0E8A16" } ], - "score": 16.08177696995849 + "score": 16.36895155870775 }, { "id": "PR_kwDOFLhIt853IEwA", @@ -78,7 +78,7 @@ "resourcePath": "/asyncapi/community/pull/1333", "repo": "asyncapi/community", "labels": [], - "score": 15.220253203710714 + "score": 15.507427792459973 }, { "id": "I_kwDOFLhIt85bebeO", @@ -89,7 +89,7 @@ "resourcePath": "/asyncapi/community/issues/568", "repo": "asyncapi/community", "labels": [], - "score": 14.933078614961456 + "score": 15.220253203710714 }, { "id": "PR_kwDOCHlHJM54CmhW", @@ -129,6 +129,17 @@ ], "score": 12.922856493716644 }, + { + "id": "PR_kwDOBW5R_c59wJxU", + "isPR": true, + "isAssigned": false, + "title": "fix: css alignment of calendar component on the home page", + "author": "dishafaujdar", + "resourcePath": "/asyncapi/website/pull/3276", + "repo": "asyncapi/website", + "labels": [], + "score": 11.199808961221091 + }, { "id": "I_kwDODwv8N86BkfYV", "isPR": false, @@ -144,17 +155,6 @@ } ], "score": 10.912634372471834 - }, - { - "id": "PR_kwDOFLhIt85bqKL8", - "isPR": true, - "isAssigned": false, - "title": "docs: add Bounty Program Rules", - "author": "aeworxet", - "resourcePath": "/asyncapi/community/pull/897", - "repo": "asyncapi/community", - "labels": [], - "score": 10.657920261154981 } ], "goodFirstIssues": [