From 6ab6cc64fd2eeeb8b6bd4a5d58f01a5f5b40bca5 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 17 Jun 2023 02:30:57 +0200 Subject: [PATCH 01/37] 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 80432da1f845..6dc62d86fb42 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 a6eb4638d010..8a91a1cf5c66 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/37] 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 6da9faa1b63a..c99b621d5d76 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 2810218811e8..a9782b91548a 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 000000000000..9081127df4ba --- /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 000000000000..2d30074acd8f --- /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 000000000000..4e19c7f23e86 --- /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/37] 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 39aa1bd733af..8262e37ac97f 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 000000000000..c8fec12b78c0 --- /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 f6c2627ebc9d..3ec6b0d00fba 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 000000000000..8814b497c596 --- /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 000000000000..71eecd310685 --- /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/37] 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 8fdbe1828d1e..b5be16046b9a 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 be4cf8af8ca8..b2e092e81a3a 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 2efe879338f8..64905917ffc8 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 5a3394d32424..910937de9868 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 000000000000..eaea92624283 --- /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 000000000000..bc99d3bf5853 --- /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 000000000000..54c80d31cf3d --- /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 000000000000..5ef50f812c42 --- /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/37] 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 8a91a1cf5c66..d0106c02b513 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/37] 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 0d9eef9057dd..74a4436ff163 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/37] 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 576936e2a829..0f051ecb2ed1 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/37] 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 8e487ab74e2c..82d1a7d717c3 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 2ff57070adeb..1e9a060fde57 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/37] 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 1593c7f8d080..27fd09fd1061 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/37] 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 42f54a7f3cc7..a52931c57497 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 69905cfd8983..cae0247a1dc6 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/37] 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 2cad4f837645..466d9822c252 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/37] 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 08ee3bb9187e..2ce01466cead 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/37] 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 f260efd014a7..000000000000 --- 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 ff7a6b0d800a..000000000000 --- 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 a6734b13ce44..000000000000 --- 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 87f03bc5f578..000000000000 --- 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 8d78509b98e4..000000000000 --- 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 a25ddaea3fe2..000000000000 --- 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 b95bede80e58..000000000000 --- 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/37] 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 a52931c57497..eb16bc4c0ab7 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 cae0247a1dc6..730845bdae16 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/37] 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 2ce01466cead..8129f2055b95 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/37] 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 137d2fb77e8e..f8cc63d308df 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 62c9d7fb82dc..a23adb9fffe4 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/37] 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 eb16bc4c0ab7..247c4c8125c1 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 730845bdae16..e9f047987e94 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/37] 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 247c4c8125c1..413b39b877ee 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 e9f047987e94..b1e0d4238773 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/37] 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 f85a6cca4e79..ba77845b03bd 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/37] 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 f33022b44076..2557abfabf4c 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/37] 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 a49fdc794e6d..d191f0a2c560 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/37] 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 28d921526b38..35af42ce4628 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/37] 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 d1022fbdcc39..c38908459bc3 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/37] 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 000000000000..932347021a1c --- /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/37] 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 8129f2055b95..13dc252384f4 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=