diff --git a/.github/workflows/netlify-edge-functions-test.yml b/.github/workflows/netlify-edge-functions-test.yml new file mode 100644 index 00000000000..adc110d68dd --- /dev/null +++ b/.github/workflows/netlify-edge-functions-test.yml @@ -0,0 +1,21 @@ +name: Run tests for netlify edge-functions + +on: + pull_request: + types: [opened, reopened, synchronize, ready_for_review] + +jobs: + netlify-tests: + strategy: + matrix: + deno-version: [1.46.0] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Deno + uses: denoland/setup-deno@3a041055d2e2068f6e2c59904ee0ec2dfa9d9665 + with: + deno-version: ${{ matrix.deno-version }} + - name: Test with Deno + run: deno test --allow-env --trace-ops netlify/**/*.test.ts + diff --git a/.gitignore b/.gitignore index 210beb93f6a..0a69d4de26c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ cypress/videos *storybook.log /storybook-static/ coverage +deno.lock diff --git a/CODEOWNERS b/CODEOWNERS index e33f9f4e706..ac1c2868806 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -15,4 +15,4 @@ markdown/community/*.md @thulieblack @quetzalliwrites README.md @quetzalliwrites @derberg @akshatnema @magicmatatjahu @mayaleeeee @asyncapi-bot-eve #docTriagers: TRohit20 BhaswatiRoy VaishnaviNandakumar J0SAL -#codeTriagers: sambhavgupta0705 +#codeTriagers: sambhavgupta0705 devilkiller-ag diff --git a/assets/docs/fragments/bindings-overview.md b/assets/docs/fragments/bindings-overview.md new file mode 100644 index 00000000000..5f92b0ca380 --- /dev/null +++ b/assets/docs/fragments/bindings-overview.md @@ -0,0 +1 @@ +Bindings in AsyncAPI provide a way to add protocol-specific information to the AsyncAPI documentation. They can be added to different document parts, such as servers, channels, or messages; they specify standard details specific to a particular protocol. The purpose of bindings is to enhance the API's understanding and usage by providing additional context and configuration options for different protocols. diff --git a/components/CaseStudyCard.tsx b/components/CaseStudyCard.tsx index 1642b824450..241e9b5aa84 100644 --- a/components/CaseStudyCard.tsx +++ b/components/CaseStudyCard.tsx @@ -19,7 +19,7 @@ export default function CaseStudyCard({ studies = [] }: ICaseStudyCardProps) { return (
{studies.map((study, index) => ( - +
(false); - const [showMoreDescription, setShowMoreDescription] = useState(false); + const [isTruncated, setIsTruncated] = useState(false); const [readMore, setReadMore] = useState(false); const descriptionRef = useRef(null); // Decide whether to show full description or not in the card based on the number of lines occupied by the description. useEffect(() => { - const divHeight = descriptionRef.current?.offsetHeight || 0; - const numberOfLines = divHeight / 20; - - if (numberOfLines > 3) { - setShowMoreDescription(true); - } else { - setShowMoreDescription(false); + if (descriptionRef.current) { + setIsTruncated(descriptionRef.current?.scrollHeight! > descriptionRef.current?.clientHeight!); } - }, []); + }, [descriptionRef.current]); let onGit = false; @@ -91,17 +85,19 @@ export default function ToolsCard({ toolData }: ToolsCardProp) {
setTimeout(() => { - if (showMoreDescription) setShowDescription(true); + if (isTruncated) setShowDescription(true); }, 500) } > - +
+ {toolData.description} +
+ {showDescription && (
(false); // used to handle the preloader on the page const filterRef = useRef(); // used to provide ref to the Filter menu and outside click close feature const categoryRef = useRef(); // used to provide ref to the Category menu and outside click close feature const [openFilter, setOpenFilter] = useState(false); @@ -31,7 +27,6 @@ export default function ToolsDashboard() { // filter parameters extracted from the context const { isPaid, isAsyncAPIOwner, languages, technologies, categories } = useContext(ToolFilterContext); const [searchName, setSearchName] = useState(''); // state variable used to get the search name - const [toolsList, setToolsList] = useState({}); // state variable used to set the list of tools according to the filters applied const [checkToolsList, setCheckToolsList] = useState(true); // state variable used to check whether any tool is available according to the needs of the user. // useEffect function to enable the close Modal feature when clicked outside of the modal @@ -49,14 +44,6 @@ export default function ToolsDashboard() { }; }); - // sets the preloader on the page for 1 second - useEffect(() => { - setLoading(true); - setTimeout(() => { - setLoading(false); - }, 1000); - }, []); - // useEffect function to enable the close Category dropdown Modal feature when clicked outside of the modal useEffect(() => { const checkIfClickOutside = (event: MouseEvent) => { @@ -72,8 +59,8 @@ export default function ToolsDashboard() { }; }); - // Function to update the list of tools according to the current filters applied - const updateToolsList = () => { + // useMemo function to filter the tools according to the filters applied by the user + const toolsList = useMemo(() => { let tempToolsList: ToolsListData = {}; // Tools data list is first filtered according to the category filter if applied by the user. @@ -150,18 +137,36 @@ export default function ToolsDashboard() { } }); - setToolsList(tempToolsList); - }; + Object.keys(tempToolsList).map((category) => { + tempToolsList[category].elementRef = createRef(); + + return tempToolsList; + }); + + return tempToolsList; + }, [isPaid, isAsyncAPIOwner, languages, technologies, categories, searchName]); + + // useEffect to scroll to the opened category when url has category as element id + useEffect(() => { + const { hash } = window.location; + + if (hash) { + const elementID = decodeURIComponent(hash.slice(1)); + const element = toolsList[elementID]?.elementRef!; + if (element.current) { + document.documentElement.style.scrollPaddingTop = '6rem'; + element.current.scrollIntoView({ behavior: 'smooth' }); + document.documentElement.style.scrollPaddingTop = '0'; + } + } + }, []); + // Function to update the list of tools according to the current filters applied const clearFilters = () => { setOpenFilter(false); router.push('/tools', undefined, { shallow: true }); }; - useEffect(() => { - updateToolsList(); - }, [isPaid, isAsyncAPIOwner, languages, technologies, categories, searchName]); - const isFiltered = Boolean( isPaid !== 'all' || isAsyncAPIOwner || languages.length || technologies.length || categories.length ); @@ -226,20 +231,16 @@ export default function ToolsDashboard() { Clear Filters
)} - {loading ? ( - } pulsating /> - ) : ( -
- {checkToolsList ? ( - - ) : ( -
- not found -
Sorry, we don't have tools according to your needs.
-
- )} -
- )} +
+ {checkToolsList ? ( + + ) : ( +
+ not found +
Sorry, we don't have tools according to your needs.
+
+ )} +
); diff --git a/components/tools/ToolsList.tsx b/components/tools/ToolsList.tsx index 9e41e58caea..b6e6eeeafe5 100644 --- a/components/tools/ToolsList.tsx +++ b/components/tools/ToolsList.tsx @@ -22,7 +22,7 @@ export default function ToolsList({ toolsListData }: ToolsListProp) { {Object.keys(toolsListData).map((categoryName, index) => { if (toolsListData[categoryName].toolsList.length > 0) { return ( -
+
{categoryName} diff --git a/config/MAINTAINERS.json b/config/MAINTAINERS.json index 1d9a5cab3e3..465d80cba81 100644 --- a/config/MAINTAINERS.json +++ b/config/MAINTAINERS.json @@ -87,6 +87,7 @@ "availableForHire": true, "isTscMember": true, "repos": [ + "studio", "github-action-for-cli", "cli" ], @@ -276,8 +277,7 @@ "template-for-generator-templates", "community", "diff", - "chatbot", - "infra" + "chatbot" ], "githubID": 6995927 }, @@ -447,8 +447,7 @@ "go-watermill-template", "template-for-go-projects", "parser-api", - "server-api", - "infra" + "server-api" ], "githubID": 1083296 }, @@ -720,6 +719,7 @@ "availableForHire": true, "isTscMember": true, "repos": [ + "website", "modelina" ], "githubID": 43639341 @@ -972,5 +972,25 @@ "kotlin-asyncapi" ], "githubID": 39913716 + }, + { + "name": "Jonas S\u00fcskind", + "github": "sueskind", + "isTscMember": false, + "repos": [ + "kotlin-asyncapi" + ], + "githubID": 52210599 + }, + { + "name": "Andrei", + "github": "gimlet2", + "twitter": "gimlet2", + "availableForHire": true, + "isTscMember": false, + "repos": [ + "kotlin-asyncapi" + ], + "githubID": 758568 } ] \ No newline at end of file diff --git a/config/all-tags.json b/config/all-tags.json index bcbe78efc37..9f22bcd87c8 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":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","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 94ea5b30fbe..504b55f18f8 100644 --- a/config/tools-automated.json +++ b/config/tools-automated.json @@ -91,44 +91,44 @@ } }, { - "title": "Zod Sockets", - "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", + "title": "SIO-AsyncAPI", + "description": "This is code-first approach to generate AsyncAPI specification from Socket.IO server.", "links": { - "websiteUrl": "https://www.npmjs.com/package/zod-sockets", - "repoUrl": "https://github.com/RobinTail/zod-sockets" + "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", - "TypeScript" + "Socket.IO", + "Flask" ], "categories": [ "code-first", - "dsl", - "framework" + "api" ], "hasCommercial": false, "isAsyncAPIOwner": false } }, { - "title": "SIO-AsyncAPI", - "description": "This is code-first approach to generate AsyncAPI specification from Socket.IO server.", + "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://github.com/daler-rahimov/sio-asyncapi", - "docsUrl": "https://github.com/daler-rahimov/sio-asyncapi", - "repoUrl": "https://github.com/daler-rahimov/sio-asyncapi" + "websiteUrl": "https://www.npmjs.com/package/zod-sockets", + "repoUrl": "https://github.com/RobinTail/zod-sockets" }, "filters": { - "language": "Python", + "language": "TypeScript", "technology": [ - "Socket.IO", - "Flask" + "Node.js", + "TypeScript" ], "categories": [ "code-first", - "api" + "dsl", + "framework" ], "hasCommercial": false, "isAsyncAPIOwner": false @@ -289,28 +289,6 @@ "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": "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": "TypeScript", - "technology": [ - "Node.js", - "TypeScript" - ], - "categories": [ - "code-first", - "dsl", - "framework" - ], - "hasCommercial": false, - "isAsyncAPIOwner": false - } - }, { "title": "ZenWave SDK", "description": "DDD and API-First for Event-Driven Microservices", @@ -336,6 +314,28 @@ "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": "TypeScript", + "technology": [ + "Node.js", + "TypeScript" + ], + "categories": [ + "code-first", + "dsl", + "framework" + ], + "hasCommercial": false, + "isAsyncAPIOwner": false + } } ] }, @@ -640,15 +640,18 @@ "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", + "title": "jAsyncAPI - IDEA plugin", + "description": "Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.", "links": { - "repoUrl": "https://github.com/asyncapi/vs-asyncapi-preview" + "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": "Kotlin", "technology": [ - "VSCode", - "SmartPaste" + "JetBrains", + "IntelliJ IDEA" ], "categories": [ "ide-extension" @@ -658,18 +661,15 @@ } }, { - "title": "jAsyncAPI - IDEA plugin", - "description": "Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.", + "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": { - "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" + "repoUrl": "https://github.com/asyncapi/vs-asyncapi-preview" }, "filters": { - "language": "Kotlin", "technology": [ - "JetBrains", - "IntelliJ IDEA" + "VSCode", + "SmartPaste" ], "categories": [ "ide-extension" @@ -701,6 +701,24 @@ "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": "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": "javascript", + "technology": [ + "Node.js" + ], + "categories": [ + "generator-template" + ], + "hasCommercial": false, + "isAsyncAPIOwner": true + } + }, { "title": "Java Template", "description": "Java template for the AsyncAPI Generator", @@ -722,15 +740,18 @@ } }, { - "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 Cloud Stream Template", + "description": "Java Spring Cloud Stream template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/nodejs-ws-template" + "repoUrl": "https://github.com/asyncapi/java-spring-cloud-stream-template" }, "filters": { - "language": "javascript", + "language": [ + "javascript" + ], "technology": [ - "Node.js" + "Spring Cloud Streams", + "Maven" ], "categories": [ "generator-template" @@ -775,27 +796,6 @@ "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": [ - "javascript" - ], - "technology": [ - "Spring Cloud Streams", - "Maven" - ], - "categories": [ - "generator-template" - ], - "hasCommercial": false, - "isAsyncAPIOwner": true - } - }, { "title": "Java Spring Template", "description": "Java Spring template for the AsyncAPI Generator", diff --git a/jest.config.js b/jest.config.js index 496a9fddf92..25c7865434e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,7 @@ module.exports = { - verbose: true, // display individual test results with the test suite hierarchy - collectCoverage: true, // collect test coverage information\ - collectCoverageFrom: ['scripts/**/*.js'] + verbose: true, + collectCoverage: true, + collectCoverageFrom: ['scripts/**/*.js'], + // To disallow netlify edge function tests from running + testMatch: ['**/tests/**/*.test.*', '!**/netlify/**/*.test.*'], }; diff --git a/markdown/blog/2022-summary.md b/markdown/blog/2022-summary.md index 2cd59741844..408e4b33a5d 100644 --- a/markdown/blog/2022-summary.md +++ b/markdown/blog/2022-summary.md @@ -11,7 +11,6 @@ authors: link: https://twitter.com/derberq byline: AsyncAPI Maintainer and Dev Comm Keeper excerpt: 'tl;dr We do not see any negative trends indicating that the interest in the project got stale and that the community is not growing anymore.' -featured: true --- It is a good practice to sometimes stop and turn back. Sometimes you need to see what you left behind, what successes made you go that far, and what things you missed and never had time to enjoy or explore. The more often you do it, the better your decisions may be in the future. It is essential to do it at least once a year in open source. diff --git a/markdown/blog/2023-mentorship-summary.md b/markdown/blog/2023-mentorship-summary.md index fa13cb92afb..b594ff5b4bb 100644 --- a/markdown/blog/2023-mentorship-summary.md +++ b/markdown/blog/2023-mentorship-summary.md @@ -11,7 +11,6 @@ authors: photo: /img/avatars/ace.webp link: https://twitter.com/_acebuild byline: AsyncAPI Preacher -featured: true --- diff --git a/markdown/blog/2023-summary.md b/markdown/blog/2023-summary.md index dd052e2577d..78bce07df1e 100644 --- a/markdown/blog/2023-summary.md +++ b/markdown/blog/2023-summary.md @@ -11,7 +11,6 @@ authors: link: https://www.linkedin.com/in/v-thulisile-sibanda/ byline: AsyncAPI Community Manager excerpt: '2023 Year in Review' -featured: true --- It's almost unbelievable that we are in 2024. And if you are reading this, Happy New Year to you and your loved ones. Continuing the tradition, we look at how the community has grown over the last 365 days and look forward to our next phase. diff --git a/markdown/blog/2024-Q1-docs-report.md b/markdown/blog/2024-Q1-docs-report.md index dcf9ead7c48..3f5950eeeda 100644 --- a/markdown/blog/2024-Q1-docs-report.md +++ b/markdown/blog/2024-Q1-docs-report.md @@ -12,7 +12,6 @@ authors: link: https://www.linkedin.com/in/alejandra-quetzalli/ byline: During Q1 2024, AsyncAPI docs had a total of 26,923 sessions and 8,128 unique users. excerpt: During Q1 2024, AsyncAPI docs had a total of 26,923 sessions and 8,128 unique users. -featured: true --- # AsyncAPI Documentation Report - Q1 2024 diff --git a/markdown/blog/a_straight_guide_to_apis_and_architecture_concepts.md b/markdown/blog/a_straight_guide_to_apis_and_architecture_concepts.md index 1f2c4fe7f87..34d9b700c2f 100644 --- a/markdown/blog/a_straight_guide_to_apis_and_architecture_concepts.md +++ b/markdown/blog/a_straight_guide_to_apis_and_architecture_concepts.md @@ -12,7 +12,6 @@ authors: photo: /img/avatars/barbano.webp link: https://www.linkedin.com/in/barbano-gonzalez-moreno excerpt: Basic concepts about APIs and architectures for beginners and non-developers. -featured: true --- It has not been such a long journey into the technology realm for me. Then I started to work at AsyncAPI, and suddenly, I needed to understand a complex world. New terms, code, and ways of seeing things were waiting for me. Coming from other fields of knowledge, the challenge was huge. How to begin? How to have a clue? diff --git a/markdown/blog/asyncapi-ambassador-program.md b/markdown/blog/asyncapi-ambassador-program.md index 35562aa67f0..b4c89987814 100644 --- a/markdown/blog/asyncapi-ambassador-program.md +++ b/markdown/blog/asyncapi-ambassador-program.md @@ -10,7 +10,6 @@ authors: photo: /img/avatars/barbano.webp link: https://www.linkedin.com/in/barbano-gonzalez-moreno excerpt: Information about AsyncAPI Ambassador Program. -featured: true --- AsyncAPI and its community have grown exponentially during the last few months. As a feedback exercise, both the project and the community are getting stronger with one another. The community is the driving force that leads the initiative and the bigger it gets, the greater the consistency and potential it has. It’s amazing to see a vast number of people who invest their time in disseminating and promoting the initiative through talks, articles, workshops, and program direction... diff --git a/markdown/blog/asyncapi-bounty-program-2024.md b/markdown/blog/asyncapi-bounty-program-2024.md new file mode 100644 index 00000000000..bc409d28581 --- /dev/null +++ b/markdown/blog/asyncapi-bounty-program-2024.md @@ -0,0 +1,71 @@ +--- +title: 'AsyncAPI Bounty Program Summary - 2024' +date: 2024-09-12T00:00:00+00:00 +type: Community +tags: + - Community +cover: /img/posts/bounty-program/photo-from-starship-cockpit.jpeg +authors: + - name: Viacheslav Turovskyi + photo: /img/avatars/aeworxet.webp + link: https://github.com/aeworxet + byline: Bounty Program Coordinator +excerpt: 'Annual update on the quarterly published set of tasks that are currently in demand among AsyncAPI Maintainers, targeted at engineers of Middle and Senior professional levels.' +featured: true +--- + +## AsyncAPI Bounty Program + +Since ancient times, sponsors furiously wanted to support Open Source. AsyncAPI addressed that need by starting to quarterly publish for Middle and Senior engineers a set of tasks that are currently in demand among AsyncAPI Maintainers and rewarding their completion using accumulated donated funds. + +During one year of existence of the [AsyncAPI Bounty Program](https://github.com/orgs/asyncapi/projects/36/?pane=info): + +- 32 GitHub issues were resolved, [16 of which](https://github.com/orgs/asyncapi/projects/36/views/4?filterQuery=-no%3Alevel+-round%3A%22bounty%2F2023-pilot%22&sliceBy%5BcolumnId%5D=77803059&sliceBy%5Bvalue%5D=advanced) had complexity level `Advanced`; + +- [50+ PRs](https://github.com/orgs/asyncapi/projects/36/views/4?sliceBy%5BcolumnId%5D=78904519&filterQuery=no%3Aresponsible+-round%3A%22bounty%2F2023-pilot%22+) were merged in total; + +- [8000+ USD](https://opencollective.com/asyncapi/expenses?limit=30&tag=bounty&period=2023-09-30T21%3A00%3A00.000Z%E2%86%92all&collectiveSlug=asyncapi&status=PAID) were paid out as rewards. + +### Benefits for FOSS Community +- At least [one issue](https://github.com/springwolf/springwolf-core/issues/820#issuecomment-2257879523) was closed in a third-party project due to a fixed bug in AsyncAPI's software. + + +### Benefits for AsyncAPI GitHub Organization +Thanks to the Bounty Program Participants, AsyncAPI got: + +- [Automation in Technical Steering Committee voting process](https://github.com/orgs/asyncapi/projects/36/views/4?sliceBy%5BcolumnId%5D=78904519&sliceBy%5Bvalue%5D=community%231093&filterQuery=) ([Aayush Saini](https://github.com/AayushSaini101)): New automation and the [process around voting](https://github.com/asyncapi/community/blob/master/voting.md) have been introduced, as well as [transparent summaries](https://github.com/asyncapi/community/blob/master/TSC_VOTING_OVERVIEW.md) of each voting activity. + +- New monorepo setup in [generator](https://github.com/orgs/asyncapi/projects/36/views/4?filterQuery=&sliceBy%5BcolumnId%5D=78904519&sliceBy%5Bvalue%5D=generator%231044) and [parser-js](https://github.com/orgs/asyncapi/projects/36/views/4?filterQuery=&sliceBy%5BcolumnId%5D=78904519&sliceBy%5Bvalue%5D=parser-js%23963) ([Ayush Nautiyal](https://github.com/ayushnau)): Consolidation of smaller repositories into these two larger projects helped unify the dispersed community within the organization, fostering collaboration in a single location and accelerating development. + +- Saving of costs on DigitalOcean ([Ashish Padhy](https://github.com/shurtu-gal)): AsyncAPI was running out of credits too fast, and with [proper deployment changes](https://github.com/asyncapi/server-api/issues/317), it's not the case anymore. + +- GitHub Action refactored from scratch to use CLI ([Ashish Padhy](https://github.com/shurtu-gal)): Simplification is always a driver for innovation. Now official GitHub Action from AsyncAPI supports not only AsyncAPI Generator but also 1:1 all features from the CLI. + +- Not just any but AMAZING [cheat sheet poster](https://github.com/asyncapi/website/issues/425#issuecomment-2121214509) ([Aishat Muibudeen](https://github.com/Mayaleeeee)): It is not only available [for download](https://asyncapi.com/cheatsheet), but is also used at AsyncAPI conferences. + +![](/img/posts/bounty-program/362263381-acc75432-0f58-4c96-a65f-f172d34ee4ec.jpg) + + +### Benefits for AsyncAPI Maintainers + +The Bounty Program gives AsyncAPI Maintainers the possibility: + +- To announce a financial reward for GitHub issues that are currently in demand by the maintained project or the AsyncAPI Initiative as a whole, on which AsyncAPI Maintainers can either work and get rewarded themselves or delegate those issues to regular contributors who have more time and/or the necessary expertise. + + +### Benefits for Bounty Program Participants + +Typical benefits of the Bounty Program for its Participants who are in the early stages of their career are: + +- Development of a better approach to the evaluation of issues (it's fun reading messages from two months ago saying, '1-2 weeks left'.) + +- First/differing working experience (fully asynchronous distributed teams are still rare, unlike partially asynchronous distributed ones.) + +- Development of the possibility to showcase to the potential employer real-world work not obscured by an NDA. + + +With all that said, join a finally sure way to directly sponsor (and get rewarded for) FOSS development. + +Giggly thing as a finishing touch: [PR](https://github.com/asyncapi/website/pull/3111/files) for a bug due to which several lines were output incorrectly to the front end. + +Co-authored-by: [Lukasz Gornicki](https://github.com/derberg) diff --git a/markdown/blog/asyncapi-say-hi-to-triggermesh.md b/markdown/blog/asyncapi-say-hi-to-triggermesh.md index 68bbfc9c101..6f2709e1e46 100644 --- a/markdown/blog/asyncapi-say-hi-to-triggermesh.md +++ b/markdown/blog/asyncapi-say-hi-to-triggermesh.md @@ -10,7 +10,6 @@ authors: link: https://twitter.com/j_michaux byline: Product at TriggerMesh excerpt: TriggerMesh makes it easy to reliably pipe events from any source to any destination. Let's use it to read from AsyncAPI channels, and see how to autogenerate the TriggerMesh config. -featured: true --- This tutorial demonstrates how to use AsyncAPI with TriggerMesh. It shows how the two play nicely together because TriggerMesh can easily ingest, transform, filter, and route events from channels defined in an AsyncAPI definition. This is one of many possible ways to use the two technologies together. This post assumes you have basic knowledge of AsyncAPI already, but are potentially new to TriggerMesh. diff --git a/markdown/blog/asyncapi-website-migration.md b/markdown/blog/asyncapi-website-migration.md index 5d159e9aef6..2229d79765b 100644 --- a/markdown/blog/asyncapi-website-migration.md +++ b/markdown/blog/asyncapi-website-migration.md @@ -13,7 +13,6 @@ authors: link: https://ashmit.dev/ byline: Modelina Website Maintainer excerpt: 'Migration journey of the AsyncAPI Website, features introduced, and future plans.' -featured: true --- We're thrilled to announce the successful migration of the AsyncAPI website from JavaScript and Next.js v12 to TypeScript and Next.js v14! This exciting upgrade unlocks a new chapter for the website, paving the way for improved scalability, streamlined feature implementation, and the powerful capabilities of Next.js. As a bonus, this migration also enabled a well-documented codebase and streamlined our testing process by reducing the reliance on Cypress tests. In this blog post, we'll delve into the exciting journey behind the migration and share what's new on the website. I'll share insights into our team's efforts, the research and planning involved, the challenges we tackled, the valuable lessons learned, and what exciting plans lie ahead for the AsyncAPI website. diff --git a/markdown/blog/beyond-boundaries.md b/markdown/blog/beyond-boundaries.md index 590a28271f6..155b85db0a8 100644 --- a/markdown/blog/beyond-boundaries.md +++ b/markdown/blog/beyond-boundaries.md @@ -12,8 +12,7 @@ authors: - name: Azeez Elegbede photo: /img/avatars/ace.webp link: https://twitter.com/_acebuild - byline: AsyncAPI Preacher -featured: true + byline: AsyncAPI Preacher --- In 2022 we piloted our innovative mentorship program that focuses on open-source software(OSS). We envisioned a platform where aspiring developers could learn, grow, and contribute to exciting projects while receiving guidance from experienced mentors. diff --git a/markdown/blog/conference-2022.md b/markdown/blog/conference-2022.md index 751094544f8..b6033ba376c 100644 --- a/markdown/blog/conference-2022.md +++ b/markdown/blog/conference-2022.md @@ -5,7 +5,6 @@ type: Conference tags: - Conference cover: /img/posts/conference-2022.webp -featured: true authors: - name: Azeez Elegbede photo: /img/avatars/ace.webp diff --git a/markdown/blog/conference-2023.md b/markdown/blog/conference-2023.md index fcf01bc626a..c3a7e352e00 100644 --- a/markdown/blog/conference-2023.md +++ b/markdown/blog/conference-2023.md @@ -11,7 +11,6 @@ authors: link: https://www.linkedin.com/in/v-thulisile-sibanda/ byline: AsyncAPI Community Manager excerpt: In 2023, we hosted our very first in-person conference edition. Find out how it all went down! -featured: true --- For three consecutive years, we have hosted online conferences, and in 2023, we decided to take it up a notch and move to in-person events. diff --git a/markdown/blog/gravitee-annoucement.md b/markdown/blog/gravitee-annoucement.md index 8fb4f4e30cd..252ee3e2a46 100644 --- a/markdown/blog/gravitee-annoucement.md +++ b/markdown/blog/gravitee-annoucement.md @@ -11,7 +11,6 @@ authors: link: https://www.linkedin.com/in/atinuke-oluwabamikemi-kayode-5b838b1b7/ byline: AsyncAPI Community Marketing Specialist excerpt: 'Gravitee Sponsorship Announcement' -featured: true --- ## Gravitee Sponsorship Announcement diff --git a/markdown/blog/hacktoberfest-2022.md b/markdown/blog/hacktoberfest-2022.md index 4832735976c..6dc75e08357 100644 --- a/markdown/blog/hacktoberfest-2022.md +++ b/markdown/blog/hacktoberfest-2022.md @@ -5,7 +5,6 @@ type: Community tags: - Hacktoberfest cover: /img/posts/asyncapiXhacktoberfest.webp -featured: true authors: - name: Azeez Elegbede photo: /img/avatars/ace.webp diff --git a/markdown/blog/helsinki-and-community.md b/markdown/blog/helsinki-and-community.md new file mode 100644 index 00000000000..ffb47a8f82a --- /dev/null +++ b/markdown/blog/helsinki-and-community.md @@ -0,0 +1,88 @@ +--- +title: "AsyncAPI Conference Helsinki and the API Specs and Standards Concept" +date: 2024-09-13T06:00:00+01:00 +type: Communication +tags: + - Conference +cover: /img/posts/helsinki-and-community/booth-top.webp +authors: + - name: Lukasz Gornicki + photo: /img/avatars/lpgornicki.webp + link: https://twitter.com/derberq + byline: AsyncAPI Executive Director +excerpt: 'Conferences are great. They bring communities together and give people a platform to share their experiences. But is that enough?' +featured: true +--- + +## How It All Started + +After three years of hosting online conferences (2020-2022), the AsyncAPI community felt it was time for something different— an in-person event. We wanted to meet people face-to-face, to confirm that behind the virtual interactions were real humans, the ones you could have meaningful conversations with, not bots! + +In 2023, we organized multiple events under the brand `AsyncAPI Conf on Tour`. One of them took place at [APIDays Paris](https://www.apidays.global/paris2023/), made possible by the amazing folks behind [APIDays](https://www.apidays.global/), who share our belief in the future of strong API specifications and standards. + +It was a fantastic opportunity, but we had one major concern—how do we find our community members in an event with thousands of attendees? How do we have meaningful conversations? And how do we engage with people who don’t know about AsyncAPI yet? +As you probably know, conference talks end, and people scatter. It’s easy to lose them in the crowd. + +One of the best places to meet people at conferences is at the sponsor booths. But as an open-source, community-driven project, we don’t have the budget for that kind of setup. + +Once again, [APIDays](https://www.apidays.global/) came to the rescue and offered us a booth. + +We decided to take it one step further—not just a booth for AsyncAPI, but a shared space for other open-source communities. At Paris 2023, we organized the first `API Specs & Standards` booth, bringing together AsyncAPI, OpenAPI, and JSON Schema experts. We created a vendor-neutral, safe space for knowledge exchange, where experts from different companies shared their expertise without pushing for their products. + +## AsyncAPI Conf on Tour at APIDays Helsinki 2024 + +Our next stop was [APIDays Helsinki 2024](https://www.apidays.global/helsinki_and_north/). + +Hugo kicked things off with a great introduction to the AsyncAPI spec and later wrapped up the track with an excellent session on testing event-driven architectures. + +
+ +Jonas followed with a detailed overview of the AsyncAPI tooling ecosystem, showcasing the various tools built around the specification to support developers working with AsyncAPI documents. + +
+ +I then presented an overview of AsyncAPI use cases, demonstrating how different companies use AsyncAPI in production, all based on real data we’ve gathered over the years. You can explore all of this in our [AsyncAPI case studies](/casestudies). + +
+ +The talks were engaging, and the questions that followed were great. Slides from the talks are [available for download](https://drive.google.com/drive/folders/1nY7dZF8WFXZ3r2rCWJDDoT2C_GMfQJMV). But the best, most technical, and insightful conversations happened at the `API Specs and Standards` booth. We teamed up with friends from the OpenAPI Initiative and had deep, meaningful discussions. + +
+ +## September 18-19 in London + +I won’t be attending the London event this year, but plenty of other folks will, especially at the `API Specs and Standards` booth. I hope you all have as much fun there as we did in Helsinki! + +
+ +If you haven’t grabbed your ticket yet, AsyncAPI community members can get free passes. Just [check out the agenda and reserve your spot](https://conference.asyncapi.com/venue/London). + +## December in Paris and the future of the Booth + +Looking ahead to December, we’ll have some free passes for the Paris event too. But honestly, the best experience is joining as a speaker. Not only do you get a free pass, but you also get to attend the speaker’s party the night before the event. Most importantly, it’s a unique opportunity to share your story with the wider [AsyncAPI](https://conference.asyncapi.com/venue/Paris) community. CfP is still open. + +Of course, we’ll have a booth again. This time, it won’t just be AsyncAPI and OpenAPI folks—our friends from JSON Schema will join too. + +Since it’s the fourth time we’ll be hosting this booth, I have a feeling it’s time to take things up a notch. We need to be more organized, include more community members, and maybe even secure some dedicated funding. A rebranding could be in order, too—perhaps renaming the booth to `Open API Standards`. We could also broaden the scope to include experts from the open-source tooling ecosystem that builds on top of these standards and operates under open governance. + +Enjoy! diff --git a/markdown/blog/new-asyncapi-tools-page.md b/markdown/blog/new-asyncapi-tools-page.md index 945d65a2da5..3d6d499eeb6 100644 --- a/markdown/blog/new-asyncapi-tools-page.md +++ b/markdown/blog/new-asyncapi-tools-page.md @@ -12,7 +12,6 @@ authors: link: https://twitter.com/AksNema byline: AsyncAPI Maintainer and Dev Akshat Nema excerpt: "Announcing our newly released AsyncAPI tools dashboard!" -featured: true --- We already know that the present list of tools used inside AsyncAPI is presented on [AsyncAPI Tools Overview](/docs/tools) and it is manually maintained inside the GitHub repository. All the tools are sorted according to the different categories in which they are used and maintained by the contributors. But we don't have a way to filter the tools according to our interest 🤔, like languages, technologies used in it, open-source tools, etc. Also, what if you want to add your tool to the list, what you will do 🤔? Do you have to create a PR? diff --git a/markdown/blog/release-notes-2.6.0.md b/markdown/blog/release-notes-2.6.0.md index d5afd8cc089..73d494d1643 100644 --- a/markdown/blog/release-notes-2.6.0.md +++ b/markdown/blog/release-notes-2.6.0.md @@ -12,7 +12,6 @@ authors: link: https://twitter.com/acethecreator byline: Software Engineer & Open-Source Advocate excerpt: "The release of AsyncAPI 2.6 added an exciting feature which is the support for Apache Pulsar" -featured: true --- The new version of the AsyncAPI specification - 2.6.0 - is now available. diff --git a/markdown/blog/socketio-automatic-docs.md b/markdown/blog/socketio-automatic-docs.md index 0cdab23d6d3..df775f6d224 100644 --- a/markdown/blog/socketio-automatic-docs.md +++ b/markdown/blog/socketio-automatic-docs.md @@ -1,7 +1,6 @@ --- title: Flask-SocketIO Automated Documentation and Validation date: 2023-03-02T06:00:00+01:00 -featured: true type: Engineering tags: ['Python','SocketIO','Flask-SocketIO'] cover: /img/posts/socketio-automatic-docs/cover.webp diff --git a/markdown/blog/the-new-era-approaches.md b/markdown/blog/the-new-era-approaches.md index 0f051ecb2ed..e3818f80ade 100644 --- a/markdown/blog/the-new-era-approaches.md +++ b/markdown/blog/the-new-era-approaches.md @@ -12,7 +12,6 @@ authors: photo: /img/avatars/jonaslagoni.webp link: https://www.linkedin.com/in/jonaslagoni/ excerpt: "An update around AsyncAPI 3.0, where we are, what is remaining, release schedule, and a first look at 3.0" -featured: true --- Back in [March 2022](https://www.asyncapi.com/blog/async-api-spec-3.0-release), you heard the first official words around AsyncAPI 3.0. Since then, a lot of people have been working diligently across many expertise to bring it to life. And with its current state, it's finally time to give an update on the progress. diff --git a/markdown/docs/concepts/asyncapi-document/adding-bindings.md b/markdown/docs/concepts/asyncapi-document/adding-bindings.md index ef5d75de346..7380fc5c30a 100644 --- a/markdown/docs/concepts/asyncapi-document/adding-bindings.md +++ b/markdown/docs/concepts/asyncapi-document/adding-bindings.md @@ -3,7 +3,9 @@ title: Adding bindings weight: 260 --- -Bindings in AsyncAPI provide a way to add protocol-specific information to the AsyncAPI documentation. They can be added to different document parts, such as servers, channels, or messages; they specify standard details specific to a particular protocol. The purpose of bindings is to enhance the API's understanding and usage by providing additional context and configuration options for different protocols. +import BindingsOverview from '../../../../assets/docs/fragments/bindings-overview.md' + + The following diagram highlights the sections where bindings can be implemented: diff --git a/markdown/docs/concepts/asyncapi-document/structure.md b/markdown/docs/concepts/asyncapi-document/structure.md index 6beb3d9b865..9b3d9fb9be2 100644 --- a/markdown/docs/concepts/asyncapi-document/structure.md +++ b/markdown/docs/concepts/asyncapi-document/structure.md @@ -351,7 +351,7 @@ operations: The `components` field allows for the definition of reusable structures or definitions applicable across various sections of your document. Items detailed within `components` only become part of the API when explicitly referenced by properties external to this field. Utilize it to avoid repetition and enhance the document's maintainability. -Key components of the `channels` field include: +Key components of the `components` field include: - `schemas`: An object to hold the reusable [Schema Object](/docs/reference/specification/latest#schemaObject). - `servers`: An object to hold the reusable [Server Objects](/docs/reference/specification/latest#serverObject). diff --git a/markdown/docs/reference/bindings/_section.md b/markdown/docs/reference/bindings/_section.md new file mode 100644 index 00000000000..1b810dd42e3 --- /dev/null +++ b/markdown/docs/reference/bindings/_section.md @@ -0,0 +1,4 @@ +--- +title: Bindings +weight: 15 +--- diff --git a/markdown/docs/reference/bindings/index.md b/markdown/docs/reference/bindings/index.md new file mode 100644 index 00000000000..314c533f0ae --- /dev/null +++ b/markdown/docs/reference/bindings/index.md @@ -0,0 +1,18 @@ +--- +title: Overview +weight: 15 +--- + +## Overview + +import BindingsOverview from '../../../../assets/docs/fragments/bindings-overview.md' + + + +## Usage in an AsyncAPI document + +To learn how to add bindings to your AsyncAPI document, read [Adding bindings](/docs/concepts/asyncapi-document/adding-bindings) concept document, or read the guide about using [Kafka bindings](/docs/tutorials/kafka/bindings-with-kafka). + +## Contributing to bindings + +Bindings are maintained by different community members that know and use given protocol and technology in production. If something can be improved, or some new binding is needed, open an issue in [bindings repository](https://github.com/asyncapi/bindings). diff --git a/markdown/docs/tools/cli/usage.md b/markdown/docs/tools/cli/usage.md index 7d40f79d64f..e92b7e49727 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.3.11 linux-x64 node-v18.20.4 +@asyncapi/cli/2.4.0 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.3.11/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/analytics.ts)_ +_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/context/index.ts)_ +_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/context/add.ts)_ +_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/context/current.ts)_ +_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/context/edit.ts)_ +_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/context/init.ts)_ +_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/context/list.ts)_ +_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/context/remove.ts)_ +_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.4.0/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.3.11/src/commands/config/context/use.ts)_ +_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.4.0/src/commands/config/context/use.ts)_ ## `asyncapi config versions` @@ -304,29 +304,34 @@ DESCRIPTION Show versions of AsyncAPI tools used ``` -_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.3.11/src/commands/config/versions.ts)_ +_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.4.0/src/commands/config/versions.ts)_ ## `asyncapi convert [SPEC-FILE]` -Convert asyncapi documents older to newer versions +Convert asyncapi documents older to newer versions or OpenAPI documents to AsyncAPI ``` USAGE - $ asyncapi convert [SPEC-FILE] [-h] [-o ] [-t ] + $ asyncapi convert [SPEC-FILE] -f openapi|asyncapi [-h] [-o ] [-t ] [-p client|server] ARGUMENTS SPEC-FILE spec path, url, or context-name FLAGS + -f, --format=