From 6ab6cc64fd2eeeb8b6bd4a5d58f01a5f5b40bca5 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 17 Jun 2023 02:30:57 +0200 Subject: [PATCH 01/51] chore: update meetings.json and newsrooom_videos.json (#1799) --- config/meetings.json | 6 -- dashboard.json | 185 ++++++++++++++++--------------------------- 2 files changed, 70 insertions(+), 121 deletions(-) diff --git a/config/meetings.json b/config/meetings.json index 80432da1f84..6dc62d86fb4 100644 --- a/config/meetings.json +++ b/config/meetings.json @@ -5,12 +5,6 @@ "url": "https://github.com/asyncapi/community/issues/624", "date": "2023-03-15T16:00:00.000Z" }, - { - "title": "Career Empowerment and Embracing Equity in Tech", - "calLink": "https://www.google.com/calendar/event?eid=aGc1cDIybTM5MWtsdGFmMjNhOWdqY2MwYzggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/625", - "date": "2023-03-08T14:00:00.000Z" - }, { "title": "Spec 3.0 Meeting", "calLink": "https://www.google.com/calendar/event?eid=bjE2ZTdnZGJ1bHNxMWhrcW9rcjh0bGRxN3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", diff --git a/dashboard.json b/dashboard.json index a6eb4638d01..8a91a1cf5c6 100644 --- a/dashboard.json +++ b/dashboard.json @@ -11,6 +11,17 @@ "labels": [], "score": 22.68679251119144 }, + { + "id": "I_kwDOBGu-185CELGB", + "isPR": false, + "isAssigned": false, + "title": "Work on 3.0 release", + "author": "jonaslagoni", + "resourcePath": "/asyncapi/spec/issues/691", + "repo": "asyncapi/spec", + "labels": [], + "score": 21.538094156194408 + }, { "id": "MDU6SXNzdWU5OTMxODc5ODM=", "isPR": false, @@ -27,17 +38,6 @@ ], "score": 20.96374497869589 }, - { - "id": "I_kwDOBGu-185CELGB", - "isPR": false, - "isAssigned": false, - "title": "Work on 3.0 release", - "author": "jonaslagoni", - "resourcePath": "/asyncapi/spec/issues/691", - "repo": "asyncapi/spec", - "labels": [], - "score": 20.67657038994663 - }, { "id": "I_kwDOGJ23c85V9C3c", "isPR": false, @@ -54,17 +54,6 @@ ], "score": 19.815046623698855 }, - { - "id": "PR_kwDOE8Qh385SnNFz", - "isPR": true, - "isAssigned": false, - "title": "chore(website): add info for the general options", - "author": "SumantxD", - "resourcePath": "/asyncapi/modelina/pull/1398", - "repo": "asyncapi/modelina", - "labels": [], - "score": 19 - }, { "id": "I_kwDODou01c5AqLB8", "isPR": false, @@ -81,30 +70,6 @@ ], "score": 18.37917367995256 }, - { - "id": "I_kwDOG115t85D93P0", - "isPR": false, - "isAssigned": true, - "title": "Website UI Kit design/dev project", - "author": "mcturco", - "resourcePath": "/asyncapi/design-system/issues/4", - "repo": "asyncapi/design-system", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "gsoc", - "color": "F4D03F" - }, - { - "name": "🎨 design", - "color": "0D67D3" - } - ], - "score": 17.517649913704783 - }, { "id": "PR_kwDOBW5R_c5KIyGW", "isPR": true, @@ -113,28 +78,8 @@ "author": "sambhavgupta0705", "resourcePath": "/asyncapi/website/pull/1349", "repo": "asyncapi/website", - "labels": [ - { - "name": "📑 docs", - "color": "E50E99" - }, - { - "name": "area/docs", - "color": "e50e99" - } - ], - "score": 15.220253203710714 - }, - { - "id": "PR_kwDOCoBobc5I0WzT", - "isPR": true, - "isAssigned": false, - "title": "docs: document rules", - "author": "magicmatatjahu", - "resourcePath": "/asyncapi/parser-js/pull/700", - "repo": "asyncapi/parser-js", "labels": [], - "score": 14.645904026212197 + "score": 16.36895155870775 }, { "id": "PR_kwDODCuNRs5Nh35U", @@ -147,6 +92,37 @@ "labels": [], "score": 14.358729437462937 }, + { + "id": "PR_kwDOBW5R_c5Jw5C6", + "isPR": true, + "isAssigned": true, + "title": "docs: new style guide - Inclusive Language", + "author": "BhaswatiRoy", + "resourcePath": "/asyncapi/website/pull/1327", + "repo": "asyncapi/website", + "labels": [], + "score": 14.07155484871368 + }, + { + "id": "PR_kwDOBW5R_c5J9Eji", + "isPR": true, + "isAssigned": true, + "title": "docs: new style guide - Grammar", + "author": "Arya-Gupta", + "resourcePath": "/asyncapi/website/pull/1343", + "repo": "asyncapi/website", + "labels": [ + { + "name": "📑 docs", + "color": "E50E99" + }, + { + "name": "area/docs", + "color": "e50e99" + } + ], + "score": 13.78438025996442 + }, { "id": "PR_kwDOFDnrNc5RUbi_", "isPR": true, @@ -159,18 +135,39 @@ "score": 13.497205671215161 }, { - "id": "PR_kwDOE8Qh385SsTxJ", + "id": "I_kwDOCVQpZM5M_dcV", + "isPR": false, + "isAssigned": false, + "title": "DocsUI: Messages Object output", + "author": "mcturco", + "resourcePath": "/asyncapi/asyncapi-react/issues/618", + "repo": "asyncapi/asyncapi-react", + "labels": [], + "score": 12.922856493716644 + }, + { + "id": "PR_kwDOBGu-185KHmXZ", "isPR": true, "isAssigned": false, - "title": "chore: added java options to playground #1396", - "author": "SumantxD", - "resourcePath": "/asyncapi/modelina/pull/1400", - "repo": "asyncapi/modelina", + "title": "feat: new traits merge mechanism", + "author": "magicmatatjahu", + "resourcePath": "/asyncapi/spec/pull/907", + "repo": "asyncapi/spec", "labels": [], - "score": 13 + "score": 12.061332727468868 } ], "goodFirstIssues": [ + { + "id": "I_kwDOFLhIt85o9dDJ", + "title": "Add 2023 mentorship directory", + "isAssigned": false, + "resourcePath": "/asyncapi/community/issues/753", + "repo": "asyncapi/community", + "author": "AceTheCreator", + "area": "Unknown", + "labels": [] + }, { "id": "I_kwDOFLhIt85oSfWg", "title": "As A user, the CI should prevent me schedule an adhoc meeting in the past", @@ -186,29 +183,6 @@ } ] }, - { - "id": "I_kwDOE8Qh385oPFUl", - "title": "Add Java options to the playground", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1396", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "Unknown", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "Java generator", - "color": "d4c5f9" - }, - { - "name": "website", - "color": "57A793" - } - ] - }, { "id": "I_kwDOE8Qh385nTDiB", "title": "Add descriptions for options in playground", @@ -653,25 +627,6 @@ } ] }, - { - "id": "I_kwDOCoBobc5KYpv0", - "title": "Document how to fix randomly failing tests during development", - "isAssigned": false, - "resourcePath": "/asyncapi/parser-js/issues/558", - "repo": "asyncapi/parser-js", - "author": "derberg", - "area": "docs", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "stale", - "color": "ededed" - } - ] - }, { "id": "I_kwDOBW5R_c5IRxcq", "title": "[📑 Docs]: update docs issues in ALL repos that are missing the `area/docs` label ", From 0b0ab18cf55ae6fb2bb022f717f66897e88a89b6 Mon Sep 17 00:00:00 2001 From: Aadrika Bhargava <64789514+reachaadrika@users.noreply.github.com> Date: Sat, 17 Jun 2023 16:28:36 +0530 Subject: [PATCH 02/51] feat: adding unit tests for typography component (#1793) Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com> --- components/typography/Paragraph.js | 2 +- components/typography/TextLink.js | 2 +- cypress/test/typography/Heading.cy.js | 25 +++++++++++++++++++ cypress/test/typography/Paragraph.cy.js | 32 ++++++++++++++++++++++++ cypress/test/typography/TextLink.cy.js | 33 +++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 cypress/test/typography/Heading.cy.js create mode 100644 cypress/test/typography/Paragraph.cy.js create mode 100644 cypress/test/typography/TextLink.cy.js diff --git a/components/typography/Paragraph.js b/components/typography/Paragraph.js index 6da9faa1b63..c99b621d5d7 100644 --- a/components/typography/Paragraph.js +++ b/components/typography/Paragraph.js @@ -23,6 +23,6 @@ export default function Paragraph({ } return ( -

{children}

+

{children}

) } \ No newline at end of file diff --git a/components/typography/TextLink.js b/components/typography/TextLink.js index 2810218811e..a9782b91548 100644 --- a/components/typography/TextLink.js +++ b/components/typography/TextLink.js @@ -14,7 +14,7 @@ export default function TextLink({ <> {' '} - + {children} diff --git a/cypress/test/typography/Heading.cy.js b/cypress/test/typography/Heading.cy.js new file mode 100644 index 00000000000..9081127df4b --- /dev/null +++ b/cypress/test/typography/Heading.cy.js @@ -0,0 +1,25 @@ +import { mount } from '@cypress/react'; +import Heading from '../../../components/typography/Heading' +describe('Heading Component', () => { + beforeEach(() => { + cy.mount(Default Heading); + }); + + it('renders the heading with the default props', () => { + cy.get('h2').should('have.class', 'text-primary-800'); + cy.get('h2').should( 'have.class','font-heading text-heading-md font-bold tracking-heading md:text-heading-lg' ); + cy.get('h2').should('contain', 'Default Heading'); + }); + + it('renders the heading with custom props', () => { + cy.mount( + + Heading with custom styles + + ); + cy.get('h3').should('have.class', 'text-red-500'); + cy.get('h3').should( 'have.class','font-heading text-heading-sm font-semibold tracking-heading'); + cy.get('h3').should('contain', 'Heading with custom styles'); + }); + }); + \ No newline at end of file diff --git a/cypress/test/typography/Paragraph.cy.js b/cypress/test/typography/Paragraph.cy.js new file mode 100644 index 00000000000..2d30074acd8 --- /dev/null +++ b/cypress/test/typography/Paragraph.cy.js @@ -0,0 +1,32 @@ +import { mount } from '@cypress/react'; +import Paragraph from '../../../components/typography/Paragraph'; +describe('Paragraph Component', () => { + beforeEach(() => { + cy.mount( + + Default Paragraph + + ); + }); + + it('renders the paragraph with the default props', () => { + cy.get('[data-testid="Paragraph-test" ]').should('have.class', 'text-gray-700'); + cy.get('[data-testid="Paragraph-test" ]').should('have.class', 'text-lg'); + cy.get('[data-testid="Paragraph-test" ]').should('have.class', 'font-bold'); + cy.get('[data-testid="Paragraph-test" ]').should('contain', 'Default Paragraph'); + }); + + it('renders the paragraph with custom props', () => { + cy.mount( + + Paragraph with custom styles + + ); + + cy.get('[data-testid="Paragraph-test" ]').should('have.class', 'text-blue-500'); + cy.get('[data-testid="Paragraph-test" ]').should('have.class', 'text-md'); + cy.get('[data-testid="Paragraph-test" ]').should('have.class', 'font-semibold'); + cy.get('[data-testid="Paragraph-test" ]').should('contain', 'Paragraph with custom styles'); + }); + }); + \ No newline at end of file diff --git a/cypress/test/typography/TextLink.cy.js b/cypress/test/typography/TextLink.cy.js new file mode 100644 index 00000000000..4e19c7f23e8 --- /dev/null +++ b/cypress/test/typography/TextLink.cy.js @@ -0,0 +1,33 @@ +import { mount } from '@cypress/react'; +import TextLink from '../../../components/typography/TextLink' +describe('TextLink Component', () => { + it('renders a Textlink with the provided props and content', () => { + const href = '/test'; + const className = 'custom-class'; + const target = '_blank'; + const id = 'test-link'; + const children = 'Test Link'; + + cy.mount( + + {children} + + ); + + cy.get('[data-testid="TextLink-href" ]') + .should('have.attr', 'href', href) + .should('have.class', 'text-secondary-500') + .should('have.class', 'underline') + .should('have.class', 'hover:text-gray-800') + .should('have.class', 'font-medium') + .should('have.class', 'transition') + .should('have.class', 'ease-in-out') + .should('have.class', 'duration-300') + .should('have.class', className) + .should('have.attr', 'target', target) + .should('have.attr', 'rel', 'noreferrer noopener') + .should('have.attr', 'id', id) + .should('contain', children); + }); + }); + \ No newline at end of file From 0e6fcabad00352b9ef79e5df8cb6c7ad12d351ca Mon Sep 17 00:00:00 2001 From: Aadrika Bhargava <64789514+reachaadrika@users.noreply.github.com> Date: Sat, 17 Jun 2023 17:58:49 +0530 Subject: [PATCH 03/51] feat: adding unit tests for docsCards and feature folders (#1763) Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com> --- components/docs/DocsCards.js | 12 +++--- components/features/FeatureList.js | 50 ++++++++++++++++++++++++ components/features/index.jsx | 62 ++++-------------------------- cypress/test/docs/DocsCards.cy.js | 46 ++++++++++++++++++++++ cypress/test/features/index.cy.js | 29 ++++++++++++++ 5 files changed, 139 insertions(+), 60 deletions(-) create mode 100644 components/features/FeatureList.js create mode 100644 cypress/test/docs/DocsCards.cy.js create mode 100644 cypress/test/features/index.cy.js diff --git a/components/docs/DocsCards.js b/components/docs/DocsCards.js index 39aa1bd733a..8262e37ac97 100644 --- a/components/docs/DocsCards.js +++ b/components/docs/DocsCards.js @@ -6,10 +6,12 @@ import { buckets } from '../data/buckets'; export function DocsCards() { return ( -
+
{buckets.map(card => ( + ))} +
); } @@ -17,17 +19,17 @@ export function DocsCards() { function Card({ title, description, link, className, Icon }) { return ( - +
-
+
-
- +
+
{title}
diff --git a/components/features/FeatureList.js b/components/features/FeatureList.js new file mode 100644 index 00000000000..c8fec12b78c --- /dev/null +++ b/components/features/FeatureList.js @@ -0,0 +1,50 @@ +export const features = [ + { + name: "Specification", + description: + "Allows you to define the interfaces of asynchronous APIs and is protocol agnostic.", + links: [{ label: "Documentation", href: "docs/specifications/latest", id:'whyasyncapi-spec-documentation-link' }], + }, + { + name: "Document APIs", + description: + "Use our tools to generate documentation at the build level, on a server, and on a client.", + links: [ + { + label: "HTML Template", + href: "https://github.com/asyncapi/html-template", + id:'whyasyncapi-apis-htmltemplate-link' + }, + { + label: "React Component", + href: "https://github.com/asyncapi/asyncapi-react/", + id:'whyasyncapi-apis-reactcomponents-link' + }, + ], + }, + { + name: "Code Generation", + description: + "Generate documentation, Code (TypeScript, Java, C#, etc), and more out of your AsyncAPI files.", + links: [{ label: "Generator", href: "tools/generator", id:'whyasyncapi-generation-generator-link' }, { label: "Modelina", href: "tools/modelina", id:'whyasyncapi-generation-modelina-link' }], + }, + { + name: "Community", + description: "We're a community of great people who are passionate about AsyncAPI and event-driven architectures.", + links: [ + { label: "Join our Slack", href: "https://asyncapi.com/slack-invite", id:'whyasyncapi-community-slack-link' }, + ], + }, + { + name: "Open Governance", + description: + "Our Open-Source project is part of Linux Foundation and works under an Open Governance model.", + links: [{ label: "Read more about Open Governance", href: "blog/governance-motivation", id:'whyasyncapi-governance-more-link' }, { label: "TSC Members", href: "community/tsc", id:'whyasyncapi-governance-tsc-link' }], + }, + { + name: "And much more...", + description: + "We have many different tools and welcome you to explore our ideas and propose new ideas to AsyncAPI.", + links: [{ label: "View GitHub Discussions", href: "https://github.com/asyncapi/community/discussions", id:'whyasyncapi-muchmore-github-link' }], + }, + ]; \ No newline at end of file diff --git a/components/features/index.jsx b/components/features/index.jsx index f6c2627ebc9..3ec6b0d00fb 100644 --- a/components/features/index.jsx +++ b/components/features/index.jsx @@ -2,57 +2,7 @@ import Heading from "../typography/Heading"; import Paragraph from "../typography/Paragraph"; import TextLink from "../typography/TextLink"; import Link from 'next/link' - -const features = [ - { - name: "Specification", - description: - "Allows you to define the interfaces of asynchronous APIs and is protocol agnostic.", - links: [{ label: "Documentation", href: "docs/specifications/latest", id:'whyasyncapi-spec-documentation-link' }], - }, - { - name: "Document APIs", - description: - "Use our tools to generate documentation at the build level, on a server, and on a client.", - links: [ - { - label: "HTML Template", - href: "https://github.com/asyncapi/html-template", - id:'whyasyncapi-apis-htmltemplate-link' - }, - { - label: "React Component", - href: "https://github.com/asyncapi/asyncapi-react/", - id:'whyasyncapi-apis-reactcomponents-link' - }, - ], - }, - { - name: "Code Generation", - description: - "Generate documentation, Code (TypeScript, Java, C#, etc), and more out of your AsyncAPI files.", - links: [{ label: "Generator", href: "tools/generator", id:'whyasyncapi-generation-generator-link' }, { label: "Modelina", href: "tools/modelina", id:'whyasyncapi-generation-modelina-link' }], - }, - { - name: "Community", - description: "We're a community of great people who are passionate about AsyncAPI and event-driven architectures.", - links: [ - { label: "Join our Slack", href: "https://asyncapi.com/slack-invite", id:'whyasyncapi-community-slack-link' }, - ], - }, - { - name: "Open Governance", - description: - "Our Open-Source project is part of Linux Foundation and works under an Open Governance model.", - links: [{ label: "Read more about Open Governance", href: "blog/governance-motivation", id:'whyasyncapi-governance-more-link' }, { label: "TSC Members", href: "community/tsc", id:'whyasyncapi-governance-tsc-link' }], - }, - { - name: "And much more...", - description: - "We have many different tools and welcome you to explore our ideas and propose new ideas to AsyncAPI.", - links: [{ label: "View GitHub Discussions", href: "https://github.com/asyncapi/community/discussions", id:'whyasyncapi-muchmore-github-link' }], - }, -]; +import { features } from "./FeatureList"; export default function Features() { return ( @@ -69,14 +19,16 @@ export default function Features() { Improving the current state of Event-Driven Architectures (EDA)
-
    +
      {features.map((feature) => ( -
    • -
      +
    • +
      {feature.name} @@ -86,7 +38,7 @@ export default function Features() { )}
      -
      +
      {feature.links.map((link) => { return ( diff --git a/cypress/test/docs/DocsCards.cy.js b/cypress/test/docs/DocsCards.cy.js new file mode 100644 index 00000000000..8814b497c59 --- /dev/null +++ b/cypress/test/docs/DocsCards.cy.js @@ -0,0 +1,46 @@ +import React from 'react'; +import { mount } from '@cypress/react'; +import { DocsCards } from '../../../components/docs/DocsCards'; +import { buckets } from '../../../components/data/buckets'; + +describe('DocsCards', () => { + beforeEach(() => { + mount(); + }); + + const cards = buckets.map((bucket) => ({ + title: bucket.title, + description: bucket.description, + link: bucket.link, + className: bucket.className, + Icon: bucket.Icon, + })); + + it('renders the correct number of cards', () => { + cy.get('[data-testid="Docs-main-div"] [data-testid="Docs-link"]').should('have.length', cards.length); + }); + + it('renders card titles and descriptions correctly', () => { + cy.get('[data-testid="Docs-main-div"] ').each(($card, index) => { + const card = cards[index]; + cy.wrap($card).within(() => { + cy.get('[data-testid="Docs-div-contents"]').should('contain', card.title); + cy.get('[data-testid="Docs-div-contents"]').should('contain', card.description); + }); + }); + }); + + it('navigates to the correct link on card click', () => { + cy.get('[data-testid="Docs-main-div"]').each(($card, index) => { + const card = cards[index]; + cy.wrap($card).get('[data-testid="Docs-link"]').should('have.attr', 'href', card.link); + }); + }); + + it('renders each icon correctly', () => { + cy.get('[data-testid="Docs-main-div"] ').each(($card, index) => { + const card = cards[index]; + cy.wrap($card).get('[data-testid="Docs-icon"]').should('exist'); + }); + }); +}); diff --git a/cypress/test/features/index.cy.js b/cypress/test/features/index.cy.js new file mode 100644 index 00000000000..71eecd31068 --- /dev/null +++ b/cypress/test/features/index.cy.js @@ -0,0 +1,29 @@ +import React from 'react'; +import { mount } from 'cypress/react'; +import Features from '../../../components/features/index'; +import { features } from '../../../components/features/FeatureList'; +describe('Features Component', () => { + it('renders all features with their names, descriptions, and links', () => { + mount(); + + //check number of features rendered is equal to features array + cy.get('[data-testid="Feature-ul"] [data-testid="Feature-li"]').should('have.length', features.length); // there are 6 features in the list + + features.forEach((feature, index) => { + cy.get('[data-testid="Feature-ul"] [data-testid="Feature-li"]').eq(index).as('feature'); + + cy.get('@feature').within(() => { + cy.get('h3').should('have.text', feature.name); + cy.get('p').should('have.text', feature.description); + + feature.links.forEach((link, linkIndex) => { + cy.get('a').eq(linkIndex).should('have.attr', 'href').then((hrefValue) => { + const formattedHrefValue = hrefValue.replace(/^\//, ''); // remove this / so that the value is equal to link.href + expect(formattedHrefValue).to.equal(link.href); + }); + }); + + }); + }); + }); +}); From e1c31b60e0cf3a88e623eebfd7719e1262dd58cb Mon Sep 17 00:00:00 2001 From: Aadrika Bhargava <64789514+reachaadrika@users.noreply.github.com> Date: Sat, 17 Jun 2023 18:16:25 +0530 Subject: [PATCH 04/51] feat: adding unit tests for community folder (#1761) Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com> --- components/community/Card.js | 10 ++--- components/community/Header.js | 9 +++-- components/community/Hero.js | 14 +++---- components/community/HomeCard.js | 9 +++-- cypress/test/community/Card.cy.js | 55 +++++++++++++++++++++++++++ cypress/test/community/Header.cy.js | 31 +++++++++++++++ cypress/test/community/Hero.cy.js | 30 +++++++++++++++ cypress/test/community/HomeCard.cy.js | 24 ++++++++++++ 8 files changed, 162 insertions(+), 20 deletions(-) create mode 100644 cypress/test/community/Card.cy.js create mode 100644 cypress/test/community/Header.cy.js create mode 100644 cypress/test/community/Hero.cy.js create mode 100644 cypress/test/community/HomeCard.cy.js diff --git a/components/community/Card.js b/components/community/Card.js index 8fdbe1828d1..b5be16046b9 100644 --- a/components/community/Card.js +++ b/components/community/Card.js @@ -15,12 +15,12 @@ export default function SmallHomeCards({icon, tagline, taglineBg, type="large",
      {icon} {tagline}
      -
      +
      {heading}
      -
      +
      -
      +
      @@ -48,7 +48,7 @@ export default function SmallHomeCards({icon, tagline, taglineBg, type="large", {icon} {tagline}
      -
      +
      -
      +
      {description}
      diff --git a/components/community/Header.js b/components/community/Header.js index be4cf8af8ca..b2e092e81a3 100644 --- a/components/community/Header.js +++ b/components/community/Header.js @@ -5,7 +5,7 @@ import Button from '../buttons/Button'; export default function Header({className = ''}) { return ( -
      +
      AsyncAPI Community -
      +
      Welcome to the @@ -21,12 +21,13 @@ export default function Header({className = ''}) {
      -
      +
      We're an OSS community that's passionate about AsyncAPI. Join us in building the future of Event Driven APIs by asking questions, @@ -39,7 +40,7 @@ export default function Header({className = ''}) { text="AsyncAPI Discussions" href="https://github.com/orgs/asyncapi/discussions" target="_blank" - icon={} + icon={} />
      diff --git a/components/community/Hero.js b/components/community/Hero.js index 2efe879338f..64905917ffc 100644 --- a/components/community/Hero.js +++ b/components/community/Hero.js @@ -5,28 +5,28 @@ export default function Hero({ className = '' }) { return ( <>
      -
      -
      +
      +
      {orbitData[0].map((orbit) => (
      - {orbit.alt} + {orbit.alt}
      ))}
      -
      +
      {orbitData[1].map((orbit) => (
      - {orbit.alt} + {orbit.alt}
      ))}
      -
      +
      {orbitData[2].map((orbit) => (
      - {orbit.alt} + {orbit.alt}
      ))}
      diff --git a/components/community/HomeCard.js b/components/community/HomeCard.js index 5a3394d3242..910937de986 100644 --- a/components/community/HomeCard.js +++ b/components/community/HomeCard.js @@ -6,17 +6,18 @@ export default function HomeCards({headline, title, description, btnText, link, return (
      -
      +
      {headline}
      -
      - +
      + {title} {description} -
      +
      diff --git a/cypress/test/community/Card.cy.js b/cypress/test/community/Card.cy.js new file mode 100644 index 00000000000..eaea9262428 --- /dev/null +++ b/cypress/test/community/Card.cy.js @@ -0,0 +1,55 @@ +import { mount } from 'cypress/react'; +import SmallHomeCards from '../../../components/community/Card'; +import React from 'react'; +import IconArrowUp from '../../../components/icons/ArrowUp'; + +describe('SmallHomeCards', () => { + it('renders small card correctly', () => { + const props = { + type: 'small', + icon: , + tagline: 'Tagline', + taglineBg: 'bg-gray-100', + heading: 'Heading', + description: 'Description', + bg: 'bg-white', + btnText: 'Button', + btnBg: 'bg-gray-200', + link: '/path' + }; + + mount( ); + // Testing for small prop classes and styles + + cy.get('[data-testid="Card-heading"]').contains('Heading').should('exist'); + cy.get('[data-testid="Card-desc"]').contains('Description').should('exist'); + cy.get('[data-testid="Card-heading"]').should('have.class','mt-3'); + cy.get('[data-testid="Card-desc"]').should('have.class','mt-2'); + }); + + it('renders large card correctly', () => { + const props = { + type: 'large', + icon: , + tagline: 'Tagline', + taglineBg: 'bg-gray-100', + heading: 'Heading', + description: 'Description', + bg: 'bg-blue-500', + btnText: 'Button', + btnBg: 'bg-gray-200', + link: '/path' + }; + + mount(); + + // Testing for large prop classes and styles + cy.get('[data-testid="Card-heading-lg"]').contains('Heading').should('exist'); + cy.get('[data-testid="Card-desc-lg"]').contains('Description').should('exist'); + cy.get('[data-testid="Card-heading-lg"]').should('have.class','mt-10'); + cy.get('[data-testid="Card-desc-lg"]').should('have.class','mt-6'); + + + }); +}); +// note : props passed can be changed according to the user \ No newline at end of file diff --git a/cypress/test/community/Header.cy.js b/cypress/test/community/Header.cy.js new file mode 100644 index 00000000000..bc99d3bf585 --- /dev/null +++ b/cypress/test/community/Header.cy.js @@ -0,0 +1,31 @@ +import React from 'react'; +import { mount } from 'cypress/react'; +import Header from '../../../components/community/Header'; + +describe('Header Component', () => { + it('renders the Header component correctly', () => { + mount(
      ); + cy.get('[data-testid="Header-hero-heading"]').should('exist'); + cy.get('[data-testid="Header-heading-1"]').should('exist'); + cy.get('[data-testid="Header-heading-2"]').should('exist'); + cy.contains('AsyncAPI Discussions').should('exist'); + + }); + + it('displays the correct text in the Heading components and styles ', () => { + mount(
      ); + cy.get('[data-testid="Header-hero-heading"]').contains('AsyncAPI Community').should('have.class', 'font-bold'); + cy.get('[data-testid="Header-heading-1"]').contains('Welcome to the AsyncAPI Community').should('have.class','title block md:-mt-1 leading-[3rem]'); + cy.get('[data-testid="Header-heading-2"]').contains('We\'re an OSS community').should('have.class','text-slate-500 text-sm') + }); + + it('contains a Button component with the correct props', () => { + mount(
      ); + + cy.contains('AsyncAPI Discussions') + .should('have.attr', 'href', 'https://github.com/orgs/asyncapi/discussions') + .and('have.attr', 'target', '_blank'); + cy.get('[data-testid="Header-IconRocket"]').should('exist'); + + }); +}); diff --git a/cypress/test/community/Hero.cy.js b/cypress/test/community/Hero.cy.js new file mode 100644 index 00000000000..54c80d31cf3 --- /dev/null +++ b/cypress/test/community/Hero.cy.js @@ -0,0 +1,30 @@ +import React from 'react'; +import { mount } from 'cypress/react'; +import Hero from '../../../components/community/Hero' +import orbitData from '../../../config/orbitData.json' + +describe('Hero Component', () => { + beforeEach(() => { + mount(); + }); + + it('renders the complete component' ,() => { + cy.get('[data-testid="orbit-div"]').should('exist') + }) + it('renders the first orbit with orbitData', () => { + cy.get('[data-testid="Hero-first"]').should('exist'); + cy.get('[data-testid="Hero-firstimg"]').should('have.length', orbitData[0].length); + }); + + it('renders the second orbit with orbitData', () => { + cy.get('[data-testid="Hero-second"]').should('exist'); + cy.get('[data-testid="Hero-secondimg"]').should('have.length', orbitData[1].length); + }); + + it('renders the third orbit with orbitData', () => { + cy.get('[data-testid="Hero-third"]').should('exist'); + cy.get('[data-testid="Hero-thirdimg"]').should('have.length', orbitData[2].length); + }); + + +}); diff --git a/cypress/test/community/HomeCard.cy.js b/cypress/test/community/HomeCard.cy.js new file mode 100644 index 00000000000..5ef50f812c4 --- /dev/null +++ b/cypress/test/community/HomeCard.cy.js @@ -0,0 +1,24 @@ +import React from 'react'; +import { mount } from '@cypress/react'; +import HomeCards from '../../../components/community/HomeCard'; + +describe('HomeCards Component', () => { + it('renders correctly', () => { + const props = { + headline: 'Heading Hero', + title: 'Title', + description: ' Description', + btnText: 'Button', + link: 'https://sample.com', + className: 'sample-class', + }; + + mount(); + cy.get('[data-testid="HomeCard-main"]').should('exist'); + cy.get('[data-testid="HomeCard-title"]').should('exist'); + cy.get('[data-testid="HomeCard-button"]').should('exist'); + cy.get(`[href="https://sample.com"]`).should('exist'); + cy.get('.sample-class').should('exist'); + }); +}); +// note : props passed can be changed according to the user \ No newline at end of file From a4006fcbfc023a94ff706621751e984a64b4a19d Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sun, 18 Jun 2023 02:35:12 +0200 Subject: [PATCH 05/51] chore: update meetings.json and newsrooom_videos.json (#1800) --- dashboard.json | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/dashboard.json b/dashboard.json index 8a91a1cf5c6..d0106c02b51 100644 --- a/dashboard.json +++ b/dashboard.json @@ -608,25 +608,6 @@ } ] }, - { - "id": "I_kwDODou01c5TDLWP", - "title": "Unnecessary assertion since it does not change the type of the expression.", - "isAssigned": true, - "resourcePath": "/asyncapi/studio/issues/447", - "repo": "asyncapi/studio", - "author": "AceTheCreator", - "area": "typescript", - "labels": [ - { - "name": "stale", - "color": "ededed" - }, - { - "name": "hacktoberfest", - "color": "5B0291" - } - ] - }, { "id": "I_kwDOBW5R_c5IRxcq", "title": "[📑 Docs]: update docs issues in ALL repos that are missing the `area/docs` label ", From 8bb6f91e73c46039dd6d8e46c6c20f2cdc00f275 Mon Sep 17 00:00:00 2001 From: Aadrika Bhargava <64789514+reachaadrika@users.noreply.github.com> Date: Sun, 18 Jun 2023 15:38:17 +0530 Subject: [PATCH 06/51] feat: adding stylesheets to cypress components (#1802) --- cypress/support/component.js | 1 + 1 file changed, 1 insertion(+) diff --git a/cypress/support/component.js b/cypress/support/component.js index 0d9eef9057d..74a4436ff16 100644 --- a/cypress/support/component.js +++ b/cypress/support/component.js @@ -20,6 +20,7 @@ import './commands' // require('./commands') import { mount } from 'cypress/react' +import '../../styles/globals.css' Cypress.Commands.add('mount', mount) From ebdcd3f2f7f7b3ce14c167e1781c711d69d590dd Mon Sep 17 00:00:00 2001 From: Jonas Lagoni Date: Tue, 20 Jun 2023 16:03:38 +0200 Subject: [PATCH 07/51] chore: adjust address for reply (#1807) --- pages/blog/the-new-era-approaches.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/blog/the-new-era-approaches.md b/pages/blog/the-new-era-approaches.md index 576936e2a82..0f051ecb2ed 100644 --- a/pages/blog/the-new-era-approaches.md +++ b/pages/blog/the-new-era-approaches.md @@ -64,7 +64,7 @@ channels: - $ref: "#/servers/websocket" turnStreetlightOnReplyChannel: - address: null + address: "/" messages: turnOnReply: $ref: "#/components/messages/turnOnReply" From 75da4fbd47c9ef6694055e026657a896136758cb Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 21 Jun 2023 13:38:44 +0200 Subject: [PATCH 08/51] docs(generator): update latest generator documentation (#1816) --- .../docs/tools/generator/asyncapi-document.md | 38 ++++++------ pages/docs/tools/generator/parser.md | 60 +++++++++---------- 2 files changed, 51 insertions(+), 47 deletions(-) diff --git a/pages/docs/tools/generator/asyncapi-document.md b/pages/docs/tools/generator/asyncapi-document.md index 8e487ab74e2..82d1a7d717c 100644 --- a/pages/docs/tools/generator/asyncapi-document.md +++ b/pages/docs/tools/generator/asyncapi-document.md @@ -5,24 +5,25 @@ weight: 40 The **AsyncAPI document** defines a standard, protocol-agnostic interface that describes message-based or event-driven APIs. The AsyncAPI document allows people or machines communicating with one another, to understand the capabilities of an event-driven API without requiring access to the source code, documentation, or inspecting the network traffic. -This document allows you to define your API structures and formats, including channels the end user can subscribe to and the message formats they receive. +This document allows you to define your API structures and formats, including channels the end user can subscribe to and the message formats they receive. The documents describing the message-driven API under the AsyncAPI specification are represented as JSON objects and conform to JSON standards. YAML, a superset of JSON, can also be used to represent an API. -> - To learn how to create an AsyncAPI document or refresh your knowledge about the syntax and structure of the AsyncAPI document, check out our [latest specification documentation](https://www.asyncapi.com/docs/reference/specification/latest). +> - To learn how to create an AsyncAPI document or refresh your knowledge about the syntax and structure of the AsyncAPI document, check out our [latest specification documentation](https://www.asyncapi.com/docs/reference/specification/latest). > - You can develop, validate, and convert the AsyncAPI document to the latest version or preview your AsyncAPI document in a more readable way using the [AsyncAPI Studio](https://studio.asyncapi.com/). In the following sections, you'll learn about the inner working of the generator, what happens once the AsyncAPI document is fed to the generator, and how you can access the content of the document in your template. ## AsyncAPI document generation process -1. The **Generator** receives the **AsyncAPI Document** as input. + +1. The **Generator** receives the **AsyncAPI Document** as input. 2. The **Generator** sends to the **[Parser](parser)** the **asyncapiString** is a stringified version of the original **AsyncAPI Document** to validate and parse it. -3. The **Parser** validates the **AsyncAPI Document** using additional schema-related plugins, either the OpenAPI schema, RAML data types, or Avro schema. -4. If the **Parser** determines that the **AsyncAPI Document** is valid, it manipulates the original JSON/YAML document and provides a set of helper functions in return, bundling them together into an **asyncapi** variable that is an instance of [**AsyncAPIDocument**](https://github.com/asyncapi/parser-js/blob/master/API.md#module_@asyncapi/parser+AsyncAPIDocument). -5. At this point, the **Generator** passes the **originalAsyncAPI** and the **asyncapi** which make up part of the **[Template Context](asyncapi-context)** to the **Render Engine**. +3. The **Parser** validates the **AsyncAPI Document** using additional schema-related plugins, either the OpenAPI schema, RAML data types, or Avro schema. +4. If the **Parser** determines that the **AsyncAPI Document** is valid, it manipulates the original JSON/YAML document and provides a set of helper functions in return, bundling them together into an **asyncapi** variable that is an instance of [**AsyncAPIDocument**](https://github.com/asyncapi/parser-js/blob/master/API.md#module_@asyncapi/parser+AsyncAPIDocument). +5. At this point, the **Generator** passes the **originalAsyncAPI** and the **asyncapi** which make up part of the **[Template Context](template-context)** to the **Render Engine**. 6. The **Template Context** is accessible to the template files that are passed to either the [react](react-render-engine) or [nunjucks](nunjucks-render-engine) **Render Engines**. - -``` mermaid + +```mermaid graph LR A[Template Context] B{Generator} @@ -35,14 +36,17 @@ graph LR B--> | originalAsyncAPI -> Stringified document | A A --> D end - ``` +``` + 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 `originalAyncAPI` .The `asyncapi` functions make it easier to access the contents of AsyncAPI documents in your templates. + +- 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 `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. -### Method 1: `originalAsyncAPI` and template +### Method 1: `originalAsyncAPI` and template + One way of using the contents of the AsyncAPI document inside your template files is by using its stringified version that reflects the same contents as the AsyncAPI document provided as input to the generator. You can access it directly in your templates using the `originalAsyncAPI` variable. You also access it via the [hooks](hooks) `generator.originalAsyncAPI` because `originalAsyncAPI` is also a part of the generator instance that is passed to hooks. ```js @@ -54,7 +58,7 @@ const path = require('path'); function createAsyncapiFile(generator) { const asyncapi = generator.originalAsyncAPI; let extension; - + try { JSON.parse(asyncapi); extension = 'json'; @@ -69,9 +73,9 @@ function createAsyncapiFile(generator) { fs.writeFileSync(asyncapiOutputLocation, asyncapi); ``` - ### Method 2: `asyncapi` and template -A major advantage of using `asyncapi` (which is an instance of `AsyncAPIDocument`) is that it enables the developer to easily access the AsyncAPI documents' content by simply invoking a function. + +A major advantage of using `asyncapi` (which is an instance of `AsyncAPIDocument`) is that it enables the developer to easily access the AsyncAPI documents' content by simply invoking a function. Once the specification YAML or JSON document is passed as input to the generator, it is passed on to the [Parser](parser) library, which then manipulates the asyncAPI document to a more structured document called the `AsyncAPIDocument`. Once the parser returns the document to the generator, the generator passes it to the render engine. The render engine makes the `AsyncAPIDocument` object accessible to your template through the `asyncapi` variable. @@ -80,8 +84,8 @@ For example, if you want to extract the version of your API from AsyncAPI docume In the sample code snippet below, notice how you can access the contents of the AsyncAPI document in your template using `asyncapi` variable from the context: ```js - const apiName = asyncapi.info().title(); - const channels = asyncapi.channels(); +const apiName = asyncapi.info().title(); +const channels = asyncapi.channels(); ``` > To learn about the various instances you can use to access the documents' content, look at the API of the AsyncAPI JavaScript Parser and the structure of [AsyncAPIDocument](https://github.com/asyncapi/parser-js/blob/master/API.md#module_@asyncapi/parser+AsyncAPIDocument) diff --git a/pages/docs/tools/generator/parser.md b/pages/docs/tools/generator/parser.md index 2ff57070ade..1e9a060fde5 100644 --- a/pages/docs/tools/generator/parser.md +++ b/pages/docs/tools/generator/parser.md @@ -5,9 +5,9 @@ weight: 60 ## Parser -The AsyncAPI Parser is a package used to parse and validate the [AsyncAPI documents](asyncapi-document.md) in your Node.js or browser application. These documents can be either in YAML or JSON format. +The AsyncAPI Parser is a package used to parse and validate the [AsyncAPI documents](asyncapi-document) in your Node.js or browser application. These documents can be either in YAML or JSON format. -The Parser validates these documents using dedicated schema-supported plugins. +The Parser validates these documents using dedicated schema-supported plugins. Supported schemas: @@ -19,15 +19,15 @@ Supported schemas: The Parser allows the template developer to easily access schemas provided in the above supported formats. This is because the JavaScript parser converts all of them into JSON schema. -If the document is valid, the Parser returns an `AsyncAPIDocument instance` with a set of helper functions that enable easier access to the contents of the AsyncAPI document. The parser provides dereferenced output. During the dereference process, the AsyncAPI parser substitutes a reference with a full definition. The dereferenced output is always in JSON format. The parser provides a message listing all errors if a document is invalid. The original AsyncAPI document is part of the [Template Context](template-context.md) as the generator also passes the original AsyncAPI document to the template context. +If the document is valid, the Parser returns an `AsyncAPIDocument instance` with a set of helper functions that enable easier access to the contents of the AsyncAPI document. The parser provides dereferenced output. During the dereference process, the AsyncAPI parser substitutes a reference with a full definition. The dereferenced output is always in JSON format. The parser provides a message listing all errors if a document is invalid. The original AsyncAPI document is part of the [Template Context](template-context) as the generator also passes the original AsyncAPI document to the template context. The following AsyncAPI document example has two channels: `channelOne` and `channelTwo`. Each channel has one operation and a single message: ```yaml -asyncapi: '2.5.0' +asyncapi: "2.5.0" info: title: Demo API - version: '1.0.0' + version: "1.0.0" channels: channelOne: publish: @@ -36,14 +36,14 @@ channels: message: name: FirstMessage payload: - id: - type: integer - minimum: 0 - description: Id of the channel - sentAt: - type: string - format: date-time - description: Date and time when the message was sent. + id: + type: integer + minimum: 0 + description: Id of the channel + sentAt: + type: string + format: date-time + description: Date and time when the message was sent. channelTwo: publish: summary: This is the second sample channel @@ -51,36 +51,37 @@ channels: message: name: SecondMessage payload: - id: - type: integer - minimum: 0 - description: Id of the channel - sentAt: - type: string - format: date-time - description: Date and time when the message was sent. + id: + type: integer + minimum: 0 + description: Id of the channel + sentAt: + type: string + format: date-time + description: Date and time when the message was sent. ``` + We can use helper functions provided by the Parser to operate on the above JSON file. For example, we can use the helper method `asyncAPIDocument.channelNames()`, which returns an array of all channel names currently present in the AsyncAPI document. Another example where you can use a helper function is to list out messages present in your JSON file. Instead of fetching a single message one at a time, you can use the function `asyncAPIDocument.allMessages()` that returns the map of all messages in your AsyncAPI document. ```js - const channelNames = asyncAPIDocument.channelNames(); - const messages = asyncAPIDocument.allMessages(); +const channelNames = asyncAPIDocument.channelNames(); +const messages = asyncAPIDocument.allMessages(); ``` -> The Parser gives you access to a number of these [helper functions](https://github.com/asyncapi/parser-js/blob/master/API.md) that you can implement to access the contents of your AsyncAPI document. +> The Parser gives you access to a number of these [helper functions](https://github.com/asyncapi/parser-js/blob/master/API.md) that you can implement to access the contents of your AsyncAPI document. ## AsyncAPI document validation process 1. **AsyncAPI document** is fed as an input to the Generator. 1. Generator sends the AsyncAPI document to the Parser as **asyncapiString**; the stringified version of the original AsyncAPI document. 1. The Parser uses additional plugins such as the OpenAPI, RAML, or Avro schemas to validate custom schemas of message payloads defined in the AsyncAPI document. -1. If the AsyncAPI document is invalid, it throws an error based on the encountered failure type. For example, if the AsyncAPI document is not a string nor a JavaScript object, the Parser throws an `invalid-document-type` error. +1. If the AsyncAPI document is invalid, it throws an error based on the encountered failure type. For example, if the AsyncAPI document is not a string nor a JavaScript object, the Parser throws an `invalid-document-type` error. Similarly, you may encounter errors such as: - - `invalid-json` - - `invalid-yaml` - - `impossible-to-convert-to-json` + - `invalid-json` + - `invalid-yaml` + - `impossible-to-convert-to-json` 1. If the document is valid, the Parser modifies the AsyncAPI document, returns a set of helper functions, and bundles them together into the **asyncapi** variable. These helper functions in the form of an **asyncapi** variable are passed to the **Template Context**. -1. The Template Context passes all of these values to the [**Render Engine**](react-render-engine.md) of your choice. Finally, the Render Engine generates whatever output you may have specified in your template. (i.e. code, documentation, diagrams, pdfs, applications, etc.) +1. The Template Context passes all of these values to the [**Render Engine**](react-render-engine) of your choice. Finally, the Render Engine generates whatever output you may have specified in your template. (i.e. code, documentation, diagrams, pdfs, applications, etc.) ```mermaid graph TD @@ -93,4 +94,3 @@ graph TD ``` > To learn more about the Parser and access all of its features, check out the AsyncAPI [Parser’s GitHub repository](https://github.com/asyncapi/parser-js). - From 03170b2c1c6a0f5b1a91635a119940b6bf98101e Mon Sep 17 00:00:00 2001 From: Florence Njeri <40742916+Florence-Njeri@users.noreply.github.com> Date: Wed, 21 Jun 2023 19:10:44 +0300 Subject: [PATCH 09/51] fix: sanitize code from the TOC (#1204) Co-authored-by: Akshat Nema <76521428+akshatnema@users.noreply.github.com>%0ACo-authored-by: Alejandra Quetzalli %0ACo-authored-by: Lukasz Gornicki --- components/TOC.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/TOC.js b/components/TOC.js index 1593c7f8d08..27fd09fd106 100644 --- a/components/TOC.js +++ b/components/TOC.js @@ -47,7 +47,7 @@ export default function TOC({ href={`#${item.slug}`} key={index} > - {item.content} + {item.content.replaceAll('`', '')} )) } From adbae365f6d36117c8846a7605fdba428c0b08dc Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:17:24 +0200 Subject: [PATCH 10/51] docs: add Florence-Njeri as a contributor for code (#1817) --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 42f54a7f3cc..a52931c5749 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -454,6 +454,15 @@ "contributions": [ "doc" ] + }, + { + "login": "Florence-Njeri", + "name": "Florence Njeri", + "avatar_url": "https://avatars.githubusercontent.com/u/40742916?v=4", + "profile": "https://florence-njeri.github.io/NjeriPortfolio", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 69905cfd898..cae0247a1dc 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ --- -[![All Contributors](https://img.shields.io/badge/all_contributors-45-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-46-orange.svg?style=flat-square)](#contributors-) [![Netlify Status](https://api.netlify.com/api/v1/badges/b2137407-b765-46c4-95b5-a72d9b1592ab/deploy-status)](https://app.netlify.com/sites/asyncapi-website/deploys) @@ -207,6 +207,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Benjamin Rukundo
      Benjamin Rukundo

      💻
      tthijm
      tthijm

      🚇 Cynthia Peter
      Cynthia Peter

      📖 + Florence Njeri
      Florence Njeri

      💻 From 39314d9745381fe9d31801a3af43bf519e947bbf Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 22 Jun 2023 02:32:18 +0200 Subject: [PATCH 11/51] chore: update meetings.json and newsrooom_videos.json (#1819) --- config/newsroom_videos.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json index 2cad4f83764..466d9822c25 100644 --- a/config/newsroom_videos.json +++ b/config/newsroom_videos.json @@ -1,4 +1,10 @@ [ + { + "image_url": "https://i.ytimg.com/vi/DUB3XL_APgs/hqdefault.jpg", + "title": "Spec 3.0 (July 21th 2023)", + "description": "https://github.com/asyncapi/community/issues/737.", + "videoId": "DUB3XL_APgs" + }, { "image_url": "https://i.ytimg.com/vi/mAISwYCZa2I/hqdefault.jpg", "title": "Studio planning", @@ -22,11 +28,5 @@ "title": "Community Meeting, Tuesday June 13th 2023", "description": "https://github.com/asyncapi/community/issues/738.", "videoId": "_zdXm90KvF0" - }, - { - "image_url": "https://i.ytimg.com/vi/52qqKE8jFlI/hqdefault.jpg", - "title": "Spec 3.0 (June 7th 2023)", - "description": "https://github.com/asyncapi/community/issues/734.", - "videoId": "52qqKE8jFlI" } ] \ No newline at end of file From 0f4dfccc232b7a266bde496c800a7ca7ee7e1217 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 22 Jun 2023 09:32:28 +0200 Subject: [PATCH 12/51] docs(cli): update latest cli documentation (#1820) --- pages/docs/tools/cli/usage.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pages/docs/tools/cli/usage.md b/pages/docs/tools/cli/usage.md index 08ee3bb9187..2ce01466cea 100644 --- a/pages/docs/tools/cli/usage.md +++ b/pages/docs/tools/cli/usage.md @@ -29,7 +29,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/0.48.5 linux-x64 node-v18.16.0 +@asyncapi/cli/0.48.6 linux-x64 node-v18.16.0 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -91,7 +91,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./asyncapi.yaml --reference-into-components ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.48.5/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/bundle.ts)_ ## `asyncapi config` @@ -105,7 +105,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.48.5/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/config/index.ts)_ ## `asyncapi config context` @@ -234,7 +234,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.48.5/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -270,7 +270,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.48.5/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/diff.ts)_ ## `asyncapi generate` @@ -284,7 +284,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/v0.48.5/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -408,7 +408,7 @@ DESCRIPTION Creates a new asyncapi file ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.48.5/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -496,7 +496,7 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --output=terminal --no-tty ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.48.5/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/optimize.ts)_ ## `asyncapi start` @@ -510,7 +510,7 @@ DESCRIPTION Start asyncapi studio ``` -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.48.5/src/commands/start/index.ts)_ +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -554,5 +554,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.48.5/src/commands/validate.ts)_ +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/validate.ts)_ From 4c5f359b18b0808696dd4a8caf74d8fa9049bc58 Mon Sep 17 00:00:00 2001 From: Ansh Goyal Date: Thu, 22 Jun 2023 15:59:17 +0530 Subject: [PATCH 13/51] chore: rm modelina files and folders (#1739) Co-authored-by: Lukasz Gornicki --- components/editor/MonacoEditorWrapper.js | 116 ------------ components/modelina/CSharpGenerator.js | 108 ----------- components/modelina/GoGenerator.js | 36 ---- components/modelina/JavaGenerator.js | 202 --------------------- components/modelina/JavaScriptGenerator.js | 36 ---- components/modelina/TypeScriptGenerator.js | 109 ----------- config/modelina-language-options.json | 22 --- 7 files changed, 629 deletions(-) delete mode 100644 components/editor/MonacoEditorWrapper.js delete mode 100644 components/modelina/CSharpGenerator.js delete mode 100644 components/modelina/GoGenerator.js delete mode 100644 components/modelina/JavaGenerator.js delete mode 100644 components/modelina/JavaScriptGenerator.js delete mode 100644 components/modelina/TypeScriptGenerator.js delete mode 100644 config/modelina-language-options.json diff --git a/components/editor/MonacoEditorWrapper.js b/components/editor/MonacoEditorWrapper.js deleted file mode 100644 index f260efd014a..00000000000 --- a/components/editor/MonacoEditorWrapper.js +++ /dev/null @@ -1,116 +0,0 @@ -import { useEffect, useRef } from 'react' -import PropTypes from 'prop-types'; -import Editor, { monaco } from '@monaco-editor/react' -import { debounce } from 'lodash' - -let editor -let Monaco - -const renderHighlightedLines = (highlightedLines) => { - return renderHighlightedRanges(highlightedLines.map(lineNumber => ({ - startLine: lineNumber, - startCol: 0, - endLine: lineNumber, - endCol: 0, - options: { - isWholeLine: true, - } - }))) -} - -const renderHighlightedRanges = (highlightedRanges) => { - return editor.deltaDecorations(editor.getModel().getAllDecorations(), highlightedRanges.map(range => ({ - range: new Monaco.Range(range.startLine, range.startCol, range.endLine, range.endCol), - options: { - className: 'bg-code-editor-dark', - marginClassName: 'bg-code-editor-dark', - ...range.options - }, - }))) -} - -export default function MonacoEditorWrapper ({ - language, - theme = 'asyncapi-theme', - onChange = () => {}, - value, - highlightedLines = [], - highlightedRanges = [], - updateHighlightOnChange = false, - options, - editorDidMount, - ...props -}) { - const previousValue = useRef(value); - const debouncedOnChange = debounce(onChange, 500) - - const handleEditorDidMount = (getValue, ed) => { - editor = ed - renderHighlightedLines(highlightedLines) - renderHighlightedRanges(highlightedRanges) - - editor.onDidChangeModelContent(ev => { - const currentValue = editor.getValue() - if (currentValue !== previousValue.current) { - previousValue.current = currentValue - const value = debouncedOnChange(ev, currentValue) - - if (typeof value === 'string') { - if (currentValue !== value) { - editor.setValue(value) - } - } - } - }); - - editorDidMount(getValue, editor) - } - - useEffect(() => { - monaco - .init() - .then(monacoInstance => { - Monaco = monacoInstance - monacoInstance.editor.defineTheme('asyncapi-theme', { - base: 'vs-dark', - inherit: true, - rules: [], - colors: { - 'editor.background': '#252f3f', - 'editor.lineHighlightBackground': '#1f2a37', - }, - rules: [{ token: '', background: '#252f3f' }], - }) - }) - .catch(console.error) - }, []) - - useEffect(() => { - if (editor && updateHighlightOnChange) { - renderHighlightedLines(highlightedLines) - renderHighlightedRanges(highlightedRanges) - } - }, [highlightedLines, highlightedRanges]) - - return ( - - ) -} - -MonacoEditorWrapper.propTypes = { - value: PropTypes.string, - editorDidMount: PropTypes.func, - onChange: PropTypes.func, -}; - -MonacoEditorWrapper.defaultProps = { - editorDidMount: () => {}, - onChange: () => {}, -}; diff --git a/components/modelina/CSharpGenerator.js b/components/modelina/CSharpGenerator.js deleted file mode 100644 index ff7a6b0d800..00000000000 --- a/components/modelina/CSharpGenerator.js +++ /dev/null @@ -1,108 +0,0 @@ -import React from 'react'; -import { CSharpGenerator, CSHARP_COMMON_PRESET, CSHARP_JSON_SERIALIZER_PRESET } from "@asyncapi/modelina"; - -export const defaultState = {serialization: false, getHashCode: false, equals: false} - -export function getClassGenerator(state){ - const imports = ['CSharpGenerator'] - const jsPresetCode = []; - const presets = []; - - if (state.equals === true || state.getHashCode === true) { - presets.push({ - preset: CSHARP_COMMON_PRESET, - options: { - equal: state.equals, - hashCode: state.getHashCode - }, - }); - imports.push('CSHARP_COMMON_PRESET'); - jsPresetCode.push(` { - preset: CSHARP_COMMON_PRESET, - options: { - ${state.equals ? 'equals: true,' : ''} - ${state.getHashCode ? 'hashCode: true,' : ''} - } - }`.replace(/^\s*\n/gm, '')); - } - if (state.serialization === true) { - presets.push({ - preset: CSHARP_JSON_SERIALIZER_PRESET - }); - imports.push('CSHARP_JSON_SERIALIZER_PRESET'); - jsPresetCode.push(' CSHARP_JSON_SERIALIZER_PRESET'.replace(/^\s*\n/gm, '')); - } - - const generator = new CSharpGenerator({ - presets: presets - }); - const generatorCode = `import { ${imports.join(', ')} } from '@asyncapi/modelina'; - -const generator = new CSharpGenerator(${presets.length ? `{ - presets: [ -${jsPresetCode.join(',\n')} - ] -}`: ''})`; - - return { generator, generatorCode }; -} - -export function getGeneratorCode(state = defaultState){ - return getClassGenerator(state) -} - -export default class CSharpOptions extends React.Component { - constructor(props) { - super(props) - this.state = defaultState - this.onChangeEquals = this.onChangeEquals.bind(this) - this.onChangeGetHashCode = this.onChangeGetHashCode.bind(this) - this.onChangeSerialization = this.onChangeSerialization.bind(this) - this.onNewSettings = this.onNewSettings.bind(this) - props.onInit(getGeneratorCode(this.state)) - } - - onChangeEquals(event) { - const newState = {...this.state, equals: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - onChangeGetHashCode(event) { - const newState = {...this.state, getHashCode: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - onChangeSerialization(event) { - const newState = {...this.state, serialization: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - async onNewSettings(state) { - this.props.onGeneratorChange(getGeneratorCode(state)) - } - - render() { - return ( -
        -
      • - -
      • -
      • - -
      • -
      • - -
      • -
      - ); - } -} diff --git a/components/modelina/GoGenerator.js b/components/modelina/GoGenerator.js deleted file mode 100644 index a6734b13ce4..00000000000 --- a/components/modelina/GoGenerator.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import { GoGenerator } from "@asyncapi/modelina"; - -export const defaultState = {} - -export function getClassGenerator(){ - const generator = new GoGenerator(); - - const generatorCode = `import { GoGenerator } from '@asyncapi/modelina'; - -const generator = new GoGenerator()`; - - return { generator, generatorCode }; -} - -export function getGeneratorCode(state = defaultState){ - return getClassGenerator(state) -} - -export default class GoOptions extends React.Component { - constructor(props) { - super(props) - this.state = defaultState - props.onInit(getGeneratorCode(this.state)) - } - - render() { - return ( -
      -
      - No available options -
      -
      - ); - } -} diff --git a/components/modelina/JavaGenerator.js b/components/modelina/JavaGenerator.js deleted file mode 100644 index 87f03bc5f57..00000000000 --- a/components/modelina/JavaGenerator.js +++ /dev/null @@ -1,202 +0,0 @@ -import React from 'react'; -import { JavaGenerator, JAVA_COMMON_PRESET, JAVA_CONSTRAINTS_PRESET, JAVA_DESCRIPTION_PRESET, JAVA_JACKSON_PRESET } from "@asyncapi/modelina" - -import Select from "../form/Select" - -export const defaultState = {equals: false, hashCode: false, classToString: false, includeConstraints: false, includeDescriptions: false, includeJackson: false, collectionType: 'List'} -export const javaCollectionTypes = [ - { - "value": "List", - "text": "List" - }, - { - "value": "Array", - "text": "Array" - } -]; - -export function getClassGenerator(state){ - const imports = ['JavaGenerator', 'JAVA_COMMON_PRESET']; - - const jsPresetCode = []; - const presets = []; - if (state.equals === true || state.hashCode === true || state.classToString === true) { - presets.push({ - preset: JAVA_COMMON_PRESET, - options: { - equal: state.equals, - hashCode: state.hashCode, - classToString: state.classToString - }, - }); - jsPresetCode.push(`{ - preset: JAVA_COMMON_PRESET, - options: { - ${state.equals ? 'equals: true,' : ''} - ${state.hashCode ? 'hashCode: true,' : ''} - ${state.classToString ? 'classToString: true,' : ''} - } - }`.replace(/^\s*\n/gm, '')); - } - if (state.includeConstraints === true) { - presets.push({ - preset: JAVA_CONSTRAINTS_PRESET - }); - imports.push('JAVA_CONSTRAINTS_PRESET'); - jsPresetCode.push(` JAVA_CONSTRAINTS_PRESET`) - } - if (state.includeJackson === true) { - presets.push({ - preset: JAVA_JACKSON_PRESET - }); - imports.push('JAVA_JACKSON_PRESET'); - jsPresetCode.push(` JAVA_JACKSON_PRESET`) - } - if (state.includeDescriptions === true) { - presets.push({ - preset: JAVA_DESCRIPTION_PRESET - }); - imports.push('JAVA_DESCRIPTION_PRESET'); - jsPresetCode.push(` JAVA_DESCRIPTION_PRESET`) - } - - const generateInstanceCode = `const generator = new JavaGenerator({ - collectionType: ${JSON.stringify(state.collectionType)}, - ${presets.length ? `presets: [ - ${jsPresetCode.join(',\n')} - ]`: ''} -});`.replace(/^\s*\n/gm, ''); - - const generator = new JavaGenerator({collectionType: state.collectionType, presets}); - const generatorCode = `import { ${imports.join(', ')} } from '@asyncapi/modelina'; - -${generateInstanceCode}`; - - return { generator, generatorCode } -} - -export function getGeneratorCode(state = defaultState){ - return getClassGenerator(state) -} - -export default class JavaOptions extends React.Component { - constructor(props) { - super(props) - this.state = defaultState - this.onChangeEquals = this.onChangeEquals.bind(this) - this.onChangeHashCode = this.onChangeHashCode.bind(this) - this.onChangeClassToString = this.onChangeClassToString.bind(this) - this.onChangeIncludeDescriptions = this.onChangeIncludeDescriptions.bind(this) - this.onChangeIncludeConstraints = this.onChangeIncludeConstraints.bind(this) - this.onChangeIncludeJackson = this.onChangeIncludeJackson.bind(this) - this.setNewCollectionType = this.setNewCollectionType.bind(this) - this.onNewSettings = this.onNewSettings.bind(this) - props.onInit(getGeneratorCode(this.state)) - } - - onChangeEquals(event) { - const newState = {...this.state, equals: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - onChangeHashCode(event) { - const newState = {...this.state, hashCode: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - onChangeClassToString(event) { - const newState = {...this.state, classToString: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - onChangeIncludeDescriptions(event) { - const newState = {...this.state, includeDescriptions: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - onChangeIncludeConstraints(event) { - const newState = {...this.state, includeConstraints: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - onChangeIncludeJackson(event) { - const newState = {...this.state, includeJackson: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - setNewCollectionType(selectedCollectionType) { - const newState = {...this.state, collectionType: selectedCollectionType} - this.setState(newState) - this.onNewSettings(newState) - } - onNewSettings(state) { - this.props.onGeneratorChange(getGeneratorCode(state)) - } - onNewGeneralSettings(state) { - this.props.onGeneratorChange(getGeneratorCode(state)) - } - - render() { - const options = [ - ( - <> - Include equals functions - - - ), - ( - <> - Collection type - - - ), - ( - <> - Include toString functions - - - ), - ( - <> - Include descriptions - - - ), - ( - <> - Include constraints - - - ), - ( - <> - Include Jackson annotation - - - ) - ]; - - return ( -
        - {options.map((option, id) => ( -
      • - -
      • - ))} -
      - ) - } -} \ No newline at end of file diff --git a/components/modelina/JavaScriptGenerator.js b/components/modelina/JavaScriptGenerator.js deleted file mode 100644 index 8d78509b98e..00000000000 --- a/components/modelina/JavaScriptGenerator.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import { JavaScriptGenerator } from "@asyncapi/modelina"; - -export const defaultState = {} - -export function getClassGenerator(){ - const generator = new JavaScriptGenerator(); - - const generatorCode = `import { JavaScriptGenerator } from '@asyncapi/modelina'; - -const generator = new JavaScriptGenerator()`; - - return { generator, generatorCode }; -} - -export function getGeneratorCode(state = defaultState){ - return getClassGenerator(state) -} - -export default class JavaScriptOptions extends React.Component { - constructor(props) { - super(props) - this.state = defaultState - props.onInit(getGeneratorCode(this.state)) - } - - render() { - return ( -
      -
      - No available options -
      -
      - ); - } -} diff --git a/components/modelina/TypeScriptGenerator.js b/components/modelina/TypeScriptGenerator.js deleted file mode 100644 index a25ddaea3fe..00000000000 --- a/components/modelina/TypeScriptGenerator.js +++ /dev/null @@ -1,109 +0,0 @@ -import React from 'react'; -import { TS_COMMON_PRESET, TypeScriptGenerator } from "@asyncapi/modelina" -import Select from "../form/Select" - -export const defaultState = { marshalling: false, variant: 'class' } - -export function getClassGenerator(marshalling) { - const generator = new TypeScriptGenerator({ - modelType: 'class', - presets: [ - { - preset: TS_COMMON_PRESET, - options: { - marshalling: marshalling - } - } - ] - }); - - const generateInstanceCode = `const generator = new TypeScriptGenerator({ - modelType: 'class', - ${marshalling ? `presets: [ - { - preset: TS_COMMON_PRESET, - options: { - marshalling: ${JSON.stringify(marshalling)} - } - } - ]` : ''} -});`.replace(/^\s*\n/gm, ''); - - const generatorCode = `import { TypeScriptGenerator, TS_COMMON_PRESET } from '@asyncapi/modelina'; - -${generateInstanceCode}` - - return { generator, generatorCode }; -} - -export function getRegularGenerator(variant) { - const generator = new TypeScriptGenerator({ - modelType: variant - }); - - let generatorCode = `import { TypeScriptGenerator } from '@asyncapi/modelina'; - -const generator = new TypeScriptGenerator({ - modelType: ${JSON.stringify(variant)} -})`; - - return { generator, generatorCode } -} - -export function getGeneratorCode(state = defaultState){ - if (state.variant === 'interface') { - return getRegularGenerator(state.variant) - } - return getClassGenerator(state.marshalling) -} - -export default class TypeScriptOptions extends React.Component { - constructor(props) { - super(props) - this.state = defaultState - this.onChangeMarshalling = this.onChangeMarshalling.bind(this) - this.onChangeVariant = this.onChangeVariant.bind(this) - this.onNewSettings = this.onNewSettings.bind(this) - props.onInit(getGeneratorCode(this.state)) - } - - onChangeMarshalling(event) { - const newState = {...this.state, marshalling: event.target.checked} - this.setState(newState) - this.onNewSettings(newState) - } - onChangeVariant(variant) { - const newState = {...this.state, variant} - this.setState(newState) - this.onNewSettings(newState) - } - async onNewSettings(state) { - this.props.onGeneratorChange(getGeneratorCode(state)) - } - - render() { - return ( -
        -
      • - -
      • - ) : null} -
      - ); - } -} \ No newline at end of file diff --git a/config/modelina-language-options.json b/config/modelina-language-options.json deleted file mode 100644 index b95bede80e5..00000000000 --- a/config/modelina-language-options.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "value": "typescript", - "text": "TypeScript" - }, - { - "value": "java", - "text": "Java" - }, - { - "value": "go", - "text": "Go" - }, - { - "value": "javascript", - "text": "JavaScript" - }, - { - "value": "csharp", - "text": "C#" - } -] \ No newline at end of file From ab09813651d288c7a3ca3ec507148a4de3192ac6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 12:36:21 +0200 Subject: [PATCH 14/51] docs: add anshgoyalevil as a contributor for code (#1821) --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index a52931c5749..eb16bc4c0ab 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -463,6 +463,15 @@ "contributions": [ "code" ] + }, + { + "login": "anshgoyalevil", + "name": "Ansh Goyal", + "avatar_url": "https://avatars.githubusercontent.com/u/94157520?v=4", + "profile": "https://ansh.live", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index cae0247a1dc..730845bdae1 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ --- -[![All Contributors](https://img.shields.io/badge/all_contributors-46-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-47-orange.svg?style=flat-square)](#contributors-) [![Netlify Status](https://api.netlify.com/api/v1/badges/b2137407-b765-46c4-95b5-a72d9b1592ab/deploy-status)](https://app.netlify.com/sites/asyncapi-website/deploys) @@ -208,6 +208,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d tthijm
      tthijm

      🚇 Cynthia Peter
      Cynthia Peter

      📖 Florence Njeri
      Florence Njeri

      💻 + Ansh Goyal
      Ansh Goyal

      💻 From 86ffbb2a4f6d78871cea9d773543f085b06fa861 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 22 Jun 2023 12:46:38 +0200 Subject: [PATCH 15/51] docs(cli): update latest cli documentation (#1822) --- pages/docs/tools/cli/usage.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pages/docs/tools/cli/usage.md b/pages/docs/tools/cli/usage.md index 2ce01466cea..8129f2055b9 100644 --- a/pages/docs/tools/cli/usage.md +++ b/pages/docs/tools/cli/usage.md @@ -29,7 +29,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/0.48.6 linux-x64 node-v18.16.0 +@asyncapi/cli/0.48.7 linux-x64 node-v18.16.0 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -91,7 +91,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./asyncapi.yaml --reference-into-components ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/bundle.ts)_ ## `asyncapi config` @@ -105,7 +105,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/config/index.ts)_ ## `asyncapi config context` @@ -234,7 +234,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -270,7 +270,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/diff.ts)_ ## `asyncapi generate` @@ -284,7 +284,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/v0.48.6/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -408,7 +408,7 @@ DESCRIPTION Creates a new asyncapi file ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -496,7 +496,7 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --output=terminal --no-tty ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/optimize.ts)_ ## `asyncapi start` @@ -510,7 +510,7 @@ DESCRIPTION Start asyncapi studio ``` -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/start/index.ts)_ +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -554,5 +554,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.48.6/src/commands/validate.ts)_ +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/validate.ts)_ From 8e441e2c1c6212e977891dddd9ab8ab229ac336b Mon Sep 17 00:00:00 2001 From: "Sumant.xD" <65810424+SumantxD@users.noreply.github.com> Date: Thu, 22 Jun 2023 18:39:43 +0530 Subject: [PATCH 16/51] ci: set output has been updated to use GITHUB_OUTPUT #1726 (#1727) Co-authored-by: Lukasz Gornicki --- .github/workflows/lighthouse-ci.yml | 2 +- pages/blog/automated-releases.md | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lighthouse-ci.yml b/.github/workflows/lighthouse-ci.yml index 137d2fb77e8..f8cc63d308d 100644 --- a/.github/workflows/lighthouse-ci.yml +++ b/.github/workflows/lighthouse-ci.yml @@ -32,7 +32,7 @@ jobs: ) id: should_run name: Should Run - run: echo "::set-output name=shouldrun::true" + run: echo "shouldrun=true" >> $GITHUB_OUTPUT - if: steps.should_run.outputs.shouldrun == 'true' uses: actions/checkout@v3 diff --git a/pages/blog/automated-releases.md b/pages/blog/automated-releases.md index 62c9d7fb82d..a23adb9fffe 100644 --- a/pages/blog/automated-releases.md +++ b/pages/blog/automated-releases.md @@ -194,7 +194,9 @@ To share the output, you must assign an `id` to the step and declare a variable ```yaml - name: Get version from package.json after release step id: extractver - run: echo "::set-output name=version::$(npm run get-version --silent)" + run: | + version=$(npm run get-version --silent) + echo "version=$version" >> $GITHUB_OUTPUT ``` You can access the shared value by the `id` and a variable name like `steps.extractver.outputs.version`. We use it, for example, in the condition that specifies if further steps of the workflow should be triggered or not. If the version in `package.json` changed after GitHub and NPM step, this means we should proceed with Docker publishing and pull request creation: @@ -228,9 +230,14 @@ jobs: node-version: 13 - name: Install dependencies run: npm ci + - name: Get version from package.json before release step id: initversion - run: echo "::set-output name=version::$(npm run get-version --silent)" + run: npm run get-version --silent + + - name: Set output + run: echo "version=$(npm run get-version --silent)" >> $GITHUB_OUTPUT + - name: Release to NPM and GitHub id: release env: From 065a0660000ebae88d07a3234bb916dd4a53391e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 15:17:57 +0200 Subject: [PATCH 17/51] docs: add SumantxD as a contributor for infra (#1823) --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index eb16bc4c0ab..247c4c8125c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -472,6 +472,15 @@ "contributions": [ "code" ] + }, + { + "login": "SumantxD", + "name": "Sumant.xD", + "avatar_url": "https://avatars.githubusercontent.com/u/65810424?v=4", + "profile": "https://github.com/SumantxD", + "contributions": [ + "infra" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 730845bdae1..e9f047987e9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ --- -[![All Contributors](https://img.shields.io/badge/all_contributors-47-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-48-orange.svg?style=flat-square)](#contributors-) [![Netlify Status](https://api.netlify.com/api/v1/badges/b2137407-b765-46c4-95b5-a72d9b1592ab/deploy-status)](https://app.netlify.com/sites/asyncapi-website/deploys) @@ -209,6 +209,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Cynthia Peter
      Cynthia Peter

      📖 Florence Njeri
      Florence Njeri

      💻 Ansh Goyal
      Ansh Goyal

      💻 + Sumant.xD
      Sumant.xD

      🚇 From e17401c1eceda6a5490cd2e5390ef0d277bf5c79 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 15:22:44 +0200 Subject: [PATCH 18/51] docs: add anshgoyalevil as a contributor for review (#1824) --- .all-contributorsrc | 3 ++- README.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 247c4c8125c..413b39b877e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -470,7 +470,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/94157520?v=4", "profile": "https://ansh.live", "contributions": [ - "code" + "code", + "review" ] }, { diff --git a/README.md b/README.md index e9f047987e9..b1e0d423877 100644 --- a/README.md +++ b/README.md @@ -208,7 +208,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d tthijm
      tthijm

      🚇 Cynthia Peter
      Cynthia Peter

      📖 Florence Njeri
      Florence Njeri

      💻 - Ansh Goyal
      Ansh Goyal

      💻 + Ansh Goyal
      Ansh Goyal

      💻 👀 Sumant.xD
      Sumant.xD

      🚇 From 70d0a025431d4f60b26192a23074a737e53a34e7 Mon Sep 17 00:00:00 2001 From: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> Date: Thu, 22 Jun 2023 17:31:39 +0200 Subject: [PATCH 19/51] feat: update the banner to promote London CFP on the website (#1825) --- components/campaigns/AnnoucementHero.js | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/components/campaigns/AnnoucementHero.js b/components/campaigns/AnnoucementHero.js index f85a6cca4e7..ba77845b03b 100644 --- a/components/campaigns/AnnoucementHero.js +++ b/components/campaigns/AnnoucementHero.js @@ -4,24 +4,24 @@ import Heading from '../typography/Heading' import Container from '../layout/Container' import AnnouncementRemainingDays from './AnnouncementRamainingDays' -function shouldShowBanner() { - const month = new Date().getUTCMonth(); - const year = new Date().getUTCFullYear(); - - //month=4 is May - if (year > 2023 || month !== 4) { +function shouldShowBanner(cfpDeadline) { + const currentDate = new Date(); // Get the current date + const deadline = new Date(cfpDeadline); // Convert the cfpDeadline string to a Date object + + // Check if the current date is after the deadline + if (currentDate > deadline) { return false; } + return true; } - export default function AnnouncementHero({ className = '', small = false, hideVideo = false }) { //return null; - const showBanner = shouldShowBanner(); + const cfpDeadline = '2023-07-28T06:00:00Z' + const showBanner = shouldShowBanner(cfpDeadline); if (!showBanner) return null; - const cfpDeadline = '2023-05-31T06:00:00Z' return ( @@ -42,15 +42,15 @@ export default function AnnouncementHero({ className = '', small = false, hideVi level="h3" typeStyle="heading-sm" > - Madrid Edition + London Edition - October, 2023 | Madrid, Spain + 20th of September, 2023 | London, UK - +
      -
      From 7fa7114ad276c23a64eeb08fae6d5d0c9d64e17c Mon Sep 17 00:00:00 2001 From: Damir Date: Tue, 27 Jun 2023 00:41:17 +0600 Subject: [PATCH 27/51] docs: add new bundler to tooling page (#1836) Co-authored-by: Lukasz Gornicki --- config/tools-manual.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/config/tools-manual.json b/config/tools-manual.json index f33022b4407..2557abfabf4 100644 --- a/config/tools-manual.json +++ b/config/tools-manual.json @@ -356,7 +356,8 @@ "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" + "repoUrl": "https://github.com/udamir/api-diff-viewer", + "websiteUrl": "https://api-diff-viewer.vercel.app/", }, "filters": { "language": "TypeScript", @@ -613,7 +614,20 @@ }, "Bundlers": { "description": "The following is a list of tools that you can work with to bundle AsyncAPI documents.", - "toolsList": [] + "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": "TypeScript", + "technology": ["TypeScript"], + "categories": ["bundler"] + } + } + ] }, "IDE Extensions": { "description": "The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others", From 82b1f6bd8bbbf0467fa2d1c10a70fe72a18ef41e Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 27 Jun 2023 02:34:32 +0200 Subject: [PATCH 28/51] chore: update meetings.json and newsrooom_videos.json (#1844) --- package-lock.json | 347 ++++++++++++++-------------------------------- 1 file changed, 104 insertions(+), 243 deletions(-) diff --git a/package-lock.json b/package-lock.json index a49fdc794e6..d191f0a2c56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -667,7 +667,6 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -684,7 +683,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -700,7 +698,6 @@ "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" } @@ -708,14 +705,12 @@ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" }, "node_modules/@fec/remark-a11y-emoji": { "version": "1.0.0", @@ -818,7 +813,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -828,8 +822,7 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "node_modules/@ioredis/commands": { "version": "1.2.0", @@ -2500,8 +2493,7 @@ "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" }, "node_modules/ansi-escapes": { "version": "4.3.2", @@ -2529,8 +2521,7 @@ "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "node_modules/ansi-styles": { "version": "3.2.1", @@ -2674,8 +2665,7 @@ "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "node_modules/astring": { "version": "1.8.6", @@ -3122,8 +3112,7 @@ "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "node_modules/camelcase-css": { "version": "2.0.1", @@ -3684,7 +3673,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4587,8 +4575,7 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/defaults": { "version": "1.0.3", @@ -4757,7 +4744,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" } @@ -4885,7 +4871,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "dependencies": { "ansi-colors": "^4.1.1" } @@ -4972,7 +4957,6 @@ "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -5084,7 +5068,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -5093,14 +5076,12 @@ "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, "dependencies": { "eslint-visitor-keys": "^1.1.0" } @@ -5108,20 +5089,17 @@ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, "dependencies": { "@babel/highlight": "^7.10.4" } @@ -5130,7 +5108,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5146,7 +5123,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" } @@ -5155,7 +5131,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5165,7 +5140,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" } @@ -5173,20 +5147,17 @@ "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "node_modules/eslint/node_modules/globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" } @@ -5194,20 +5165,17 @@ "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" } @@ -5215,14 +5183,12 @@ "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, "dependencies": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", @@ -5232,8 +5198,7 @@ "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" }, "node_modules/esprima": { "version": "4.0.1", @@ -5244,7 +5209,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" } @@ -5253,7 +5217,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" } @@ -5261,8 +5224,7 @@ "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "node_modules/estree-util-attach-comments": { "version": "2.1.1", @@ -5529,8 +5491,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "node_modules/fast-text-encoding": { "version": "1.0.3", @@ -5599,7 +5560,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "dependencies": { "flat-cache": "^3.0.4" } @@ -5628,7 +5588,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -5637,8 +5596,7 @@ "node_modules/flatted": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==" }, "node_modules/follow-redirects": { "version": "1.15.2", @@ -5768,8 +5726,7 @@ "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "node_modules/functions-have-names": { "version": "1.2.2", @@ -6541,8 +6498,7 @@ "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "node_modules/ignore-loader": { "version": "0.1.2", @@ -6570,7 +6526,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -6592,8 +6547,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "node_modules/indent-string": { "version": "4.0.0", @@ -6977,8 +6931,7 @@ "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "node_modules/is-function": { "version": "1.0.2", @@ -7219,8 +7172,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "node_modules/isobject": { "version": "2.1.0", @@ -7320,8 +7272,7 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -7435,7 +7386,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -7613,8 +7563,7 @@ "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" }, "node_modules/lodash.unescape": { "version": "4.0.1", @@ -9050,8 +8999,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "node_modules/nearley": { "version": "2.20.1", @@ -9434,7 +9382,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -9634,7 +9581,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" } @@ -9752,8 +9698,7 @@ "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "node_modules/path-parse": { "version": "1.0.7", @@ -10503,8 +10448,7 @@ "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "node_modules/pretty-bytes": { "version": "5.6.0", @@ -10534,8 +10478,7 @@ "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "node_modules/promise": { "version": "7.3.1", @@ -11043,8 +10986,7 @@ "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "node_modules/remark-footnotes": { "version": "2.0.0", @@ -11248,8 +11190,7 @@ "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "node_modules/restore-cursor": { "version": "3.1.0", @@ -11293,7 +11234,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" } @@ -11458,7 +11398,6 @@ "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -11509,7 +11448,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" } @@ -11517,8 +11455,7 @@ "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "node_modules/shortid": { "version": "2.2.16", @@ -11617,7 +11554,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -11628,7 +11564,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" } @@ -11637,7 +11572,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" } @@ -11645,8 +11579,7 @@ "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/source-list-map": { "version": "2.0.1", @@ -11768,7 +11701,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11845,7 +11777,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" } @@ -11875,8 +11806,7 @@ "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "node_modules/style-to-object": { "version": "0.4.1", @@ -12037,7 +11967,6 @@ "version": "6.7.5", "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", - "dev": true, "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -12187,8 +12116,7 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "node_modules/throttleit": { "version": "1.0.0", @@ -12367,7 +12295,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" } @@ -12802,8 +12729,7 @@ "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "node_modules/verror": { "version": "1.10.0", @@ -12947,7 +12873,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" } @@ -12971,8 +12896,7 @@ "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -13488,7 +13412,8 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/@cypress/react/-/react-7.0.3.tgz", "integrity": "sha512-YseqnMugTbdPV9YCYEMXVqIf+P7x+pfjXOdjv4dnDFqNCZeHaZfOZVFZ4XfEHVxMv0aDszxlaLiIp3QDPhr12w==", - "dev": true + "dev": true, + "requires": {} }, "@cypress/request": { "version": "2.88.11", @@ -13570,7 +13495,6 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -13587,7 +13511,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13599,7 +13522,6 @@ "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -13607,14 +13529,12 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, @@ -13704,7 +13624,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -13714,8 +13633,7 @@ "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "@ioredis/commands": { "version": "1.2.0", @@ -14597,7 +14515,8 @@ "@tailwindcss/aspect-ratio": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", - "integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==" + "integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==", + "requires": {} }, "@tailwindcss/forms": { "version": "0.5.3", @@ -14610,7 +14529,8 @@ "@tailwindcss/line-clamp": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz", - "integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==" + "integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==", + "requires": {} }, "@tailwindcss/typography": { "version": "0.5.7", @@ -14881,8 +14801,7 @@ "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" }, "ansi-escapes": { "version": "4.3.2", @@ -14912,8 +14831,7 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "3.2.1", @@ -15022,8 +14940,7 @@ "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "astring": { "version": "1.8.6", @@ -15409,8 +15326,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase-css": { "version": "2.0.1", @@ -15862,7 +15778,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -15885,7 +15800,8 @@ "css-declaration-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==" + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "requires": {} }, "css-loader": { "version": "1.0.0", @@ -16065,7 +15981,8 @@ "cssnano-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} }, "csso": { "version": "4.2.0", @@ -16547,8 +16464,7 @@ "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "defaults": { "version": "1.0.3", @@ -16683,7 +16599,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -16793,7 +16708,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "requires": { "ansi-colors": "^4.1.1" } @@ -16868,7 +16782,6 @@ "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, "requires": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -16916,7 +16829,6 @@ "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, "requires": { "@babel/highlight": "^7.10.4" } @@ -16925,7 +16837,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -16937,7 +16848,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -16946,7 +16856,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16956,7 +16865,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -16964,20 +16872,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -16985,20 +16890,17 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -17006,8 +16908,7 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, @@ -17072,7 +16973,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -17081,8 +16981,7 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" } } }, @@ -17090,7 +16989,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" }, @@ -17098,22 +16996,19 @@ "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" } } }, "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" }, "espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, "requires": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", @@ -17123,8 +17018,7 @@ "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" } } }, @@ -17137,7 +17031,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "requires": { "estraverse": "^5.1.0" } @@ -17146,7 +17039,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "requires": { "estraverse": "^5.2.0" } @@ -17154,8 +17046,7 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "estree-util-attach-comments": { "version": "2.1.1", @@ -17371,8 +17262,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-text-encoding": { "version": "1.0.3", @@ -17443,7 +17333,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "requires": { "flat-cache": "^3.0.4" } @@ -17472,7 +17361,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -17481,8 +17369,7 @@ "flatted": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==" }, "follow-redirects": { "version": "1.15.2", @@ -17575,8 +17462,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "functions-have-names": { "version": "1.2.2", @@ -18224,8 +18110,7 @@ "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "ignore-loader": { "version": "0.1.2", @@ -18250,7 +18135,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -18274,8 +18158,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { "version": "4.0.0", @@ -18585,8 +18468,7 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-function": { "version": "1.0.2", @@ -18785,8 +18667,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "2.1.0", @@ -18879,8 +18760,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json-stringify-safe": { "version": "5.0.1", @@ -18977,7 +18857,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -19140,8 +19019,7 @@ "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" }, "lodash.unescape": { "version": "4.0.1", @@ -20174,8 +20052,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "nearley": { "version": "2.20.1", @@ -20476,7 +20353,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -20655,7 +20531,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -20743,8 +20618,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -20853,22 +20727,26 @@ "postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "requires": {} }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} }, "postcss-import": { "version": "14.1.0", @@ -21117,7 +20995,8 @@ "postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -21265,8 +21144,7 @@ "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "pretty-bytes": { "version": "5.6.0", @@ -21287,8 +21165,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise": { "version": "7.3.1", @@ -21726,8 +21603,7 @@ "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "remark-footnotes": { "version": "2.0.0", @@ -21909,8 +21785,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "restore-cursor": { "version": "3.1.0", @@ -21947,7 +21822,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -22084,7 +21958,6 @@ "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -22122,7 +21995,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -22130,8 +22002,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shortid": { "version": "2.2.16", @@ -22201,7 +22072,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -22212,7 +22082,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -22221,7 +22090,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -22229,8 +22097,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, @@ -22334,7 +22201,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -22399,7 +22265,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -22423,8 +22288,7 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "style-to-object": { "version": "0.4.1", @@ -22480,7 +22344,8 @@ "styled-jsx": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", - "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==" + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "requires": {} }, "stylehacks": { "version": "5.1.0", @@ -22541,7 +22406,6 @@ "version": "6.7.5", "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", - "dev": true, "requires": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -22654,8 +22518,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "throttleit": { "version": "1.0.0", @@ -22810,7 +22673,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "requires": { "prelude-ls": "^1.2.1" } @@ -23082,12 +22944,14 @@ "use-isomorphic-layout-effect": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "requires": {} }, "use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} }, "util-deprecate": { "version": "1.0.2", @@ -23113,8 +22977,7 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "verror": { "version": "1.10.0", @@ -23238,7 +23101,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -23259,8 +23121,7 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { "version": "7.0.0", From 1505d9b6f4f2c95ed898921ac2b085b5a91f7d7b Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 27 Jun 2023 11:59:38 +0200 Subject: [PATCH 29/51] docs(generator): update latest generator documentation (#1845) --- .../tools/generator/template-development.md | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/pages/docs/tools/generator/template-development.md b/pages/docs/tools/generator/template-development.md index 28d921526b3..35af42ce462 100644 --- a/pages/docs/tools/generator/template-development.md +++ b/pages/docs/tools/generator/template-development.md @@ -11,20 +11,24 @@ Let's break down the minimum template requirements: the `template` directory and ### `template` directory -The `template` directory stores generated outputs in files. In other words, the generator processes all the files stored in this directory. +The `template` directory holds all the files that will be used for generating the output. The generator will process all the files stored in this directory. +The following code is an example of an `index.js` file inside the `template` folder. ```js import { File, Text } from "@asyncapi/generator-react-sdk"; -export default function({ asyncapi, params, originalAsyncAPI }) { -return ( +export default function ({ asyncapi, params, originalAsyncAPI }) { + return ( - My application's markdown file. - App name: **{ asyncapi.info().title() }** + My application's markdown file. + App name: **{asyncapi.info().title()}** -); + ); } ``` + +The above example will produce an `asyncapi.md` file where usage of the AsyncAPI document information (i.e. the `title`) is demonstrated. + ### `package.json` file Before the generation process begins, the generator installs the template into its dependencies. A `package.json` file is necessary to identify the template name. @@ -43,8 +47,6 @@ The following block shows an example `package.json` file that points to the [Rea } ``` -The above example of a `template/index.js` file shows the generation process result. The user also receives an `asyncapi.md` file with hardcoded and dynamic (application title from the AsyncAPI document) information. - Every template must depend on the [`@asyncapi/generator-react-sdk` package](https://github.com/asyncapi/generator-react-sdk), which contains a template file's basic components. ## Additional configuration options @@ -73,14 +75,16 @@ The following examples show some advanced configurations that we can use in our "name": "myTemplate", "generator": { "renderer": "react", - "supportedProtocols": "mqtt" + "supportedProtocols": [ + "mqtt" + ] }, "dependencies": { "@asyncapi/generator-react-sdk": "^0.2.25" } } ``` -The above `package.json` file has a newly added configuration called `supportedProtocols` which is set to `mqtt`. This configuration displays all the protocols that this template supports. You can have multiple supported protocols in our template. +The above `package.json` file has a newly added configuration called `supportedProtocols` which is set to a list containing only `mqtt`. This configuration displays all the protocols that this template supports. You can have multiple supported protocols in our template. For example, if you want to generate an output using the above template, you need to have an AsyncAPI document with servers that use `mqtt` to generate your desired output. If your AsyncAPI document has server connections with `kafka`, the generation process will be terminated since the only supported protocol mentioned is `mqtt`. @@ -93,7 +97,9 @@ Additionally, we can also have a configuration called `parameters`, which is an "name": "myTemplate", "generator": { "renderer": "react", - "supportedProtocols": "mqtt", + "supportedProtocols": [ + "mqtt" + ], "parameters": { "version": { "description": "Overrides application version under `info.version` in the AsyncAPI document.", From f827ead15488fa3ffb4c98b0d8ab9ad1ea9b70b9 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 28 Jun 2023 02:33:50 +0200 Subject: [PATCH 30/51] chore: update meetings.json and newsrooom_videos.json (#1847) --- config/newsroom_videos.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json index d1022fbdcc3..c38908459bc 100644 --- a/config/newsroom_videos.json +++ b/config/newsroom_videos.json @@ -1,4 +1,10 @@ [ + { + "image_url": "https://i.ytimg.com/vi/EvC2PZXEM0M/hqdefault.jpg", + "title": "Community Meeting, Tuesday June 27th 2023", + "description": "https://github.com/asyncapi/community/issues/762.", + "videoId": "EvC2PZXEM0M" + }, { "image_url": "https://i.ytimg.com/vi/1jiRDmuA-zg/hqdefault.jpg", "title": "Fran AMA AsyncAPI — 23 June 2023", @@ -22,11 +28,5 @@ "title": "Studio planning", "description": "https://github.com/asyncapi/community/issues/745.", "videoId": "mAISwYCZa2I" - }, - { - "image_url": "https://i.ytimg.com/vi/V3Op2A08UQs/hqdefault.jpg", - "title": "Headless Commerce: Streamlining Architecture", - "description": "https://github.com/asyncapi/community/issues/716.", - "videoId": "V3Op2A08UQs" } ] \ No newline at end of file From 2781946df315dcad9585123d40762b1369f46da4 Mon Sep 17 00:00:00 2001 From: Akintola Rahmat Date: Wed, 28 Jun 2023 01:08:55 +0000 Subject: [PATCH 31/51] chore: new fragment for contributor questions section (#1678) Co-authored-by: Alejandra Quetzalli %0ACo-authored-by: Alejandra Quetzalli %0ACo-authored-by: Lukasz Gornicki --- assets/docs/fragments/how-to-contribute.md | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 assets/docs/fragments/how-to-contribute.md diff --git a/assets/docs/fragments/how-to-contribute.md b/assets/docs/fragments/how-to-contribute.md new file mode 100644 index 00000000000..932347021a1 --- /dev/null +++ b/assets/docs/fragments/how-to-contribute.md @@ -0,0 +1,23 @@ +## How to contribute to AsyncAPI Docs + +Did you know that you can contribute Docs to AsyncAPI as well? Code isn't the only way to contribute to OSS; Dev Docs are a **huge** help that benefit the entire OSS ecosystem. At AsyncAPI, we value Doc contributions as much as every other type of contribution. ❤️ + +To get started as a Docs contributor: + +1. Familiarize yourself with our [project's Contribution Guide](https://github.com/asyncapi/community/blob/master/CONTRIBUTING.md) and our [Code of Conduct](https://github.com/asyncapi/.github/blob/master/CODE_OF_CONDUCT.md). + +2. Head over to our Docs GH Board [here](https://github.com/orgs/asyncapi/projects/12). + +3. Pick an issue you would like to contribute to and leave a comment introducing yourself. This is also the perfect place to leave any questions you may have on how to get started. + +4. If there is no work done in that Docs issue yet, feel free to open a PR and get started! + +### Tag me in your AsyncAPI Doc PRs + +Do you have a documentation contributor question and you're wondering how to tag me into a GitHub discussion or PR? Never fear! + +Tag me in your AsyncAPI Doc PRs or [GitHub Discussions](https://github.com/asyncapi/community/discussions/categories/docs) via my GitHub handle, [`/alequetzalli`](https://github.com/alequetzalli) 🐙. + +### Talk to me + +I want and need to listen 👂🏽 to all of your perspectives and ideas. Please don't be shy to express to me what you think needs to be documented first or what is missing. 📝 There's a lot of good work ahead, but **you** determine _our content roadmap_ because the OSS community needs should always come first.✨ \ No newline at end of file From 995dd6961263a105aa28de7d11c82fcff8751b3f Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 28 Jun 2023 13:00:10 +0200 Subject: [PATCH 32/51] docs(cli): update latest cli documentation (#1849) --- pages/docs/tools/cli/usage.md | 73 ++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/pages/docs/tools/cli/usage.md b/pages/docs/tools/cli/usage.md index 8129f2055b9..13dc252384f 100644 --- a/pages/docs/tools/cli/usage.md +++ b/pages/docs/tools/cli/usage.md @@ -29,7 +29,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/0.48.7 linux-x64 node-v18.16.0 +@asyncapi/cli/0.48.8 linux-x64 node-v18.16.0 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -91,7 +91,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./asyncapi.yaml --reference-into-components ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.48.8/src/commands/bundle.ts)_ ## `asyncapi config` @@ -105,7 +105,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.48.8/src/commands/config/index.ts)_ ## `asyncapi config context` @@ -234,7 +234,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.48.8/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -242,35 +242,54 @@ Find diff between two asyncapi files ``` USAGE - $ asyncapi diff OLD NEW [-h] [-f json|yaml|yml] [-t breaking|non-breaking|unclassified|all] [-o ] - [--no-error] [-w] [--log-diagnostics] [--diagnostics-format json|stylish|junit|html|text|teamcity|pretty] - [--fail-severity error|warn|info|hint] + $ asyncapi diff OLD NEW [-h] [-f json|yaml|yml|md] [-t breaking|non-breaking|unclassified|all] + [--markdownSubtype json|yaml|yml] [-o ] [--no-error] [-w] [--log-diagnostics] [--diagnostics-format + json|stylish|junit|html|text|teamcity|pretty] [--fail-severity error|warn|info|hint] ARGUMENTS OLD old spec path, URL or context-name NEW new spec path, URL or context-name FLAGS - -f, --format=

      diff --git a/scripts/index.js b/scripts/index.js index 182a0a62eea..0634672c55f 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -19,4 +19,4 @@ async function start() { await buildCaseStudiesList(); } -start(); +start(); \ No newline at end of file From d1af52924be7fcaac2df6199d1abf5713f4c8ab3 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 5 Jul 2023 16:46:04 +0200 Subject: [PATCH 44/51] docs(community): update latest maintainers list (#1897) --- config/MAINTAINERS.json | 1273 ++++++++++++++++++++------------------- 1 file changed, 649 insertions(+), 624 deletions(-) diff --git a/config/MAINTAINERS.json b/config/MAINTAINERS.json index 23392335a2c..b6df736af66 100644 --- a/config/MAINTAINERS.json +++ b/config/MAINTAINERS.json @@ -1,627 +1,652 @@ [ { - "name": "Aayush Sahu", - "github": "aayushmau5", - "linkedin": "aayushmau5", - "slack": "U01QRHR1ABH", - "twitter": "aayushmau5", - "availableForHire": false, - "isTscMember": true, - "repos": [ - "diff" - ] - }, - { - "name": "Abir Pal", - "linkedin": "imabp", - "slack": "U01S8EQ9LQ2", - "twitter": "imabptweets", - "github": "imabp", - "availableForHire": false, - "isTscMember": true, - "repos": [ - "problem" - ] - }, - { - "name": "Akshat Nema", - "github": "akshatnema", - "linkedin": "akshat-nema", - "slack": "U02TAMG2VKN", - "twitter": "AksNema", - "availableForHire": true, - "isTscMember": true, - "repos": [ - "website" - ] - }, - { - "name": "Anand Sunderraman", - "github": "anandsunderraman", - "linkedin": "anand-sunderraman-a6b7a131", - "slack": "U0231F9KXNK", - "availableForHire": false, - "isTscMember": true, - "repos": [ - "go-watermill-template" - ] - }, - { - "name": "Arjun Garg", - "github": "arjungarg07", - "linkedin": "arjungarg17", - "slack": "U01QX79S734", - "twitter": "ArjunGarg07", - "availableForHire": true, - "isTscMember": true, - "repos": [ - "cupid" - ] - }, - { - "name": "Cameron Rushton", - "github": "CameronRushton", - "slack": "U01DVKKAV5K", - "availableForHire": false, - "company": "Solace", - "isTscMember": true, - "repos": [ - "java-spring-cloud-stream-template", - "python-paho-template", - "bindings" - ] - }, - { - "name": "Dale Lane", - "github": "dalelane", - "linkedin": "dalelane", - "slack": "U01EYAFR5BR", - "twitter": "dalelane", - "availableForHire": false, - "isTscMember": true, - "company": "IBM", - "repos": [ - "avro-schema-parser", - "bindings", - "java-template" - ] - }, - { - "name": "Emiliano Zublena", - "github": "emilianozublena", - "linkedin": "emilianozublena", - "slack": "U01LYC8PW0M", - "availableForHire": false, - "isTscMember": true, - "repos": [ - "asyncapi-php-template" - ] - }, - { - "name": "Fran Méndez", - "github": "fmvilas", - "slack": "U34F2JRRS", - "availableForHire": false, - "company": "Postman", - "linkedin": "fmvilas", - "isTscMember": true, - "repos": [ - "raml-dt-schema-parser", - "avro-schema-parser", - "openapi-schema-parser", - "asyncapi-react", - "glee", - "generator", - "nodejs-template", - "nodejs-ws-template", - "parser-js", - "playground", - "spec", - "spec-json-schemas", - "website", - "bindings" - ] - }, - { - "name": "Gerald Loeffler", - "github": "GeraldLoeffler", - "linkedin": "geraldloeffler", - "slack": "U01P5QDLP0X", - "availableForHire": false, - "company": "Salesforce", - "isTscMember": true, - "repos": [ - "bindings" - ] - }, - { - "name": "Jonas Lagoni", - "github": "jonaslagoni", - "linkedin": "jonaslagoni", - "slack": "UQ2ANBG1E", - "availableForHire": false, - "company": "Postman", - "isTscMember": true, - "repos": [ - "dotnet-nats-template", - "ts-nats-template", - "generator-react-sdk", - "generator", - "modelina", - "parser-js", - "parser-api", - "simulator" - ] - }, - { - "name": "Khuda Dad Nomani", - "github": "KhudaDad414", - "twitter": "KhudaDadNomani", - "linkedin": "khudadadnomani", - "slack": "U01RVRD1TCL", - "availableForHire": false, - "company": "Postman", - "isTscMember": true, - "repos": [ - "optimizer", - "bindings", - "glee", - ".github" - ] - }, - { - "name": "Laurent Broudoux", - "github": "lbroudoux", - "twitter": "lbroudoux", - "linkedin": "laurentbroudoux", - "slack": "U018NLDV5E1", - "availableForHire": false, - "isTscMember": true, - "repos": [ - "bindings" - ] - }, - { - "name": "Ludovic Dussart", - "github": "m3lkior", - "linkedin": "ludovic-dussart-846a8063", - "slack": "U01BM49KL3Z", - "twitter": "ldussart", - "availableForHire": false, - "company": "Ineat", - "isTscMember": true, - "repos": [ - "avro-schema-parser" - ] - }, - { - "name": "Lukasz Gornicki", - "github": "derberg", - "linkedin": "lukasz-gornicki-a621914", - "slack": "UD698Q5LM", - "twitter": "derberq", - "availableForHire": false, - "company": "Postman", - "isTscMember": true, - "repos": [ - "avro-schema-parser", - "openapi-schema-parser", - "chatbot", - "diff", - "cli", - "generator-filters", - "generator-hooks", - "github-action-for-generator", - "generator", - "nodejs-template", - "nodejs-ws-template", - "parser-js", - "playground", - "spec", - "spec-json-schemas", - "template-for-generator-templates", - "website", - "bundler" - ] - }, - { - "name": "Maciej Urbańczyk", - "github": "magicmatatjahu", - "availableForHire": false, - "linkedin": "maciej-urbańczyk-909547164", - "slack": "U01EB02BP7A", - "company": "Postman", - "isTscMember": true, - "repos": [ - "asyncapi-react", - "chatbot", - "cli", - "converter-go", - "event-gateway", - "generator-react-sdk", - "generator", - "html-template", - "markdown-template", - "modelina", - "parser-js", - "parser-go", - "playground", - "server-api", - "template-for-go-projects", - "website" - ] - }, - { - "name": "Azeez Elegbede", - "linkedin": "acebuild", - "github": "AceTheCreator", - "twitter": "_acebuild", - "slack": "U01RWDD69PZ", - "company": "Postman", - "availableForHire": false, - "isTscMember": true, - "repos": [ - "chatbot" - ] - }, - { - "name": "Michael Davis", - "github": "damaru-inc", - "availableForHire": false, - "slack": "UH3B166TD", - "company": "Solace", - "isTscMember": true, - "repos": [ - "java-spring-cloud-stream-template", - "python-paho-template", - "bindings" - ] - }, - { - "name": "Missy Turco", - "github": "mcturco", - "twitter": "missyturco", - "slack": "U02JVEQ6S9W", - "linkedin": "missy-turco-a476a6126", - "availableForHire": false, - "company": "Postman", - "isTscMember": true, - "repos": [ - "brand", - "design-system", - "studio", - "website" - ] - }, - { - "name": "Nektarios Fifes", - "github": "NektariosFifes", - "linkedin": "nektarios-fifes-372740220", - "slack": "U01SE93Q48N", - "availableForHire": true, - "isTscMember": true, - "repos": [ - "simulator" - ] - }, - { - "name": "Pavel Bodiachevskii", - "github": "Pakisan", - "slack": "U0132LQU8C9", - "twitter": "pbodiachevskii", - "availableForHire": false, - "isTscMember": true, - "repos": [ - "jasyncapi" - ] - }, - { - "name": "Philip Schlesinger", - "github": "theschles", - "slack": "U054UUYBNLF", - "twitter": "philschlesinger", - "availableForHire": false, - "isTscMember": true, - "repos": [ - "jasyncapi-idea-plugin" - ] - }, - { - "name": "Pratik Haldankar", - "github": "pratik2315", - "slack": "U03ADC8FD2S", - "linkedin": "pratik-haldankar-1b237a205", - "twitter": "PratikHaldankr", - "availableForHire": true, - "isTscMember": true, - "repos": [ - "generator" - ] - }, - { - "name": "Richard Coppen", - "github": "rcoppen", - "linkedin": "richard-coppen", - "slack": "U01L3FH3BUH", - "availableForHire": false, - "company": "IBM", - "isTscMember": true, - "repos": [ - "bindings" - ] - }, - { - "name": "Sergio Moya", - "github": "smoya", - "linkedin": "smoya", - "slack": "UN22ZTLHG", - "twitter": "smoyac", - "availableForHire": false, - "company": "Postman", - "isTscMember": true, - "repos": [ - "bindings", - "converter-go", - "event-gateway", - "go-watermill-template", - "infra", - "parser-api", - "parser-go", - "server-api", - "spec", - "spec-json-schemas", - "template-for-go-projects" - ] - }, - { - "name": "Souvik De", - "github": "Souvikns", - "slack": "U01SGCZMJKW", - "twitter": "souvik_ns", - "linkedin": "souvik-de-a2b941169", - "availableForHire": false, - "company": "Postman", - "isTscMember": true, - "repos": [ - "cli", - "bundler", - "glee" - ] - }, - { - "name": "Alejandra Quetzalli", - "github": "alequetzalli", - "twitter": "QuetzalliAle", - "slack": "U02AKC14WAJ", - "linkedin": "alejandra-quetzalli", - "availableForHire": false, - "company": "Postman", - "isTscMember": true, - "repos": [ - "website", - "training", - "community" - ] - }, - { - "name": "David Pereira", - "github": "BOLT04", - "twitter": "BOLT2938", - "slack": "U02EC8BT0TX", - "linkedin": "josé-david-pereira-13ba5315a", - "availableForHire": false, - "company": "Create IT", - "isTscMember": true, - "repos": [ - "server-api" - ] - }, - { - "name": "Daniel Raper", - "github": "dan-r", - "slack": "U02FP8WBFQE", - "linkedin": "danielr", - "availableForHire": false, - "company": "IBM", - "isTscMember": true, - "repos": [ - "java-template" - ] - }, - { - "name": "Kieran Murphy", - "github": "KieranM1999", - "linkedin": "kieran-murphy-175b0412b", - "availableForHire": false, - "slack": "U02FT2TKM37", - "company": "IBM", - "isTscMember": true, - "repos": [ - "java-template" - ] - }, - { - "name": "Tom Jefferson", - "github": "JEFFLUFC", - "linkedin": "t-jefferson", - "slack": "U02FPPCEH6H", - "availableForHire": false, - "company": "IBM", - "isTscMember": true, - "repos": [ - "java-template" - ] - }, - { - "name": "Lewis Relph", - "github": "lewis-relph", - "availableForHire": false, - "slack": "U02G8MDDEF3", - "company": "IBM", - "isTscMember": true, - "repos": [ - "java-template" - ] - }, - { - "name": "David Boyne", - "github": "boyney123", - "twitter": "boyney123", - "slack": "U020GN9C6FM", - "availableForHire": false, - "company": "AWS", - "isTscMember": true, - "repos": [ - "studio", - "cli" - ] - }, - { - "name": "Semen Tenishchev", - "github": "Tenischev", - "linkedin": "semen-tenishchev", - "availableForHire": true, - "slack": "U011D1DAU6S", - "isTscMember": true, - "repos": [ - "java-spring-template" - ] - }, - { - "name": "Samridhi Agrawal", - "github": "Samridhi-98", - "slack": "U02T2MY9W5T", - "linkedin": "samridhi-agrawal-1713201ab", - "availableForHire": false, - "company": "ThoughtWorks", - "isTscMember": true, - "repos": [ - "modelina" - ] - }, - { - "name": "Debajyoti Halder", - "github": "ron-debajyoti", - "twitter": "rondebajyoti", - "slack": "U02UK9RUPGQ", - "linkedin": "rondebajyoti", - "availableForHire": false, - "company": "Narvar", - "isTscMember": true, - "repos": [ - "modelina" - ] - }, - { - "name": "Ivan Garcia Sainz-Aja", - "github": "ivangsa", - "linkedin": "ivangarciasainzaja", - "slack": "UTCN3ET4M", - "availableForHire": false, - "company": "SNGULAR", - "isTscMember": true, - "repos": [ - "vs-asyncapi-preview" - ] - }, - { - "name": "Florence Njeri", - "github": "Florence-Njeri", - "linkedin": "florencenjeri", - "slack": "U03D18YKX2M", - "twitter": "njericodes", - "availableForHire": true, - "isTscMember": true, - "repos": [ - "generator" - ] - }, - { - "name": "Jeremy Whitlock", - "github": "whitlockjc", - "linkedin": "whitlockjc", - "slack": "U03HBC08EBB", - "twitter": "whitlockjc", - "availableForHire": false, - "company": "Google", - "isTscMember": true, - "repos": [ - "bindings" - ] - }, - { - "name": "Vladimír Gorej", - "github": "char0n", - "linkedin": "vladimirgorej", - "slack": "U03NV5L4S49", - "twitter": "vladimirgorej", - "availableForHire": false, - "company": "SmartBear", - "isTscMember": true, - "repos": [ - "bindings", - "spec", - "spec-json-schemas" - ] - }, - { - "name": "Alexander Wichmann", - "github": "VisualBean", - "linkedin": "alexcarlsen", - "slack": "U04C58GB8TF", - "availableForHire": false, - "company": "The LEGO Group", - "isTscMember": true, - "repos": [ - "bindings" - ] - }, - { - "name": "Barbaño González", - "linkedin": "barbano-gonzalez-moreno", - "twitter": "BarbanoGonzalez", - "github": "Barbanio", - "slack": "U01J42QDSLU", - "availableForHire": false, - "company": "Postman", - "isTscMember": true, - "repos": [ - "training", - "community" - ] - }, - { - "name": "Kenneth Aasan", - "github": "kennethaasan", - "slack": "U037S2HK4TS", - "twitter": "kennethaasan", - "availableForHire": false, - "company": "Sportradar", - "isTscMember": true, - "repos": [ - "modelina" - ] - }, - { - "name": "Heiko Henning", - "github": "GreenRover", - "slack": "U03AC4G51H8", - "availableForHire": false, - "company": "mtrail GmbH", - "isTscMember": true, - "repos": [ - "protobuf-schema-parser" - ] - }, - { - "name": "connil", - "github": "connil", - "slack": "U03A51H8", - "availableForHire": false, - "company": "GmbH", - "isTscMember": false, - "repos": [ - "dotnet-rabbitmq-template" - ] + "name": "Aayush Sahu", + "github": "aayushmau5", + "linkedin": "aayushmau5", + "slack": "U01QRHR1ABH", + "twitter": "aayushmau5", + "availableForHire": false, + "isTscMember": true, + "repos": [ + "diff" + ] + }, + { + "name": "Abir Pal", + "linkedin": "imabp", + "slack": "U01S8EQ9LQ2", + "twitter": "imabptweets", + "github": "imabp", + "availableForHire": false, + "isTscMember": true, + "repos": [ + "problem" + ] + }, + { + "name": "Akshat Nema", + "github": "akshatnema", + "linkedin": "akshat-nema", + "slack": "U02TAMG2VKN", + "twitter": "AksNema", + "availableForHire": true, + "isTscMember": true, + "repos": [ + "website" + ] + }, + { + "name": "Anand Sunderraman", + "github": "anandsunderraman", + "linkedin": "anand-sunderraman-a6b7a131", + "slack": "U0231F9KXNK", + "availableForHire": false, + "isTscMember": true, + "repos": [ + "go-watermill-template" + ] + }, + { + "name": "Arjun Garg", + "github": "arjungarg07", + "linkedin": "arjungarg17", + "slack": "U01QX79S734", + "twitter": "ArjunGarg07", + "availableForHire": true, + "isTscMember": true, + "repos": [ + "cupid" + ] + }, + { + "name": "Cameron Rushton", + "github": "CameronRushton", + "slack": "U01DVKKAV5K", + "availableForHire": false, + "company": "Solace", + "isTscMember": true, + "repos": [ + "java-spring-cloud-stream-template", + "python-paho-template", + "bindings" + ] + }, + { + "name": "Dale Lane", + "github": "dalelane", + "linkedin": "dalelane", + "slack": "U01EYAFR5BR", + "twitter": "dalelane", + "availableForHire": false, + "isTscMember": true, + "company": "IBM", + "repos": [ + "avro-schema-parser", + "bindings", + "java-template" + ] + }, + { + "name": "Emiliano Zublena", + "github": "emilianozublena", + "linkedin": "emilianozublena", + "slack": "U01LYC8PW0M", + "availableForHire": false, + "isTscMember": true, + "repos": [ + "asyncapi-php-template" + ] + }, + { + "name": "Fran M\u00e9ndez", + "github": "fmvilas", + "slack": "U34F2JRRS", + "availableForHire": false, + "company": "Postman", + "linkedin": "fmvilas", + "isTscMember": true, + "repos": [ + "raml-dt-schema-parser", + "avro-schema-parser", + "openapi-schema-parser", + "asyncapi-react", + "glee", + "generator", + "nodejs-template", + "nodejs-ws-template", + "parser-js", + "playground", + "spec", + "spec-json-schemas", + "website", + "bindings" + ] + }, + { + "name": "Gerald Loeffler", + "github": "GeraldLoeffler", + "linkedin": "geraldloeffler", + "slack": "U01P5QDLP0X", + "availableForHire": false, + "company": "Salesforce", + "isTscMember": true, + "repos": [ + "bindings" + ] + }, + { + "name": "Jonas Lagoni", + "github": "jonaslagoni", + "linkedin": "jonaslagoni", + "slack": "UQ2ANBG1E", + "availableForHire": false, + "company": "Postman", + "isTscMember": true, + "repos": [ + "dotnet-nats-template", + "ts-nats-template", + "generator-react-sdk", + "generator", + "modelina", + "parser-js", + "parser-api", + "simulator" + ] + }, + { + "name": "Khuda Dad Nomani", + "github": "KhudaDad414", + "twitter": "KhudaDadNomani", + "linkedin": "khudadadnomani", + "slack": "U01RVRD1TCL", + "availableForHire": false, + "company": "Postman", + "isTscMember": true, + "repos": [ + "optimizer", + "bindings", + "glee", + ".github" + ] + }, + { + "name": "Laurent Broudoux", + "github": "lbroudoux", + "twitter": "lbroudoux", + "linkedin": "laurentbroudoux", + "slack": "U018NLDV5E1", + "availableForHire": false, + "isTscMember": true, + "repos": [ + "bindings" + ] + }, + { + "name": "Ludovic Dussart", + "github": "m3lkior", + "linkedin": "ludovic-dussart-846a8063", + "slack": "U01BM49KL3Z", + "twitter": "ldussart", + "availableForHire": false, + "company": "Ineat", + "isTscMember": true, + "repos": [ + "avro-schema-parser" + ] + }, + { + "name": "Lukasz Gornicki", + "github": "derberg", + "linkedin": "lukasz-gornicki-a621914", + "slack": "UD698Q5LM", + "twitter": "derberq", + "availableForHire": false, + "company": "Postman", + "isTscMember": true, + "repos": [ + "avro-schema-parser", + "openapi-schema-parser", + "chatbot", + "diff", + "cli", + "generator-filters", + "generator-hooks", + "github-action-for-generator", + "generator", + "nodejs-template", + "nodejs-ws-template", + "parser-js", + "playground", + "spec", + "spec-json-schemas", + "template-for-generator-templates", + "website", + "bundler" + ] + }, + { + "name": "Maciej Urba\u0144czyk", + "github": "magicmatatjahu", + "availableForHire": false, + "linkedin": "maciej-urba\u0144czyk-909547164", + "slack": "U01EB02BP7A", + "company": "Postman", + "isTscMember": true, + "repos": [ + "asyncapi-react", + "chatbot", + "cli", + "converter-go", + "event-gateway", + "generator-react-sdk", + "generator", + "html-template", + "markdown-template", + "modelina", + "parser-js", + "parser-go", + "playground", + "server-api", + "template-for-go-projects", + "website" + ] + }, + { + "name": "Azeez Elegbede", + "linkedin": "acebuild", + "github": "AceTheCreator", + "twitter": "_acebuild", + "slack": "U01RWDD69PZ", + "company": "Postman", + "availableForHire": false, + "isTscMember": true, + "repos": [ + "chatbot" + ] + }, + { + "name": "Michael Davis", + "github": "damaru-inc", + "availableForHire": false, + "slack": "UH3B166TD", + "company": "Solace", + "isTscMember": true, + "repos": [ + "java-spring-cloud-stream-template", + "python-paho-template", + "bindings" + ] + }, + { + "name": "Missy Turco", + "github": "mcturco", + "twitter": "missyturco", + "slack": "U02JVEQ6S9W", + "linkedin": "missy-turco-a476a6126", + "availableForHire": false, + "company": "Postman", + "isTscMember": true, + "repos": [ + "brand", + "design-system", + "studio", + "website" + ] + }, + { + "name": "Nektarios Fifes", + "github": "NektariosFifes", + "linkedin": "nektarios-fifes-372740220", + "slack": "U01SE93Q48N", + "availableForHire": true, + "isTscMember": true, + "repos": [ + "simulator" + ] + }, + { + "name": "Pavel Bodiachevskii", + "github": "Pakisan", + "slack": "U0132LQU8C9", + "twitter": "pbodiachevskii", + "availableForHire": false, + "isTscMember": true, + "repos": [ + "jasyncapi" + ] + }, + { + "name": "Philip Schlesinger", + "github": "theschles", + "slack": "U054UUYBNLF", + "twitter": "philschlesinger", + "availableForHire": false, + "isTscMember": true, + "repos": [ + "jasyncapi-idea-plugin" + ] + }, + { + "name": "Pratik Haldankar", + "github": "pratik2315", + "slack": "U03ADC8FD2S", + "linkedin": "pratik-haldankar-1b237a205", + "twitter": "PratikHaldankr", + "availableForHire": true, + "isTscMember": true, + "repos": [ + "generator" + ] + }, + { + "name": "Richard Coppen", + "github": "rcoppen", + "linkedin": "richard-coppen", + "slack": "U01L3FH3BUH", + "availableForHire": false, + "company": "IBM", + "isTscMember": true, + "repos": [ + "bindings" + ] + }, + { + "name": "Sergio Moya", + "github": "smoya", + "linkedin": "smoya", + "slack": "UN22ZTLHG", + "twitter": "smoyac", + "availableForHire": false, + "company": "Postman", + "isTscMember": true, + "repos": [ + "bindings", + "converter-go", + "event-gateway", + "go-watermill-template", + "infra", + "parser-api", + "parser-go", + "server-api", + "spec", + "spec-json-schemas", + "template-for-go-projects" + ] + }, + { + "name": "Souvik De", + "github": "Souvikns", + "slack": "U01SGCZMJKW", + "twitter": "souvik_ns", + "linkedin": "souvik-de-a2b941169", + "availableForHire": false, + "company": "Postman", + "isTscMember": true, + "repos": [ + "cli", + "bundler", + "glee" + ] + }, + { + "name": "Alejandra Quetzalli", + "github": "alequetzalli", + "twitter": "QuetzalliAle", + "slack": "U02AKC14WAJ", + "linkedin": "alejandra-quetzalli", + "availableForHire": false, + "company": "Postman", + "isTscMember": true, + "repos": [ + "website", + "training", + "community" + ] + }, + { + "name": "David Pereira", + "github": "BOLT04", + "twitter": "BOLT2938", + "slack": "U02EC8BT0TX", + "linkedin": "jos\u00e9-david-pereira-13ba5315a", + "availableForHire": false, + "company": "Create IT", + "isTscMember": true, + "repos": [ + "server-api" + ] + }, + { + "name": "Daniel Raper", + "github": "dan-r", + "slack": "U02FP8WBFQE", + "linkedin": "danielr", + "availableForHire": false, + "company": "IBM", + "isTscMember": true, + "repos": [ + "java-template" + ] + }, + { + "name": "Kieran Murphy", + "github": "KieranM1999", + "linkedin": "kieran-murphy-175b0412b", + "availableForHire": false, + "slack": "U02FT2TKM37", + "company": "IBM", + "isTscMember": true, + "repos": [ + "java-template" + ] + }, + { + "name": "Tom Jefferson", + "github": "JEFFLUFC", + "linkedin": "t-jefferson", + "slack": "U02FPPCEH6H", + "availableForHire": false, + "company": "IBM", + "isTscMember": true, + "repos": [ + "java-template" + ] + }, + { + "name": "Lewis Relph", + "github": "lewis-relph", + "availableForHire": false, + "slack": "U02G8MDDEF3", + "company": "IBM", + "isTscMember": true, + "repos": [ + "java-template" + ] + }, + { + "name": "David Boyne", + "github": "boyney123", + "twitter": "boyney123", + "slack": "U020GN9C6FM", + "availableForHire": false, + "company": "AWS", + "isTscMember": true, + "repos": [ + "studio", + "cli" + ] + }, + { + "name": "Semen Tenishchev", + "github": "Tenischev", + "linkedin": "semen-tenishchev", + "availableForHire": true, + "slack": "U011D1DAU6S", + "isTscMember": true, + "repos": [ + "java-spring-template" + ] + }, + { + "name": "Samridhi Agrawal", + "github": "Samridhi-98", + "slack": "U02T2MY9W5T", + "linkedin": "samridhi-agrawal-1713201ab", + "availableForHire": false, + "company": "ThoughtWorks", + "isTscMember": true, + "repos": [ + "modelina" + ] + }, + { + "name": "Debajyoti Halder", + "github": "ron-debajyoti", + "twitter": "rondebajyoti", + "slack": "U02UK9RUPGQ", + "linkedin": "rondebajyoti", + "availableForHire": false, + "company": "Narvar", + "isTscMember": true, + "repos": [ + "modelina" + ] + }, + { + "name": "Ivan Garcia Sainz-Aja", + "github": "ivangsa", + "linkedin": "ivangarciasainzaja", + "slack": "UTCN3ET4M", + "availableForHire": false, + "company": "SNGULAR", + "isTscMember": true, + "repos": [ + "vs-asyncapi-preview" + ] + }, + { + "name": "Florence Njeri", + "github": "Florence-Njeri", + "linkedin": "florencenjeri", + "slack": "U03D18YKX2M", + "twitter": "njericodes", + "availableForHire": true, + "isTscMember": true, + "repos": [ + "generator" + ] + }, + { + "name": "Jeremy Whitlock", + "github": "whitlockjc", + "linkedin": "whitlockjc", + "slack": "U03HBC08EBB", + "twitter": "whitlockjc", + "availableForHire": false, + "company": "Google", + "isTscMember": true, + "repos": [ + "bindings" + ] + }, + { + "name": "Vladim\u00edr Gorej", + "github": "char0n", + "linkedin": "vladimirgorej", + "slack": "U03NV5L4S49", + "twitter": "vladimirgorej", + "availableForHire": false, + "company": "SmartBear", + "isTscMember": true, + "repos": [ + "bindings", + "spec", + "spec-json-schemas" + ] + }, + { + "name": "Alexander Wichmann", + "github": "VisualBean", + "linkedin": "alexcarlsen", + "slack": "U04C58GB8TF", + "availableForHire": false, + "company": "The LEGO Group", + "isTscMember": true, + "repos": [ + "bindings" + ] + }, + { + "name": "Barba\u00f1o Gonz\u00e1lez", + "linkedin": "barbano-gonzalez-moreno", + "twitter": "BarbanoGonzalez", + "github": "Barbanio", + "slack": "U01J42QDSLU", + "availableForHire": false, + "company": "Postman", + "isTscMember": true, + "repos": [ + "training", + "community" + ] + }, + { + "name": "Kenneth Aasan", + "github": "kennethaasan", + "slack": "U037S2HK4TS", + "twitter": "kennethaasan", + "availableForHire": false, + "company": "Sportradar", + "isTscMember": true, + "repos": [ + "modelina" + ] + }, + { + "name": "Heiko Henning", + "github": "GreenRover", + "slack": "U03AC4G51H8", + "availableForHire": false, + "company": "mtrail GmbH", + "isTscMember": true, + "repos": [ + "protobuf-schema-parser" + ] + }, + { + "name": "connil", + "github": "connil", + "slack": "U03A51H8", + "availableForHire": false, + "company": "GmbH", + "isTscMember": false, + "repos": [ + "dotnet-rabbitmq-template" + ] + }, + { + "name": "mr-nuno", + "github": "mr-nuno", + "slack": "U03A5145", + "availableForHire": false, + "company": "GmbH", + "isTscMember": false, + "repos": [ + "dotnet-rabbitmq-template" + ] + }, + { + "name": "Thulisile Sibanda", + "github": "thulieblack", + "linkedin": "v-thulisile-sibanda", + "twitter": "thulieblack", + "slack": "U03CNJPMT7C", + "availableForHire": false, + "company": "AsyncAPI Initiative", + "isTscMember": true, + "repos": [ + "website", + "community" + ] } - ] \ No newline at end of file +] \ No newline at end of file From d03d6cd393c32838e9ac16b56a11686a401cc68a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 6 Jul 2023 02:36:56 +0200 Subject: [PATCH 45/51] chore: update meetings.json and newsrooom_videos.json (#1898) --- config/newsroom_videos.json | 12 ++++++------ dashboard.json | 32 +------------------------------- package-lock.json | 2 +- 3 files changed, 8 insertions(+), 38 deletions(-) diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json index c38908459bc..38718d10dee 100644 --- a/config/newsroom_videos.json +++ b/config/newsroom_videos.json @@ -1,4 +1,10 @@ [ + { + "image_url": "https://i.ytimg.com/vi/hc0Lxr3G8T4/hqdefault.jpg", + "title": "Spec 3.0 (July 5th 2023)", + "description": "https://github.com/asyncapi/community/issues/760.", + "videoId": "hc0Lxr3G8T4" + }, { "image_url": "https://i.ytimg.com/vi/EvC2PZXEM0M/hqdefault.jpg", "title": "Community Meeting, Tuesday June 27th 2023", @@ -22,11 +28,5 @@ "title": "Spec 3.0 (July 21th 2023)", "description": "https://github.com/asyncapi/community/issues/737.", "videoId": "DUB3XL_APgs" - }, - { - "image_url": "https://i.ytimg.com/vi/mAISwYCZa2I/hqdefault.jpg", - "title": "Studio planning", - "description": "https://github.com/asyncapi/community/issues/745.", - "videoId": "mAISwYCZa2I" } ] \ No newline at end of file diff --git a/dashboard.json b/dashboard.json index cde213832e2..b451034d37e 100644 --- a/dashboard.json +++ b/dashboard.json @@ -29,7 +29,7 @@ "resourcePath": "/asyncapi/generator/pull/978", "repo": "asyncapi/generator", "labels": [], - "score": 24.122665454937735 + "score": 24.697014632436254 }, { "id": "PR_kwDODCuNRs4r1oNL", @@ -702,21 +702,6 @@ } ] }, - { - "id": "I_kwDOFi_gUM5gradR", - "title": "add prettier configuration", - "isAssigned": false, - "resourcePath": "/asyncapi/glee/issues/398", - "repo": "asyncapi/glee", - "author": "KhudaDad414", - "area": "typescript", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - } - ] - }, { "id": "I_kwDOFDnrNc5gDKCJ", "title": "Generate example function for TypeScript models", @@ -853,21 +838,6 @@ } ] }, - { - "id": "I_kwDODyzcIc5Gl6TS", - "title": "Validate workflow on PR level", - "isAssigned": false, - "resourcePath": "/asyncapi/.github/issues/150", - "repo": "asyncapi/.github", - "author": "KhudaDad414", - "area": "ci-cd", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - } - ] - }, { "id": "I_kwDOFiHaLM5DeQ4y", "title": "Add support for HTML output", diff --git a/package-lock.json b/package-lock.json index d191f0a2c56..0ca4662364d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@floating-ui/react-dom-interactions": "^0.1.1", "@fullhuman/postcss-purgecss": "^2.2.0", "@heroicons/react": "^1.0.5", - "@mdx-js/loader": "^1.6.4", + "@mdx-js/loader": "1.6.4", "@mdx-js/react": "^1.6.4", "@monaco-editor/react": "^3.3.0", "@next/mdx": "^9.4.2", From e5ec8a1344cfcea50701bfe7f69ab500792633d6 Mon Sep 17 00:00:00 2001 From: Shriansh Agarwal <41548480+Shriansh2002@users.noreply.github.com> Date: Thu, 6 Jul 2023 14:47:14 +0530 Subject: [PATCH 46/51] style: dynamic logo colors for brands (#1894) Co-authored-by: Lukasz Gornicki --- components/logos/Adidas.js | 8 ++++---- components/logos/Axway.js | 12 +++++++----- components/logos/SAP.js | 30 ++++++++++++++++++++++-------- components/logos/Salesforce.js | 4 ++-- components/logos/Slack.js | 10 +++++----- pages/index.js | 6 +++--- 6 files changed, 43 insertions(+), 27 deletions(-) diff --git a/components/logos/Adidas.js b/components/logos/Adidas.js index 900b9dddcd0..9c4a10348cb 100644 --- a/components/logos/Adidas.js +++ b/components/logos/Adidas.js @@ -1,8 +1,8 @@ export default function AdidasLogo({ className }) { - return ( - - - + + - - + + + + + - - diff --git a/components/logos/SAP.js b/components/logos/SAP.js index 2980d29f373..91a92b7b3b9 100644 --- a/components/logos/SAP.js +++ b/components/logos/SAP.js @@ -1,12 +1,26 @@ +import { useState } from 'react'; + export default function SapLogo({ className }) { - return ( - - - - - - - + + + + + + - - + + diff --git a/components/logos/Slack.js b/components/logos/Slack.js index e17e5b23260..cdb6a9ec1f0 100644 --- a/components/logos/Slack.js +++ b/components/logos/Slack.js @@ -20,25 +20,25 @@ export default function SlackLogo({ className }) { c18.718,0,36.612-8.433,43.812-20.568v17.483h44.018V338.088H772.978L772.978,338.088z"/> - + - + - + - +
    • - +
    • - +
    • - +
    • From 4d7dbaab36910e60f28eecd028d47d82dda2985c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 6 Jul 2023 11:19:48 +0200 Subject: [PATCH 47/51] docs: add Shriansh2002 as a contributor for code (#1902) --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 413b39b877e..f94f065a90b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -482,6 +482,15 @@ "contributions": [ "infra" ] + }, + { + "login": "Shriansh2002", + "name": "Shriansh Agarwal", + "avatar_url": "https://avatars.githubusercontent.com/u/41548480?v=4", + "profile": "http://shrianshagarwal.in", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index b1e0d423877..cdc10510689 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ --- -[![All Contributors](https://img.shields.io/badge/all_contributors-48-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-49-orange.svg?style=flat-square)](#contributors-) [![Netlify Status](https://api.netlify.com/api/v1/badges/b2137407-b765-46c4-95b5-a72d9b1592ab/deploy-status)](https://app.netlify.com/sites/asyncapi-website/deploys) @@ -210,6 +210,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Florence Njeri
      Florence Njeri

      💻 Ansh Goyal
      Ansh Goyal

      💻 👀 Sumant.xD
      Sumant.xD

      🚇 + Shriansh Agarwal
      Shriansh Agarwal

      💻 From 48832ef24d9d2579221ce8d504fd62b2cd77b280 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 6 Jul 2023 12:37:44 +0200 Subject: [PATCH 48/51] docs(cli): update latest cli documentation (#1903) --- pages/docs/tools/cli/usage.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pages/docs/tools/cli/usage.md b/pages/docs/tools/cli/usage.md index 221181bcd32..1af7135f676 100644 --- a/pages/docs/tools/cli/usage.md +++ b/pages/docs/tools/cli/usage.md @@ -29,7 +29,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/0.50.0 linux-x64 node-v18.16.1 +@asyncapi/cli/0.50.1 linux-x64 node-v18.16.1 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -91,7 +91,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./asyncapi.yaml --reference-into-components ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.50.0/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/bundle.ts)_ ## `asyncapi config` @@ -105,7 +105,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.50.0/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/config/index.ts)_ ## `asyncapi config context` @@ -234,7 +234,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.50.0/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -289,7 +289,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.50.0/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/diff.ts)_ ## `asyncapi generate` @@ -303,7 +303,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/v0.50.0/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -429,7 +429,7 @@ DESCRIPTION Creates a new asyncapi file ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.50.0/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -517,7 +517,7 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --output=terminal --no-tty ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.50.0/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/optimize.ts)_ ## `asyncapi start` @@ -531,7 +531,7 @@ DESCRIPTION Start asyncapi studio ``` -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.50.0/src/commands/start/index.ts)_ +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -575,5 +575,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.50.0/src/commands/validate.ts)_ +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.50.1/src/commands/validate.ts)_ From 2cf4ae651295e2759f14126059790c3c6dcce4f3 Mon Sep 17 00:00:00 2001 From: Missy Turco <60163079+mcturco@users.noreply.github.com> Date: Thu, 6 Jul 2023 17:41:04 -0400 Subject: [PATCH 49/51] Remove mcturco from CO (#1904) --- CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 56d4723855a..cf7a212d7c9 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -5,7 +5,7 @@ # For more details, read the following article on GitHub: https://help.github.com/articles/about-codeowners/. # The default owners are automatically added as reviewers when you open a pull request unless different owners are specified in the file. -* @derberg @mcturco @akshatnema @magicmatatjahu @asyncapi-bot-eve +* @derberg @akshatnema @magicmatatjahu @asyncapi-bot-eve # All .md files *.md @alequetzalli @asyncapi-bot-eve @@ -13,4 +13,4 @@ pages/blog/*.md @thulieblack @alequetzalli pages/community/*.md @thulieblack @alequetzalli -README.md @alequetzalli @derberg @mcturco @akshatnema @magicmatatjahu @asyncapi-bot-eve +README.md @alequetzalli @derberg @akshatnema @magicmatatjahu @asyncapi-bot-eve From ee6fda9fe6eba58733041e822c472c58cc07778f Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Fri, 7 Jul 2023 02:36:06 +0200 Subject: [PATCH 50/51] chore: update meetings.json and newsrooom_videos.json (#1907) --- config/meetings.json | 14 +++++++++ config/newsroom_videos.json | 12 ++++---- dashboard.json | 61 ++++++++++++++++++++----------------- 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/config/meetings.json b/config/meetings.json index 1b9e7cfa8ea..215452d33db 100644 --- a/config/meetings.json +++ b/config/meetings.json @@ -212,5 +212,19 @@ "url": "https://github.com/asyncapi/community/issues/784", "banner": "https://user-images.githubusercontent.com/40604284/250981834-3418496b-d123-4e74-a7ff-082b4714c841.png", "date": "2023-07-11T16:00:00.000Z" + }, + { + "title": "Spec 3.0 Docs Meeting", + "calLink": "https://www.google.com/calendar/event?eid=NzU0aGMxOWY5MmYyYzA3OTduazF0MWZqY2MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/790", + "banner": "", + "date": "2023-07-20T14:30:00.000Z" + }, + { + "title": "Spec 3.0 Docs Meeting", + "calLink": "https://www.google.com/calendar/event?eid=aWhzNWwxZWkxdWVlMWhvbGs4aWY2YzU1am8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/791", + "banner": "", + "date": "2023-08-03T14:30:00.000Z" } ] \ No newline at end of file diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json index 38718d10dee..7f757c8ea12 100644 --- a/config/newsroom_videos.json +++ b/config/newsroom_videos.json @@ -1,4 +1,10 @@ [ + { + "image_url": "https://i.ytimg.com/vi/Lunp8eSLONc/hqdefault.jpg", + "title": "Spec 3.0 DOCS Meeting (July 6th 2023)", + "description": "https://github.com/asyncapi/community/issues/774.", + "videoId": "Lunp8eSLONc" + }, { "image_url": "https://i.ytimg.com/vi/hc0Lxr3G8T4/hqdefault.jpg", "title": "Spec 3.0 (July 5th 2023)", @@ -22,11 +28,5 @@ "title": "AsyncAPI Spec 3.0 Docs Meeting", "description": "https://github.com/asyncapi/community/issues/749.", "videoId": "dRu9itGfJ1E" - }, - { - "image_url": "https://i.ytimg.com/vi/DUB3XL_APgs/hqdefault.jpg", - "title": "Spec 3.0 (July 21th 2023)", - "description": "https://github.com/asyncapi/community/issues/737.", - "videoId": "DUB3XL_APgs" } ] \ No newline at end of file diff --git a/dashboard.json b/dashboard.json index b451034d37e..69f966fb9fb 100644 --- a/dashboard.json +++ b/dashboard.json @@ -9,16 +9,32 @@ "resourcePath": "/asyncapi/spec/issues/618", "repo": "asyncapi/spec", "labels": [ - { - "name": "stale", - "color": "819cd3" - }, { "name": "💭 Strawman (RFC 0)", "color": "C2E0C6" } ], - "score": 52.265775152365094 + "score": 52.84012432986361 + }, + { + "id": "I_kwDOFLhIt84-OUI3", + "isPR": false, + "isAssigned": false, + "title": "Create educational & technical video explaining AsyncAPI's main features", + "author": "alequetzalli", + "resourcePath": "/asyncapi/community/issues/155", + "repo": "asyncapi/community", + "labels": [ + { + "name": "enhancement", + "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" + } + ], + "score": 32.45072852866624 }, { "id": "PR_kwDOCHlHJM5SLlyl", @@ -29,7 +45,7 @@ "resourcePath": "/asyncapi/generator/pull/978", "repo": "asyncapi/generator", "labels": [], - "score": 24.697014632436254 + "score": 25.55853839868403 }, { "id": "PR_kwDODCuNRs4r1oNL", @@ -107,6 +123,17 @@ "labels": [], "score": 16.65612614745701 }, + { + "id": "PR_kwDOFLhIt85RTiHb", + "isPR": true, + "isAssigned": false, + "title": "docs: add flowchart for GSoC23 project in README.md", + "author": "14Richa", + "resourcePath": "/asyncapi/community/pull/719", + "repo": "asyncapi/community", + "labels": [], + "score": 14.358729437462937 + }, { "id": "PR_kwDOBGu-185KHmXZ", "isPR": true, @@ -128,28 +155,6 @@ "repo": "asyncapi/cli", "labels": [], "score": 14.07155484871368 - }, - { - "id": "PR_kwDOBW5R_c5Jw5C6", - "isPR": true, - "isAssigned": true, - "title": "docs: new style guide - Inclusive Language", - "author": "BhaswatiRoy", - "resourcePath": "/asyncapi/website/pull/1327", - "repo": "asyncapi/website", - "labels": [], - "score": 14.07155484871368 - }, - { - "id": "PR_kwDOB5hCo85NWLAa", - "isPR": true, - "isAssigned": false, - "title": "feat!: allow multi format schemas", - "author": "smoya", - "resourcePath": "/asyncapi/spec-json-schemas/pull/370", - "repo": "asyncapi/spec-json-schemas", - "labels": [], - "score": 13.497205671215161 } ], "goodFirstIssues": [ From 5b7b28b17f4c3f47890a16db2af8d0fa813351f9 Mon Sep 17 00:00:00 2001 From: Gilbert Adikankwu Date: Mon, 10 Jul 2023 14:01:31 +0100 Subject: [PATCH 51/51] docs: Add how to create async api --- .../tutorials/create-asyncapi-document.md | 200 +++++++++++------- 1 file changed, 129 insertions(+), 71 deletions(-) diff --git a/pages/docs/tutorials/create-asyncapi-document.md b/pages/docs/tutorials/create-asyncapi-document.md index 946bb016aed..0a89bebbd60 100644 --- a/pages/docs/tutorials/create-asyncapi-document.md +++ b/pages/docs/tutorials/create-asyncapi-document.md @@ -8,28 +8,28 @@ weight: 80 In this tutorial, you'll learn how to create an AsyncAPI document based on a sample real-world use case. Additionally, you will learn about event-driven architecture, message brokers, pub/sub pattern. -Let's pretend you have a company called Smarty Lighting, and you install smart-city streetlight lighting systems. This smart lighting system is a use case of the Internet of Things (IoT). You will create a Smarty Lighting Streetlights API using Node.js and Mosquitto (MQTT) as the message broker. This API will allow you to manage city lights remotely. +Let's pretend you have a company called Smarty Lighting, and you install smart-city streetlight lighting systems. This smart lighting system is a use case of the Internet of Things (IoT). You will create a Smarty Lighting Streetlights API using Node.js and Mosquitto (MQTT) as the message broker. This API will allow you to manage city lights remotely. -You want to build a system that can turn streetlights on and off based on their environmental conditions: +You want to build a system that can turn streetlights on and off based on their environmental conditions: - You will implement an event-driven architecture (EDA) with a message broker in its "center." -- Streetlights will publish information about their environmental lighting to the broker. +- Streetlights will send information about their environmental lighting to the broker. - Your application will connect to the broker and receive a stream of events from all the streetlights reporting their conditions. -- Your application decides based on events when to turn the streetlight off. +- Your application decides based on events when to turn off the streetlights. -- Your application is not aware of how many streetlights are publishing events - it just connects to the broker and receives all events. +- Your application is not aware of how many streetlights are sending events - it just connects to the broker and receives all events. ## Background context -Event-driven architecture (EDA) is a design pattern built around the production, detection, and reaction to events that take place in time. In this pattern, a message broker, event publishers and subscribers are its main components for event exchange within microservices. +**Event-driven architecture (EDA)** is a design pattern built around the production, detection, and reaction to events that take place in time. In this pattern, a message broker, event publishers and subscribers are its main components for event exchange within microservices. Publishers send events as messages to a message broker and subscribers recieve events as messages from the message broker. -[Message brokers](/docs/tutorials/getting-started/event-driven-architectures#message-broker) enables asynchronous communications between services so that the sending service need not wait for the receiving service’s reply. This allows interdependent services to “talk” with one another directly, even if they were written in different languages or implemented on different platforms. +[Message brokers](/docs/tutorials/getting-started/event-driven-architectures#message-broker) enables asynchronous communications between services so that the sending service need not wait for the receiving service’s reply. This allows interdependent services to “talk” with one another directly, even if they were written in different languages or implemented on different platforms. -Furthermore, the [Pub/sub](/docs/tutorials/getting-started/event-driven-architectures#publishersubscriber) is appealing for IoT use cases due to two key features: support for flexible coupling between publishers/subscribers and inherent support for point-to-multipoint transmission. +Furthermore, the EDA [pub/sub](/docs/tutorials/getting-started/event-driven-architectures#publishersubscriber) model is appealing for IoT use cases due to two key features: support for flexible coupling between publishers/subscribers and inherent support for point-to-multipoint transmission. [MQTT](https://mqtt.org/), is a well-known protocol that is widely used in IoT applications because it was created particularly to address machine-to-machine (M2M) communication. @@ -41,7 +41,7 @@ To create one, you can either use the [AsyncAPI Studio](https://studio.asyncapi. -You can create a new `asyncapi.yaml` document by running: +You can create a new `asyncapi.yaml` document by running: `asyncapi new --example=tutorial.yml --no-tty`. @@ -49,7 +49,7 @@ You can create a new `asyncapi.yaml` document by running: Go ahead to create the specification documents titled `asyncapi` with a `.yaml` extension. -{`asyncapi: '2.5.0' +{`asyncapi: '3.0.0' info: title: Streetlights API version: '1.0.0' @@ -59,38 +59,47 @@ info: license: name: Apache 2.0 url: 'https://www.apache.org/licenses/LICENSE-2.0' + servers: mosquitto: - url: mqtt://test.mosquitto.org + host: test.mosquitto.org protocol: mqtt + channels: - light/measured: - publish: - summary: Inform about environmental lighting conditions for a particular streetlight. - operationId: onLightMeasured - message: - name: LightMeasured - payload: - type: object - properties: - id: - type: integer - minimum: 0 - description: Id of the streetlight. - lumens: - type: integer - minimum: 0 - description: Light intensity measured in lumens. - sentAt: - type: string - format: date-time - description: Date and time when the message was sent.`} + lightMeasured: + address: 'light/measured' + messages: + lightMeasuredMessage: + name: LightMeasured + payload: + type: object + properties: + id: + type: integer + minimum: 0 + description: Id of the streetlight. + lumens: + type: integer + minimum: 0 + description: Light intensity measured in lumens. + sentAt: + type: string + format: date-time + description: Date and time when the message was sent. + +operations: + onLightMeasured: + action: 'recieve' + summary: Inform about enviromental lighting conditions for a particular streetlight. + operationId: onLightMeasured + channel: + $ref: '#/channels/lightMeasured'`} Let's break it down into pieces: -{`asyncapi: '2.5.0' +{`asyncapi: '3.0.0' info: title: Streetlights API version: '1.0.0' @@ -102,55 +111,104 @@ info: url: 'https://www.apache.org/licenses/LICENSE-2.0'`} -- The `asyncapi` field indicates you use the AsyncAPI version 2.5.0. +- The `asyncapi` field indicates you use the AsyncAPI version 3.0.0. -- The `info` field holds information about the Streetlights API. Here, the title, version, description and license were defined. +- The `info` section holds information about the Streetlights API. Here, its +title, version, description and license is defined. -Moving on, let's talk about the `servers` section. +Moving on, let's talk about the `servers` section. In this section, you define +the connection details of the servers that will handle the events sent by +the streetlights to your API. Each server's connection detail is +defined as a Server Object: {`servers: - mosquitto: - url: mqtt://test.mosquitto.org - protocol: mqtt`} - - -In this section, you point to the Eclipse Mosquitto message broker. The `url` point to a real instance of the broker [hosted by the Mosquitto community](https://test.mosquitto.org/) and the `protocol` as MQTT. If you do not want to use the test instance, you can spin up your own broker locally with `docker run -it -p 1883:1883 eclipse-mosquitto:1.5`. But remember to change `url` to `mqtt://localhost` - -Now lets move on to the `channels` section. This section is used to describe the event names your API will be publishing and/or subscribing to. - + mosquitto: + host: test.mosquitto.org + protocol: mqtt`} + +You have defined a Server Object named `mosquitto`, which +refers to the Eclipse Mosquitto message broker. In a Server Object, the `host` +field is used to specify the hostname of the server, and the `protocol` field is +used to specify the protocol the server supports. The `host` is +set as a real instance of the broker +[hosted by the Mosquitto community](https://test.mosquitto.org/) and the +`protocol` is set as MQTT. If you do not want to use the test instance, you can run +a broker on your local machine with `docker run -it -p 1883:1883 eclipse-mosquitto:1.5`. +But remember to change `host` to `localhost:1883` + +Now lets move on to the `channels` section. In this section, you define the +communication channels for all the events that will be processed by the message +broker. Each communication channel is defined as a Channel Object with an +identifier that follow common programming naming conventions: {`channels: - light/measured: - publish: - summary: Inform about environmental lighting conditions for a particular streetlight. - operationId: onLightMeasured`} + lightMeasured: + address: 'light/measured' + messages: + lightMeasuredMessage: + name: LightMeasured + payload: + type: object + properties: + id: + type: integer + minimum: 0 + description: Id of the streetlight. + lumens: + type: integer + minimum: 0 + description: Light intensity mesured in lumens. + sentAt: + type: string + format: date-time + description: Date and time when the message was sent.`} -In this example, `light/measured` is the channel name the Streetlight API will `subscribe` to (i.e, to interact with the Streetlight API you `publish` to the broker). The `operationId` property, describes what is the name of function or method that takes care of this functionality in the generated code. - -Next is the `payload` property which is used to understand how the event should look like when publishing to that channel: +You have defined one Channel Object named `lightMeasured`. In the `address` +field of a Channel Object, you define the "topic name", "routing key", "event +type", or "path" of the channel and then in the `messages` field, you define +Message Objects to describe the messages that can be sent to the channel by an +application at any time. In the example, you have set `address` as +`'light/measured'` and `messages` has one defined Message Object named +`lightMeasuredMessage`. + +In the Message Object `lightMeasuredMessage` two fields are defined; `name` and +`payload`. The `name` field of a Message Object is used to specify a +machine-friendly name for the message, and the `payload` field is used to +define how the message should look like when it is sent to the channel. In the +example, `name` is set as *LightMeasured* and `payload` defines the event using +AsyncAPI schemas that means the message should contain an `id` and a `lumens` +property-which are integers bigger than zero-, and a `sentAt` property that should be a +string containing a date and time. + +> JSON Schema Draft 07 is 100% compatible with AsyncAPI schemas. You can also +> use other standards to describe payload schema, like, for example +> [Avro](https://github.com/asyncapi/avro-schema-parser#usage). + + +Next is the `operations` section. In this section, you define all the +operation your application MUST implement. Each operation is defined as an +Operation Object with an identifier that follows common programming naming +conventions: -{` payload: - type: object - properties: - id: - type: integer - minimum: 0 - description: Id of the streetlight. - lumens: - type: integer - minimum: 0 - description: Light intensity measured in lumens. - sentAt: - type: string - format: date-time - description: Date and time when the message was sent.`} +{`operations: + onLightMeasured: + action: 'receive' + summary: Inform about enviromental lighting conditions for a particular streetlight. + channel: + $ref: '#/channels/lightMeasured'`} - -The `payload` property defines the content of the event using AsyncAPI schemas. It means that your event payload should contain an `id` and a `lumens` property —which are integers bigger than zero—, and a `sentAt` property that should be a string containing a date and time. - -> JSON Schema Draft 07 is 100% compatible with AsyncAPI schemas. You can also use other standards to describe payload schema, like, for example [Avro](https://github.com/asyncapi/avro-schema-parser#usage). +You have defined one Operation Object named `onLightMeasured`. In the `action` +field of Operation Object, you define how your application should +interact with a message. You use the `summary` field to provide a short summary of +what the operation is about and, then its `channel` field is used to provide a +reference point to the channel in which the operation is performed. In the example, +`action` is set as *receive* (which is an operation keyword) because your +application expects to receive messages from channel it is subscribed to. The +`summary` field is set with a clear summary of the nature of the messages the +operation expects to receive and the `channel` field is set with a reference +pointer to the channel the operation will get its messages from. ## Summary