diff --git a/.all-contributorsrc b/.all-contributorsrc index 42f54a7f3cc7..eb16bc4c0ab7 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -454,6 +454,24 @@ "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" + ] + }, + { + "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 69905cfd8983..730845bdae16 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-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) @@ -207,6 +207,8 @@ 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

💻 + Ansh Goyal
Ansh Goyal

💻 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('`', '')} )) } 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/components/data/buckets.js b/components/data/buckets.js new file mode 100644 index 000000000000..a171d2718858 --- /dev/null +++ b/components/data/buckets.js @@ -0,0 +1,70 @@ +import IconGettingStarted from '../icons/GettingStarted' +import IconTutorials from '../icons/Tutorials' +import IconUseCases from '../icons/UseCases' +import IconGuide from '../icons/Guide' +import IconSpec from '../icons/Spec' +import IconUsers from '../icons/Users' + +export const buckets = [ + { + name: 'concepts', + title: 'Concepts', + description: 'Our Concepts section defines the concepts of AsyncAPI features and capabilities.', + link: '/docs/concepts', + className: 'bg-secondary-200', + borderClassName: 'border-secondary-200', + Icon: IconGettingStarted, + }, + { + name: 'tutorials', + title: 'Tutorials', + description: 'Our Tutorials section teaches beginner processes with AsyncAPI, guiding you from Point A to Point B.', + link: '/docs/tutorials', + className: 'bg-pink-100', + borderClassName: 'border-pink-100', + Icon: IconTutorials, + }, + { + name: 'guides', + title: 'Guides', + description: "Our Guides section teaches AsyncAPI's capabilities at a high level.", + link: '/docs/guides', + className: 'bg-primary-200', + borderClassName: 'border-primary-200', + Icon: IconGuide, + }, + { + name: 'tools', + title: 'Tools', + description: 'Our Tools section documents the AsyncAPI tools ecosystem.', + link: '/docs/tools', + className: 'bg-green-200', + borderClassName: 'border-green-200', + Icon: IconUseCases, + }, + { + name: 'reference', + title: 'Reference', + description: 'Our Reference section documents the AsyncAPI specification.', + link: '/docs/reference', + className: 'bg-yellow-200', + borderClassName: 'border-yellow-200', + Icon: IconSpec, + }, + { + name: 'community', + title: 'Community', + description: 'Our Community section documents the community guidelines and resources.', + link: '/docs/community', + className: 'bg-orange-200', + borderClassName: 'border-orange-200', + Icon: IconUsers, + }, +].map(bucket => { + // we need such a mapping for some parts of website, e.g navigation blocks use the `icon` property, not `Icon` etc. + return { + ...bucket, + href: bucket.link, + icon: bucket.Icon, + }; +}); diff --git a/components/docs/DocsCards.js b/components/docs/DocsCards.js index 8a5f21c6a596..8262e37ac97f 100644 --- a/components/docs/DocsCards.js +++ b/components/docs/DocsCards.js @@ -2,56 +2,16 @@ import Link from 'next/link'; import Heading from '../typography/Heading'; import Paragraph from '../typography/Paragraph'; -import IconGettingStarted from '../icons/GettingStarted' -import IconTutorials from '../icons/Tutorials' -import IconUseCases from '../icons/UseCases' -import IconGuide from '../icons/Guide' -import IconSpec from '../icons/Spec' - -const cards = [ - { - title: 'Concepts', - description: 'Our Concepts section defines the concepts of AsyncAPI features and capabilities.', - link: '/docs/concepts', - className: 'bg-secondary-200', - Icon: IconGettingStarted, - }, - { - title: 'Tutorials', - description: 'Our Tutorials section teaches beginner processes with AsyncAPI, guiding you from Point A to Point B.', - link: '/docs/tutorials', - className: 'bg-pink-100', - Icon: IconTutorials, - }, - { - title: 'Tools', - description: 'Our Tools section documents the AsyncAPI tools ecosystem.', - link: '/docs/tools', - className: 'bg-green-200', - Icon: IconUseCases, - }, - { - title: 'Guides', - description: "Our Guides section teaches AsyncAPI's capabilities at a high level.", - link: '/docs/guides', - className: 'bg-primary-200', - Icon: IconGuide, - }, - { - title: 'Reference', - description: 'Our Reference section documents the AsyncAPI specification.', - link: '/docs/reference', - className: 'bg-yellow-200', - Icon: IconSpec, - } -]; +import { buckets } from '../data/buckets'; export function DocsCards() { return ( -
- {cards.map(card => ( +
+ {buckets.map(card => ( + ))} +
); } @@ -59,17 +19,17 @@ export function DocsCards() { function Card({ title, description, link, className, Icon }) { return ( - +
-
+
-
- +
+
{title}
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/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/components/icons/Users.js b/components/icons/Users.js new file mode 100644 index 000000000000..c46a89deb774 --- /dev/null +++ b/components/icons/Users.js @@ -0,0 +1,21 @@ +export default function IconUsers({ ...rest }) { + return ( + + + + + + + ); +} 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/components/navigation/DocsNav.js b/components/navigation/DocsNav.js index d2de1f392d8d..a975157c5adc 100644 --- a/components/navigation/DocsNav.js +++ b/components/navigation/DocsNav.js @@ -1,38 +1,20 @@ import DocsNavItem from './DocsNavItem'; +import IconHome from '../icons/Home'; -import IconHome from '../icons/Home' -import IconRocket from '../icons/Rocket' -import IconGradCap from '../icons/GradCap' -import IconPlant from '../icons/Plant' -import IconGuide from '../icons/Guide' -import IconPaper from '../icons/Paper' +import { buckets } from '../data/buckets'; -const buckets = { - 'welcome': { +const serializedBuckets = buckets.reduce((acc, bucket) => { + acc[bucket.name] = { + ...bucket, + className: `${bucket.className} ${bucket.borderClassName}`, + }; + return acc; +}, { + welcome: { icon: IconHome, className: 'bg-gray-300 border-gray-300', }, - 'concepts': { - icon: IconRocket, - className: 'bg-secondary-200 border-secondary-200', - }, - 'tutorials': { - icon: IconGradCap, - className: 'bg-pink-100 border-pink-100', - }, - 'tools': { - icon: IconPlant, - className: 'bg-green-200 border-green-200', - }, - 'guides': { - icon: IconGuide, - className: 'bg-primary-200 border-primary-200', - }, - 'reference': { - icon: IconPaper, - className: 'bg-yellow-200 border-yellow-200', - }, -}; +}); export default function DocsNav({ item, @@ -40,9 +22,11 @@ export default function DocsNav({ onClick = () => {}, }) { const subCategories = item.children; + const bucket = serializedBuckets[item.item.rootSectionId]; + return (
    • - +
        {Object.values(subCategories).map((subCategory) => (
      • diff --git a/components/navigation/LearningPanel.js b/components/navigation/LearningPanel.js index 3e5d5c2c6f42..d7fe4fdcea5e 100644 --- a/components/navigation/LearningPanel.js +++ b/components/navigation/LearningPanel.js @@ -1,8 +1,8 @@ import FlyoutMenu from './FlyoutMenu' -import learningItems from './learningItems' +import { buckets } from '../data/buckets' export default function LearningPanel () { return ( - + ) } diff --git a/components/navigation/learningItems.js b/components/navigation/learningItems.js index 9172ee28612a..65ba491f9a96 100644 --- a/components/navigation/learningItems.js +++ b/components/navigation/learningItems.js @@ -3,11 +3,13 @@ import IconGradCap from '../icons/GradCap' import IconPlant from '../icons/Plant' import IconGuide from '../icons/Guide' import IconPaper from '../icons/Paper' +import IconUsers from '../icons/Users' export default [ { href: '/docs/concepts', icon: IconRocket, className: 'bg-secondary-200', title: 'Concepts', description: 'Our Concepts section defines the concepts of AsyncAPI features and capabilities.' }, { href: '/docs/tutorials', icon: IconGradCap, className: 'bg-pink-100', title: 'Tutorials', description: 'Our Tutorials section teaches beginner processes with AsyncAPI, guiding you from Point A to Point B.' }, { href: '/docs/tools', icon: IconPlant, className: 'bg-green-200', title: 'Tools', description: 'Our Tools section documents the AsyncAPI tools ecosystem.' }, { href: '/docs/guides', icon: IconGuide, className: 'bg-primary-200', title: 'Guides', description: `Our Guides section teaches AsyncAPI's capabilities at a high level.` }, - { href: '/docs/reference', icon: IconPaper, className: 'bg-yellow-200', title: 'Reference', description: `Our Reference section documents the AsyncAPI specification.` } + { href: '/docs/reference', icon: IconPaper, className: 'bg-yellow-200', title: 'Reference', description: `Our Reference section documents the AsyncAPI specification.` }, + { href: '/docs/community', icon: IconUsers, className: 'bg-red-200', title: 'Community', description: `Our Community section documents the community guidelines and resources.` }, ] diff --git a/components/tabs/Tabs.js b/components/tabs/Tabs.js index 15c09cb0db65..dfaff2151ac3 100644 --- a/components/tabs/Tabs.js +++ b/components/tabs/Tabs.js @@ -30,4 +30,4 @@ export default function Tabs({ tabs = [], className = '' }) {
); -} \ No newline at end of file +} 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/config/meetings.json b/config/meetings.json index 8f62c53f0322..6dc62d86fb42 100644 --- a/config/meetings.json +++ b/config/meetings.json @@ -1,40 +1,10 @@ [ - { - "title": "Spec 3.0 Meeting", - "calLink": "https://www.google.com/calendar/event?eid=M2swdGhkaG9mbmpndGZqNzQ1czY1cmd1YjggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/599", - "date": "2023-03-01T16:00:00.000Z" - }, - { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=Z3NuN29kOTBvNmZyc29yaDJscGc1YmhuMzAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/603", - "date": "2023-02-21T16:00:00.000Z" - }, - { - "title": "Triage of issues and PRs in website repo", - "calLink": "https://www.google.com/calendar/event?eid=bTV0bzl0YzAzMmtoa24yOWI3YmFvbW9ncHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/619", - "date": "2023-02-28T16:00:00.000Z" - }, { "title": "Spec 3.0 Meeting", "calLink": "https://www.google.com/calendar/event?eid=YTNvaDExZGQ0dmwzZmxsdTU2dHZ1OW5iZzggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", "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": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=NmRyanI0ZGd2cHNqOG5qb3FvMWRlZG9oMmcgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/629", - "date": "2023-03-07T08:00:00.000Z" - }, { "title": "Spec 3.0 Meeting", "calLink": "https://www.google.com/calendar/event?eid=bjE2ZTdnZGJ1bHNxMWhrcW9rcjh0bGRxN3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", @@ -154,5 +124,68 @@ "url": "https://github.com/asyncapi/community/issues/716", "banner": "https://user-images.githubusercontent.com/40604284/240259984-a4ce1ebd-653a-4a61-818f-6707b33b0777.png", "date": "2023-06-08T12:00:00.000Z" + }, + { + "title": "Studio plans", + "calLink": "https://www.google.com/calendar/event?eid=M3NudjU3MG1obmh1MGJxaXBvY2F0dDU4ZTQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/728", + "banner": "", + "date": "2023-06-05T10:00:00.000Z" + }, + { + "title": "Spec 3.0 Meeting", + "calLink": "https://www.google.com/calendar/event?eid=NnIxNnRnMmVoaXMxcGRvYnI1dTM4YXZocmMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/734", + "banner": "", + "date": "2023-06-07T16:00:00.000Z" + }, + { + "title": "Spec 3.0 Meeting", + "calLink": "https://www.google.com/calendar/event?eid=bXJoZ24wcG5jbzM3dTR2cGxuYnQxbHA0Y3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/737", + "banner": "", + "date": "2023-06-21T16:00:00.000Z" + }, + { + "title": "Community Meeting", + "calLink": "https://www.google.com/calendar/event?eid=bmZkbWxjNnZlb2tvYzRidWVsZTgyczR1MTQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/738", + "banner": "https://user-images.githubusercontent.com/40604284/244367862-a1120d1c-4e71-4a8f-b291-857344f15a5f.png", + "date": "2023-06-13T16:00:00.000Z" + }, + { + "title": "Let's talk about contributing Mentorship Program FAQ", + "calLink": "https://www.google.com/calendar/event?eid=N25kZjVhYjNyZ2oyZG5lam05bTJyMWR1NmsgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/739", + "banner": "https://user-images.githubusercontent.com/40604284/244369872-dc5b89e4-526f-4605-a09a-835e0bf93797.png", + "date": "2023-06-14T13:00:00.000Z" + }, + { + "title": "Studio plans", + "calLink": "https://www.google.com/calendar/event?eid=Ym4ybG5nNnJrN2NjcnRjdXZ1MGIxMTlydm8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/744", + "banner": "", + "date": "2023-06-05T10:00:00.000Z" + }, + { + "title": "Studio planning", + "calLink": "https://www.google.com/calendar/event?eid=aGNmNDl0c2pzZGxoam5iNXBnY3RyczE5OTggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/745", + "banner": "", + "date": "2023-06-15T10:00:00.000Z" + }, + { + "title": "Spec 3.0 Docs Meeting", + "calLink": "https://www.google.com/calendar/event?eid=dGs5N205MHNrcHAzODN0bDI2b3RpdjY5djggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/747", + "banner": "", + "date": "2023-06-15T02:30:00.000Z" + }, + { + "title": "Spec 3.0 Docs Meeting", + "calLink": "https://www.google.com/calendar/event?eid=ajJoMTY5N2hpOWFlMTcyamFmbWttbTJlNG8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/749", + "banner": "", + "date": "2023-06-22T14:30:00.000Z" } ] \ 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 diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json index 2adf8cc584d5..466d9822c252 100644 --- a/config/newsroom_videos.json +++ b/config/newsroom_videos.json @@ -1,32 +1,32 @@ [ { - "image_url": "https://i.ytimg.com/vi/e0pQClU6QqU/hqdefault.jpg", - "title": "Spec 3.0 (May 24th 2023)", - "description": "https://github.com/asyncapi/community/issues/714.", - "videoId": "e0pQClU6QqU" + "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/l9Tp5eMTol4/hqdefault.jpg", - "title": "Community Health in Open-source", - "description": "Community health in open-source refers to the overall well-being of the individuals that contribute to a particular open-source ...", - "videoId": "l9Tp5eMTol4" + "image_url": "https://i.ytimg.com/vi/mAISwYCZa2I/hqdefault.jpg", + "title": "Studio planning", + "description": "https://github.com/asyncapi/community/issues/745.", + "videoId": "mAISwYCZa2I" }, { - "image_url": "https://i.ytimg.com/vi/4Zo59cOcFUw/hqdefault.jpg", - "title": "Community meeting (May 16th 2023)", - "description": "https://github.com/asyncapi/community/issues/705.", - "videoId": "4Zo59cOcFUw" + "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" }, { - "image_url": "https://i.ytimg.com/vi/7urTb207V-8/hqdefault.jpg", - "title": "Spec 3.0 meeting (May 10th 2023)", - "description": "https://github.com/asyncapi/community/issues/699.", - "videoId": "7urTb207V-8" + "image_url": "https://i.ytimg.com/vi/LfKYDiqZDNA/hqdefault.jpg", + "title": "Let's talk about contributing: Mentorship Program FAQ", + "description": "https://github.com/asyncapi/community/issues/739.", + "videoId": "LfKYDiqZDNA" }, { - "image_url": "https://i.ytimg.com/vi/nyEu2un3Xkg/hqdefault.jpg", - "title": "AsyncAPI x Google Season of Doc's 2023", - "description": "https://github.com/asyncapi/community/issues/692.", - "videoId": "nyEu2un3Xkg" + "image_url": "https://i.ytimg.com/vi/_zdXm90KvF0/hqdefault.jpg", + "title": "Community Meeting, Tuesday June 13th 2023", + "description": "https://github.com/asyncapi/community/issues/738.", + "videoId": "_zdXm90KvF0" } ] \ No newline at end of file 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) 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 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); + }); + }); + + }); + }); + }); +}); 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 diff --git a/dashboard.json b/dashboard.json index 9017b6757ead..d0106c02b513 100644 --- a/dashboard.json +++ b/dashboard.json @@ -9,82 +9,50 @@ "resourcePath": "/asyncapi/bindings/pull/84", "repo": "asyncapi/bindings", "labels": [], - "score": 22.112443333692923 + "score": 22.68679251119144 }, { - "id": "I_kwDOGJ23c85V9C3c", + "id": "I_kwDOBGu-185CELGB", "isPR": false, "isAssigned": false, - "title": "Support `referenceIntoComponents` for other components than `message`", - "author": "thake", - "resourcePath": "/asyncapi/bundler/issues/97", - "repo": "asyncapi/bundler", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - } - ], - "score": 19.527872034949596 + "title": "Work on 3.0 release", + "author": "jonaslagoni", + "resourcePath": "/asyncapi/spec/issues/691", + "repo": "asyncapi/spec", + "labels": [], + "score": 21.538094156194408 }, { - "id": "I_kwDOBW5R_c5J6qNe", + "id": "MDU6SXNzdWU5OTMxODc5ODM=", "isPR": false, "isAssigned": false, - "title": "Measuring AsyncAPI spec adoption", - "author": "derberg", - "resourcePath": "/asyncapi/website/issues/780", - "repo": "asyncapi/website", + "title": "Proposal to allow defining schema format other than default one (AsyncAPI Schema)", + "author": "magicmatatjahu", + "resourcePath": "/asyncapi/spec/issues/622", + "repo": "asyncapi/spec", "labels": [ { - "name": "enhancement", - "color": "84b6eb" - }, - { - "name": "stale", - "color": "ededed" + "name": "💭 Strawman (RFC 0)", + "color": "C2E0C6" } ], - "score": 19.240697446200336 + "score": 20.96374497869589 }, { - "id": "I_kwDOBGu-185CELGB", + "id": "I_kwDOGJ23c85V9C3c", "isPR": false, "isAssigned": false, - "title": "Work on 3.0 release", - "author": "jonaslagoni", - "resourcePath": "/asyncapi/spec/issues/691", - "repo": "asyncapi/spec", - "labels": [], - "score": 18.666348268701817 - }, - { - "id": "I_kwDOFLhIt85joCJA", - "isPR": false, - "isAssigned": true, - "title": "Poster/Graphic/Infograph that highlights what AsyncAPI does with sponsor's money", - "author": "derberg", - "resourcePath": "/asyncapi/community/issues/672", - "repo": "asyncapi/community", + "title": "Support `referenceIntoComponents` for other components than `message`", + "author": "thake", + "resourcePath": "/asyncapi/bundler/issues/97", + "repo": "asyncapi/bundler", "labels": [ { "name": "enhancement", "color": "a2eeef" - }, - { - "name": "area/design", - "color": "0d67d3" - }, - { - "name": "bounty", - "color": "FD6F9E" - }, - { - "name": "level/advanced", - "color": "FFFF00" } ], - "score": 18.37917367995256 + "score": 19.815046623698855 }, { "id": "I_kwDODou01c5AqLB8", @@ -100,129 +68,156 @@ "color": "a2eeef" } ], - "score": 18.091999091203302 + "score": 18.37917367995256 + }, + { + "id": "PR_kwDOBW5R_c5KIyGW", + "isPR": true, + "isAssigned": true, + "title": "docs: code-examples", + "author": "sambhavgupta0705", + "resourcePath": "/asyncapi/website/pull/1349", + "repo": "asyncapi/website", + "labels": [], + "score": 16.36895155870775 }, { - "id": "PR_kwDOBGu-185L4xgg", + "id": "PR_kwDODCuNRs5Nh35U", "isPR": true, "isAssigned": false, - "title": "#622 allow defining schema format other than default", - "author": "GreenRover", - "resourcePath": "/asyncapi/spec/pull/910", - "repo": "asyncapi/spec", + "title": "feat: first draft of JMS Binding Objects", + "author": "adamretter", + "resourcePath": "/asyncapi/bindings/pull/193", + "repo": "asyncapi/bindings", "labels": [], - "score": 18.091999091203302 + "score": 14.358729437462937 }, { - "id": "I_kwDOG115t85D93P0", - "isPR": false, + "id": "PR_kwDOBW5R_c5Jw5C6", + "isPR": true, "isAssigned": true, - "title": "Website UI Kit design/dev project", - "author": "mcturco", - "resourcePath": "/asyncapi/design-system/issues/4", - "repo": "asyncapi/design-system", + "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": "enhancement", - "color": "a2eeef" - }, - { - "name": "gsoc", - "color": "F4D03F" + "name": "📑 docs", + "color": "E50E99" }, { - "name": "🎨 design", - "color": "0D67D3" + "name": "area/docs", + "color": "e50e99" } ], - "score": 17.517649913704783 + "score": 13.78438025996442 + }, + { + "id": "PR_kwDOFDnrNc5RUbi_", + "isPR": true, + "isAssigned": false, + "title": "fix: help command", + "author": "sambhavgupta0705", + "resourcePath": "/asyncapi/cli/pull/593", + "repo": "asyncapi/cli", + "labels": [], + "score": 13.497205671215161 }, { - "id": "I_kwDODou01c5E_LV0", + "id": "I_kwDOCVQpZM5M_dcV", "isPR": false, "isAssigned": false, - "title": "Create onboarding for features of Studio", + "title": "DocsUI: Messages Object output", "author": "mcturco", - "resourcePath": "/asyncapi/studio/issues/284", - "repo": "asyncapi/studio", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - } - ], - "score": 15.507427792459973 + "resourcePath": "/asyncapi/asyncapi-react/issues/618", + "repo": "asyncapi/asyncapi-react", + "labels": [], + "score": 12.922856493716644 }, { - "id": "I_kwDOCoBobc5FCvW6", - "isPR": false, + "id": "PR_kwDOBGu-185KHmXZ", + "isPR": true, "isAssigned": false, - "title": "Road to v2.0.0", + "title": "feat: new traits merge mechanism", "author": "magicmatatjahu", - "resourcePath": "/asyncapi/parser-js/issues/481", - "repo": "asyncapi/parser-js", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "keep-open", - "color": "fce14b" - } - ], - "score": 15.220253203710714 + "resourcePath": "/asyncapi/spec/pull/907", + "repo": "asyncapi/spec", + "labels": [], + "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": "MDU6SXNzdWU5ODkyOTg0MzY=", - "isPR": false, - "isAssigned": true, - "title": "Proposal to solve publish/subscribe confusion", - "author": "fmvilas", - "resourcePath": "/asyncapi/spec/issues/618", - "repo": "asyncapi/spec", + "id": "I_kwDOFLhIt85oSfWg", + "title": "As A user, the CI should prevent me schedule an adhoc meeting in the past", + "isAssigned": false, + "resourcePath": "/asyncapi/community/issues/746", + "repo": "asyncapi/community", + "author": "Amzani", + "area": "Unknown", "labels": [ { - "name": "💭 Strawman (RFC 0)", - "color": "C2E0C6" + "name": "bug", + "color": "d73a4a" } - ], - "score": 14.926933240618364 + ] }, { - "id": "PR_kwDOCoBobc4-9B_v", - "isPR": true, + "id": "I_kwDOE8Qh385nTDiB", + "title": "Add descriptions for options in playground", "isAssigned": false, - "title": "refactor: add migration guide", - "author": "magicmatatjahu", - "resourcePath": "/asyncapi/parser-js/pull/611", - "repo": "asyncapi/parser-js", + "resourcePath": "/asyncapi/modelina/issues/1347", + "repo": "asyncapi/modelina", + "author": "jonaslagoni", + "area": "design", "labels": [ { "name": "enhancement", "color": "a2eeef" + }, + { + "name": "website", + "color": "57A793" } - ], - "score": 14.645904026212197 - } - ], - "goodFirstIssues": [ + ] + }, { - "id": "I_kwDOE8Qh385m6KFQ", - "title": "Add runtime testing for PHP", + "id": "I_kwDOE8Qh385nTCST", + "title": "Improve layout of playground", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1336", + "resourcePath": "/asyncapi/modelina/issues/1346", "repo": "asyncapi/modelina", "author": "jonaslagoni", - "area": "Unknown", + "area": "design", "labels": [ { "name": "enhancement", "color": "a2eeef" }, { - "name": "PHP generator", - "color": "20DC39" + "name": "website", + "color": "57A793" } ] }, @@ -327,55 +322,6 @@ } ] }, - { - "id": "I_kwDOE8Qh385mvqkC", - "title": "404 page", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1319", - "repo": "asyncapi/modelina", - "author": "sambhavgupta0705", - "area": "design", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "website", - "color": "57A793" - } - ] - }, - { - "id": "I_kwDOE8Qh385mYD76", - "title": "docs: add website setup commands in readme", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1299", - "repo": "asyncapi/modelina", - "author": "sambhavgupta0705", - "area": "docs", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - } - ] - }, - { - "id": "I_kwDOE8Qh385mL9Lx", - "title": "Add runtime testing for Rust", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1295", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "rust", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - } - ] - }, { "id": "I_kwDOBW5R_c5mIyyz", "title": "[📑 Docs]: Update CLI installation instruction with info about windows", @@ -485,98 +431,6 @@ } ] }, - { - "id": "I_kwDOE8Qh385hb9W5", - "title": "Add overwriting Equal method support in the Playground", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1177", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "typescript", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "C# generator", - "color": "c5def5" - }, - { - "name": "website", - "color": "57A793" - } - ] - }, - { - "id": "I_kwDOE8Qh385hb8cG", - "title": "Add Newtonsoft serialization support in the Playground", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1176", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "typescript", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "C# generator", - "color": "c5def5" - }, - { - "name": "website", - "color": "57A793" - } - ] - }, - { - "id": "I_kwDOE8Qh385hbz9R", - "title": "Add example data function support in the Playground", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1172", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "typescript", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "TS generator", - "color": "33943E" - }, - { - "name": "website", - "color": "57A793" - } - ] - }, - { - "id": "I_kwDOE8Qh385hbxvG", - "title": "Add jsonbinpack support in the Playground", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1171", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "typescript", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "TS generator", - "color": "33943E" - }, - { - "name": "website", - "color": "57A793" - } - ] - }, { "id": "I_kwDOFi_gUM5hAZlI", "title": "Better logging for MQTT adapter", @@ -622,21 +476,6 @@ } ] }, - { - "id": "I_kwDOFDnrNc5gDSyx", - "title": "Generate overwritten Equal method for C# models", - "isAssigned": false, - "resourcePath": "/asyncapi/cli/issues/466", - "repo": "asyncapi/cli", - "author": "jonaslagoni", - "area": "Unknown", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - } - ] - }, { "id": "I_kwDOFDnrNc5gDKCJ", "title": "Generate example function for TypeScript models", @@ -710,6 +549,10 @@ "name": "enhancement", "color": "a2eeef" }, + { + "name": "stale", + "color": "ededed" + }, { "name": "Kotlin generator", "color": "61A95C" @@ -765,63 +608,6 @@ } ] }, - { - "id": "I_kwDOEOBLdM5TFZp2", - "title": "Add support for JetStream push subscribe", - "isAssigned": false, - "resourcePath": "/asyncapi/dotnet-nats-template/issues/296", - "repo": "asyncapi/dotnet-nats-template", - "author": "jonaslagoni", - "area": "Unknown", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "stale", - "color": "ededed" - } - ] - }, - { - "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_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 ", @@ -831,6 +617,10 @@ "author": "alequetzalli", "area": "docs", "labels": [ + { + "name": "stale", + "color": "ededed" + }, { "name": "📑 docs", "color": "E50E99" @@ -875,21 +665,6 @@ "repo": "asyncapi/dotnet-nats-template", "author": "jonaslagoni", "area": "Unknown", - "labels": [ - { - "name": "enhancement", - "color": "a2eeef" - } - ] - }, - { - "id": "I_kwDOEOBLdM5C9YVz", - "title": "Make namespace part of the template parameters", - "isAssigned": false, - "resourcePath": "/asyncapi/dotnet-nats-template/issues/214", - "repo": "asyncapi/dotnet-nats-template", - "author": "jonaslagoni", - "area": "Unknown", "labels": [ { "name": "enhancement", @@ -989,6 +764,10 @@ { "name": "enhancement", "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" } ] }, @@ -1044,48 +823,6 @@ "color": "a2eeef" } ] - }, - { - "id": "MDU6SXNzdWU3OTEzNDUxNTI=", - "title": "Incorrect test case for Schema Object with additional keys", - "isAssigned": false, - "resourcePath": "/asyncapi/tck/issues/52", - "repo": "asyncapi/tck", - "author": "AgustinBettati", - "area": "Unknown", - "labels": [ - { - "name": "stale", - "color": "ededed" - }, - { - "name": "Hacktoberfest", - "color": "FF8AE2" - } - ] - }, - { - "id": "MDU6SXNzdWU5NTI5MzE1MjY=", - "title": "Issues with the machine readable file for AsyncAPI 2.0.0", - "isAssigned": false, - "resourcePath": "/asyncapi/spec-json-schemas/issues/81", - "repo": "asyncapi/spec-json-schemas", - "author": "jonaslagoni", - "area": "Unknown", - "labels": [ - { - "name": "bug", - "color": "d73a4a" - }, - { - "name": "Hacktoberfest", - "color": "FF8AE2" - }, - { - "name": "stale", - "color": "ededed" - } - ] } ] } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0cb0daae0a6b..00e860b38b91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,6 +69,7 @@ "yaml": "^2.2.2" }, "devDependencies": { + "@cypress/react": "^7.0.3", "@netlify/functions": "^1.4.0", "@netlify/plugin-nextjs": "^4.37.2", "cypress": "^10.11.0", @@ -534,6 +535,23 @@ "node": ">=0.1.90" } }, + "node_modules/@cypress/react": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@cypress/react/-/react-7.0.3.tgz", + "integrity": "sha512-YseqnMugTbdPV9YCYEMXVqIf+P7x+pfjXOdjv4dnDFqNCZeHaZfOZVFZ4XfEHVxMv0aDszxlaLiIp3QDPhr12w==", + "dev": true, + "peerDependencies": { + "@types/react": "^16.9.16 || ^17.0.0", + "cypress": "*", + "react": "^=16.x || ^=17.x", + "react-dom": "^=16.x || ^=17.x" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@cypress/request": { "version": "2.88.11", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", @@ -632,7 +650,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", @@ -649,7 +666,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", @@ -665,7 +681,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" } @@ -673,14 +688,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", @@ -783,7 +796,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", @@ -793,8 +805,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", @@ -2060,8 +2071,7 @@ "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" }, "node_modules/acorn-node": { "version": "1.8.2", @@ -2188,8 +2198,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", @@ -2217,8 +2226,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", @@ -2372,8 +2380,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/async": { "version": "3.2.4", @@ -2812,8 +2819,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", @@ -3365,7 +3371,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", @@ -4257,8 +4262,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", @@ -4410,7 +4414,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" } @@ -4538,7 +4541,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" } @@ -4676,7 +4678,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", @@ -4782,7 +4783,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" @@ -4791,14 +4791,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" } @@ -4806,20 +4804,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" } @@ -4828,7 +4823,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", @@ -4844,7 +4838,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" } @@ -4853,7 +4846,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" @@ -4863,7 +4855,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" } @@ -4871,20 +4862,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" } @@ -4892,20 +4880,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/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" } @@ -4914,7 +4899,6 @@ "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" } @@ -4922,14 +4906,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", @@ -4939,8 +4921,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", @@ -4951,7 +4932,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" } @@ -4960,7 +4940,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" } @@ -4968,8 +4947,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/esutils": { "version": "2.0.3", @@ -5171,8 +5149,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", @@ -5241,7 +5218,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" } @@ -5270,7 +5246,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" @@ -5279,8 +5254,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", @@ -5409,8 +5383,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", @@ -5996,8 +5969,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", @@ -6025,7 +5997,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" @@ -6047,8 +6018,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", @@ -6427,8 +6397,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", @@ -6651,8 +6620,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", @@ -6752,8 +6720,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", @@ -6859,7 +6826,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" @@ -7037,8 +7003,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", @@ -7579,8 +7544,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", @@ -7962,7 +7926,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", @@ -8161,7 +8124,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" } @@ -8210,8 +8172,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", @@ -9013,8 +8974,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", @@ -9044,8 +9004,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", @@ -9593,8 +9552,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", @@ -9807,8 +9765,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", @@ -9852,7 +9809,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" } @@ -10061,7 +10017,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" } @@ -10069,8 +10024,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", @@ -10169,7 +10123,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", @@ -10180,7 +10133,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" } @@ -10189,7 +10141,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" } @@ -10197,8 +10148,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", @@ -10320,7 +10270,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", @@ -10373,7 +10322,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" } @@ -10403,8 +10351,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.3.0", @@ -10565,7 +10512,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", @@ -10715,8 +10661,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", @@ -10885,7 +10830,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" } @@ -11246,8 +11190,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", @@ -11361,7 +11304,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" } @@ -11384,8 +11326,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", @@ -11883,6 +11824,13 @@ "dev": true, "optional": true }, + "@cypress/react": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@cypress/react/-/react-7.0.3.tgz", + "integrity": "sha512-YseqnMugTbdPV9YCYEMXVqIf+P7x+pfjXOdjv4dnDFqNCZeHaZfOZVFZ4XfEHVxMv0aDszxlaLiIp3QDPhr12w==", + "dev": true, + "requires": {} + }, "@cypress/request": { "version": "2.88.11", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", @@ -11963,7 +11911,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", @@ -11980,7 +11927,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", @@ -11992,7 +11938,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" } @@ -12000,14 +11945,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==" } } }, @@ -12097,7 +12040,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", @@ -12107,8 +12049,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", @@ -12818,7 +12759,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", @@ -12831,7 +12773,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", @@ -12950,8 +12893,7 @@ "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" }, "acorn-node": { "version": "1.8.2", @@ -13062,8 +13004,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", @@ -13093,8 +13034,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", @@ -13213,8 +13153,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==" }, "async": { "version": "3.2.4", @@ -13595,8 +13534,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", @@ -14043,7 +13981,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", @@ -14066,7 +14003,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", @@ -14246,7 +14184,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", @@ -14717,8 +14656,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", @@ -14842,7 +14780,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" } @@ -14952,7 +14889,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" } @@ -15076,7 +15012,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", @@ -15124,7 +15059,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" } @@ -15133,7 +15067,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", @@ -15145,7 +15078,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" } @@ -15154,7 +15086,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" @@ -15164,7 +15095,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" } @@ -15172,20 +15102,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" } @@ -15193,20 +15120,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==" }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -15215,7 +15139,6 @@ "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" } @@ -15223,8 +15146,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==" } } }, @@ -15289,7 +15211,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" @@ -15298,8 +15219,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==" } } }, @@ -15307,7 +15227,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" }, @@ -15315,22 +15234,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", @@ -15340,8 +15256,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==" } } }, @@ -15354,7 +15269,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" } @@ -15363,7 +15277,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" } @@ -15371,8 +15284,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==" }, "esutils": { "version": "2.0.3", @@ -15543,8 +15455,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", @@ -15615,7 +15526,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" } @@ -15644,7 +15554,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" @@ -15653,8 +15562,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", @@ -15746,8 +15654,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", @@ -16259,8 +16166,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", @@ -16285,7 +16191,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" @@ -16309,8 +16214,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", @@ -16615,8 +16519,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", @@ -16800,8 +16703,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", @@ -16894,8 +16796,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", @@ -16987,7 +16888,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" @@ -17150,8 +17050,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", @@ -17626,8 +17525,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", @@ -17932,7 +17830,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", @@ -18110,7 +18007,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" } @@ -18155,8 +18051,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", @@ -18295,22 +18190,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", @@ -18559,7 +18458,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", @@ -18707,8 +18607,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", @@ -18729,8 +18628,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", @@ -19217,8 +19115,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", @@ -19415,8 +19312,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", @@ -19453,7 +19349,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" } @@ -19626,7 +19521,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" } @@ -19634,8 +19528,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", @@ -19705,7 +19598,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", @@ -19716,7 +19608,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" } @@ -19725,7 +19616,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" } @@ -19733,8 +19623,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==" } } }, @@ -19838,7 +19727,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", @@ -19885,7 +19773,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" } @@ -19909,8 +19796,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.3.0", @@ -19966,7 +19852,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", @@ -20027,7 +19914,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", @@ -20140,8 +20026,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", @@ -20291,7 +20176,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" } @@ -20520,12 +20404,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", @@ -20540,8 +20426,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", @@ -20640,7 +20525,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" } @@ -20660,8 +20544,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", diff --git a/package.json b/package.json index 7339e86cef95..b141453c541b 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "yaml": "^2.2.2" }, "devDependencies": { + "@cypress/react": "^7.0.3", "@netlify/functions": "^1.4.0", "@netlify/plugin-nextjs": "^4.37.2", "cypress": "^10.11.0", diff --git a/pages/blog/2023-April-docs-report.md b/pages/blog/2023-April-docs-report.md index cad615a3e571..d57467c04693 100644 --- a/pages/blog/2023-April-docs-report.md +++ b/pages/blog/2023-April-docs-report.md @@ -11,7 +11,6 @@ authors: photo: /img/avatars/canela-ale.webp link: https://www.linkedin.com/in/alejandra-quetzalli/ byline: In April 2023, the AsyncAPI documentation experienced significant growth with 8,889 sessions and 4,575 unique users, including 2,895 new users. -featured: true --- # AsyncAPI Docs Report - April 2023 diff --git a/pages/blog/2023-may-docs-report.md b/pages/blog/2023-may-docs-report.md new file mode 100644 index 000000000000..7da3defabf46 --- /dev/null +++ b/pages/blog/2023-may-docs-report.md @@ -0,0 +1,89 @@ +--- +title: "AsyncAPI Docs Report - May 2023" +date: 2023-05-08T06:00:00+01:00 +type: Engineering +tags: + - Documentation + - Communication +cover: /img/posts/2023-may-docs-report.webp +authors: + - name: Alejandra Quetzalli + photo: /img/avatars/canela-ale.webp + link: https://www.linkedin.com/in/alejandra-quetzalli/ + byline: In May 2023, the AsyncAPI documentation had 9,453 sessions and 4,876 unique users, including 2,895 new users. +featured: true +--- + +# AsyncAPI Docs Report - May 2023 +In May 2023, the AsyncAPI documentation had **9,453 sessions** and **4,876 unique users**, including **2,895 new users**, highlighting the increasing interest and engagement within our vibrant docs community. May was a busy month in our expanding docs community! + +## Google Season of Docs 2023 (GSoD) at AsyncAPI +We are thrilled to have started working with this year's selected technical writing candidates for the 2023 Google Season of Docs (GSoD) at AsyncAPI: [Mahfuza](https://github.com/mhmohona), [Bhaswati](https://github.com/BhaswatiRoy), [Rohit](https://github.com/TRohit20), and [Hridyesh](https://github.com/kakabisht). This year, all GSoD interns will get the opportunity to work on both GSoD projects: [cover AsyncAPI document sections in detail](https://github.com/asyncapi/website/issues/1507) and [create 100-level interactive learning path](https://github.com/asyncapi/website/issues/1520). + +Additionally, our GSoD interns have started a [community vote to select our host platform for AsyncAPI Interactive Learning Paths](https://github.com/orgs/asyncapi/discussions/711). You are cordially invited to participate in the vote and share your thoughts, as your feedback plays a vital role in shaping the future of our interactive learning experience. + + +## NEW Spec 3.0 Docs Meeting - `OPEN` +Attention, AsyncAPI community members! We are excited to announce a new `OPEN` meeting dedicated to **Spec 3.0 documentation**. In this meeting, we will have the privilege of hosting Spec 3.0 Subject Matter Experts (SMEs), including the esteemed Jonas Lagoni, who will provide essential background context. If you are interested in contributing to Spec 3.0 docs or have any questions, this is the perfect opportunity to join and engage with our knowledgeable experts. We also encourage our GSoD interns to attend these meetings to ensure their new docs align seamlessly with Spec 3.0. + +Mark your calendars! We are planning to hold the first meeting on June 15, 2023, at 02:30 UTC. Stay tuned for further updates and details! + +Additionally, we want to highlight an upcoming change in the Spec 3.0 release that will require documentation updates. The [Request/reply](https://github.com/asyncapi/spec/pull/847) feature is among the first to undergo these updates. Keep an eye out for further information and ensure your familiarity with this important change. + +Thank you for your active participation and dedication to advancing the AsyncAPI ecosystem. Let's strive for excellence in our Spec 3.0 documentation! + +## Contributor Growth +We are thrilled to share the exciting news of welcoming a new contributor to our documentation community! Please join us in extending a warm welcome to [Cynthia Peter](https://github.com/CynthiaPeter)! Cynthia is eager to enhance her technical writing skills and contribute to the growth of the AsyncAPI documentation. + +To start her journey, Cynthia will be working on her first task, which involves completing the [*AsyncAPI Docs Style Guide* Glossary task](https://github.com/asyncapi/website/issues/1294). Once she successfully completes this task, we will swiftly onboard her with a Spec 3.0-related assignment. We are excited to see her skills flourish and her valuable contributions to the documentation. + +Let's celebrate Cynthia's arrival and support her as she embarks on this rewarding endeavor. Together, we will continue to elevate the quality and accessibility of the AsyncAPI documentation. + +## Conclusion +May witnessed another remarkable increase in sessions with a total of 9,453 community members exploring our docs. Welcoming 2,895 new docs readers to our community further demonstrates the expanding interest in AsyncAPI. + +We are grateful for the dedication and contributions of our community members, both new and existing, who have played a pivotal role in this progress. The enthusiasm and support from our community continue to inspire us to provide high-quality documentation, and we appreciate the trust you place in us. + +Furthermore, we are excited about the future endeavors and collaborations within the AsyncAPI ecosystem. The selected technical writing candidates for the 2023 Google Season of Docs (GSoD) program, along with their projects, promise to bring further enhancements to our documentation. Additionally, the community vote for the host platform of AsyncAPI Interactive Learning Paths empowers our community members to shape the future of our learning experience. + + +```mermaid +graph TD +style A fill:#FF6EC7,stroke:#000000,stroke-width:2px; +style B fill:#B5EAD7,stroke:#000000,stroke-width:2px; +style C fill:#DAD0FF,stroke:#000000,stroke-width:2px; +style D fill:#FDD6C1,stroke:#000000,stroke-width:2px; +style E fill:#C7CEEA,stroke:#000000,stroke-width:2px; + +style BA fill:#C1F9F7,stroke:#000000,stroke-width:2px; +style BB fill:#C1F9F7,stroke:#000000,stroke-width:2px; +style DA fill:#E1FEC1,stroke:#000000,stroke-width:2px; + + A[AsyncAPI Docs: May 2023 Accomplishments] --> B[GSoD Work Begins] + A --> C[NEW Spec 3.0 Meeting] + A --> D[Newer Docs Contributors] + B --> BA[Covering AsyncAPI Document Sections] + B --> BB[Creating Interactive Learning Path] + C --> E[Documentation Updates: Request/Reply] + D --> DA[Cynthia Peter] + +``` + +--- + +## 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; 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.✨ diff --git a/pages/blog/may-2023.md b/pages/blog/may-2023.md new file mode 100644 index 000000000000..bc84a79d549d --- /dev/null +++ b/pages/blog/may-2023.md @@ -0,0 +1,54 @@ +--- +title: "AsyncAPI Community Update: May 2023" +date: 2023-05-30T06:00:00+01:00 +type: Communication +tags: + - Project Status +cover: /img/posts/2023-summary/blog-banner-may.webp +authors: + - name: Thulisile Sibanda + photo: /img/avatars/thulieblack.webp + link: https://www.linkedin.com/in/v-thulisile-sibanda/ + byline: AsyncAPI Community Manager +excerpt: 'May Community Update' +featured: true +--- + +At AsyncAPI, we strive to provide valuable opportunities for individuals to work on open-source projects and gain real-world experience. +We are excited to announce the fantastic projects that made it to the Google Summer of Code this year. Although we initially submitted five projects, only four got selected. + +| Project | Mentor/s | Selected Candidate | +| --- | --- | --- | +[Automate listing of members of technical steering committee](https://github.com/asyncapi/.github/issues/210) | [Lukasz Gornicki](https://github.com/derberg) | [Richa Sharma](https://github.com/14Richa) +[Add "Autofix" feature for common linting errors (w/ spectral)](https://github.com/asyncapi/vs-asyncapi-preview/issues/160) | [Iván García Sainz-Aja](https://github.com/ivangsa) | [Savio Dias](https://github.com/Savio629) +[Introduce UI tests and refactoring in the website](https://github.com/asyncapi/website/issues/1090) | [Akshat Nema](https://github.com/akshatnema), [Abir](https://github.com/imabp) | [Aadrika Bhargava](https://github.com/reachaadrika) +[Authentication and Authorization support for websocket adapters](https://github.com/asyncapi/glee/issues/377) | [Souvik](https://github.com/Souvikns), [Khuda Dad Nomani](https://github.com/KhudaDad414) | [Godwin Alexander](https://github.com/oviecodes) + +We can't wait to see these talented individuals progress throughout the program. + +## Spec x Tooling +The [Parser-JS v2](https://github.com/asyncapi/parser-js) is finally released. You can browse the [Parser-JS documentation](https://github.com/asyncapi/parser-js#api-documentation) and learn more! It supports the AsyncAPI schema and JSON schema formats. Additionally, the Parser-JS implements a global API definition for all AsyncAPI parser implementations and is browser compatible. + +You can now reference AsyncAPI JSON Schema along with the SchemaStore project. This feature allows you to use JSON and YAML plugins in your IDE and fetches the JSON schema for your AsyncAPI document, providing you with autocompletion, validation, and tooltips. To ensure that the IDE recognizes your AsyncAPI document, SchemaStore matches the file names for the schema. For more details, [check out the SchemaStore](https://github.com/SchemaStore/schemastore) or test the [AsyncAPI JSON Schema](https://github.com/asyncapi/spec-json-schemas) for yourself. + +## AsyncAPI Mentorship Program +We are glad to have received a significant number of entries and are now moving to the next phase - ranking the projects in this year's cohort. Please stay updated by following the [AsyncAPI Mentorship discussion and timeline](https://github.com/orgs/asyncapi/discussions/689). + +## AsyncAPI Conf on Tour (AACoT) Website +The conference redesign website is going smoothly, thanks to [Maya's](https://www.linkedin.com/in/aishatmuibudeen/) incredible work. She's been busy crafting some impressive designs, and we are excited about the progress so far. If you have some ideas or input, or you'll like to contribute, please [join the AACoT discussion](https://github.com/orgs/asyncapi/discussions/662), and let's make AACoT'23 a huge success. + +## In case you missed it... +We have a new episode on the AsyncAPI podcast featuring [Ace](https://www.linkedin.com/in/acebuild/), and you don't want to miss it! Tune in and hit the [AsyncAPI podcast subscribe button](https://open.spotify.com/show/73BrcNwJ5ZI9ygR8nfElZi) to stay in the loop. + + + +Missed the latest community call, don't worry! You can catch up by watching the recording. + + + +## Coming in June +- **AACoT'23 London Edition** - We're excited that AACoT'23 is coming to London on the 20th of September. The Call for Speakers will open soon, so start working on those ideas. +- **AsyncAPI Community Updates Newsletter** -The next issue will be released in the first week of June. To stay updated on the latest activities happening across the community, [subscribe to the AsyncAPI Newsletter](https://www.asyncapi.com/newsletter). +- **AsyncAPI Podcast** - Our upcoming episode will feature [Barbaño Gonzalez](https://www.linkedin.com/in/barbano-gonzalez-moreno), an Education Program Manager and Ambassador Program Lead. Don't forget to [subscribe to the AsyncAPI Podcast](https://open.spotify.com/show/73BrcNwJ5ZI9ygR8nfElZi). + +Till next time, keep your head held high. **You got this**! \ No newline at end of file diff --git a/pages/blog/the-new-era-approaches.md b/pages/blog/the-new-era-approaches.md new file mode 100644 index 000000000000..0f051ecb2ed1 --- /dev/null +++ b/pages/blog/the-new-era-approaches.md @@ -0,0 +1,257 @@ +--- +title: "The New Era Approaches" +date: 2023-06-10T06:00:00+01:00 +type: Communication +tags: + - Specification + - Announcement + - Release +cover: /img/posts/the-new-era-approaches.webp +authors: + - name: Jonas Lagoni + photo: /img/avatars/jonaslagoni.webp + link: https://www.linkedin.com/in/jonaslagoni/ +excerpt: "An update around AsyncAPI 3.0, where we are, what is remaining, release schedule, and a first look at 3.0" +featured: true +--- + +Back in [March 2022](https://www.asyncapi.com/blog/async-api-spec-3.0-release), you heard the first official words around AsyncAPI 3.0. Since then, a lot of people have been working diligently across many expertise to bring it to life. And with its current state, it's finally time to give an update on the progress. + +## Show Me the Money! +We are not going to give any lengthy description of features, fixes, and changes. Instead, I will just show you the money as a teaser. :wink: + +Below is an AsyncAPI v3 document that defines how you, a public application, can interact with my Smartylighting Streetlights system, where you can turn on a specific streetlight through WebSocket and get real-time information about environmental lighting conditions through Kafka. + +See how many features you can spot just from this example. Some changes are absent in the example, but I tried to cramp as many changes into it as possible. Below the example is a short list of changes you'll be able to fact-check your guess with. + +```yml +asyncapi: "3.0.0" +info: + title: Smartylighting Streetlights public API + version: "1.0.0" + description: | + The Smartylighting Streetlights public API allows you to remotely manage the city lights through Kafka and WebSocket. + + ### Check out its awesome features: + + * Turn a specific streetlight on 🌃 + * Receive real-time information about environmental lighting conditions 📈 + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + +servers: + kafka: + host: test.mykafkacluster.org:8092 + protocol: kafka-secure + description: Test Kafka broker + security: + - $ref: '#/components/securitySchemes/saslScram' + websocket: + host: test.websocket.org:1999 + protocol: ws + description: Test WebSocket server + +defaultContentType: application/json + +channels: + turnStreetlightOnChannel: + address: "/" + messages: + turnOn: + $ref: "#/components/messages/turnOn" + servers: + - $ref: "#/servers/websocket" + + turnStreetlightOnReplyChannel: + address: "/" + messages: + turnOnReply: + $ref: "#/components/messages/turnOnReply" + servers: + - $ref: "#/servers/websocket" + + lightMeasured: + description: The topic on which measured values may be produced and consumed. + address: "smartylighting.streetlights.1.0.event.{streetlightId}.lighting.measured" + parameters: + streetlightId: + $ref: "#/components/parameters/streetlightId" + messages: + lightMeasured: + $ref: "#/components/messages/lightMeasured" + servers: + - $ref: "#/servers/kafka" + +operations: + turnOn: + action: send + operationId: turnOn + channel: + $ref: "#/channels/turnStreetlightOnChannel" + reply: + channel: + $ref: "#/channels/turnStreetlightOnReplyChannel" + + lightMeasured: + action: receive + summary: Inform about environmental lighting conditions of a particular streetlight. + operationId: receiveLightMeasurement + channel: + $ref: "#/channels/lightMeasured" + traits: + - $ref: "#/components/operationTraits/kafka" + +components: + messages: + turnOn: + name: turnOn + title: Turn on + summary: Command a particular streetlight to turn the lights on. + payload: + $ref: "#/components/schemas/turnOnPayload" + + turnOnReply: + name: turnOnReply + title: Turn on reply + summary: Reply from turning on the lights + payload: + $ref: "#/components/schemas/turnOnReplyPayload" + + lightMeasured: + name: lightMeasured + title: Light measured + summary: Inform about environmental lighting conditions of a particular streetlight. + contentType: application/json + traits: + - $ref: "#/components/messageTraits/commonHeaders" + payload: + $ref: "#/components/schemas/lightMeasuredPayload" + + schemas: + turnOnPayload: + type: object + properties: + streetlightId: + description: The ID of the streetlight. + type: string + sentAt: + type: string + format: date-time + description: Date and time when the request was sent + + turnOnReplyPayload: + type: object + properties: + turnedOnTimestamp: + type: string + format: date-time + description: Date and time when the light was actually turned on. + + lightMeasuredPayload: + schemaFormat: "application/vnd.apache.avro;version=1.9.0" + schema: + type: record + name: User + namespace: com.company + doc: User information + fields: + - name: lumens + type: int + - name: sentAt + type: timestamp_ms + + securitySchemes: + saslScram: + type: scramSha256 + description: Provide your username and password for SASL/SCRAM authentication + + parameters: + streetlightId: + description: The ID of the streetlight. + + messageTraits: + commonHeaders: + headers: + type: object + properties: + my-app-header: + type: integer + minimum: 0 + maximum: 100 + + operationTraits: + kafka: + bindings: + kafka: + clientId: public +``` +As of the pre-release `v3.0.0-next-major-spec.12`, this is a valid AsyncAPI document. You can always find the most recent pre-release version here: https://www.asyncapi.com/docs/reference. + +All the changes in 3.0 up until now are the following: + +- Request/reply pattern. +- Introduce the new Channel Object, detached from operations. +- Introduce the new Operation object, detached from channels. +- Channels are no longer identified with address/topic/path. +- Optional channels. +- Schemas and schema formats are now naturally bound. +- Cleaned up the root object. +- Added additional meta fields for Server Object, Channel Object, Operation Object, and Operation Trait Object. +- External Documentation Object and Tag Object can now be reused and referenced. +- Unified referencing behavior. + +In due time we will give you a complete rundown about all the changes in 3.0 and extended documentation that explains the features in more in-depth, including a migration guide and release blog post. + +## The Remaining Effort + +The specification work is nearly done; only one change is still being discussed which is changing traits behavior to an inheritance that can be overwritten. + +However, at AsyncAPI, a specification is nothing without documentation and tools, which is why the majority of the remaining effort resolves just that. + +For documentation, you have probably noticed that since the first release of 2.0, we now have concepts, tutorials, and guides. Some of those docs will be updated due to 3.0. + +Regarding tooling, it's impossible to give you a clear overview of what exactly will support 3.0 right out the gate because there are many different code owners and contributors with individual priorities. So if you want a tool to support 3.0 right out the gate, please do head over to the issue and voice the need, add a :thumbsup:, write a comment, or maybe even contribute the needed changes! + +- [AsyncAPI CLI](https://github.com/asyncapi/cli/issues/629) +- [AsyncAPI asyncapi-react](https://github.com/asyncapi/asyncapi-react/issues/733) +- [AsyncAPI generator](https://github.com/asyncapi/generator/issues/979) +- [AsyncAPI studio](https://github.com/asyncapi/studio/issues/641) +- [AsyncAPI converter-js](https://github.com/asyncapi/converter-js/issues/110) +- [AsyncAPI vs-asyncapi-preview](https://github.com/asyncapi/vs-asyncapi-preview/issues/181) +- [AsyncAPI bundler](https://github.com/asyncapi/bundler/issues/133) +- [AsyncAPI diff](https://github.com/asyncapi/diff/issues/154) +- [AsyncAPI cupid](https://github.com/asyncapi/cupid/issues/171) +- [AsyncAPI glee](https://github.com/asyncapi/glee/issues/457) +- [AsyncAPI server-api](https://github.com/asyncapi/server-api/issues/294) +- [AsyncAPI modelina](https://github.com/asyncapi/modelina/issues/1376) +- [AsyncAPI dotnet-nats-template](https://github.com/asyncapi/dotnet-nats-template/issues/384) +- [AsyncAPI ts-nats-template](https://github.com/asyncapi/ts-nats-template/issues/545) +- [AsyncAPI python-paho-template](https://github.com/asyncapi/python-paho-template/issues/189) +- [AsyncAPI nodejs-ws-template](https://github.com/asyncapi/nodejs-ws-template/issues/294) +- [AsyncAPI java-template](https://github.com/asyncapi/java-template/issues/118) +- [AsyncAPI java-spring-cloud-stream-template](https://github.com/asyncapi/java-spring-cloud-stream-template/issues/336) +- [AsyncAPI go-watermill-template](https://github.com/asyncapi/go-watermill-template/issues/243) +- [AsyncAPI java-spring-template](https://github.com/asyncapi/java-spring-template/issues/308) +- [AsyncAPI markdown-template](https://github.com/asyncapi/markdown-template/issues/341) +- [AsyncAPI html-template](https://github.com/asyncapi/html-template/issues/430) + +The only tools we can say for sure that will support 3.0 right out the gate are the JS parser and the specification JSON Schema documents because they need to be updated for any specification change to be accepted :laughing: + +Currently, we are [using completed tasks as the release date for 3.0](https://github.com/asyncapi/spec/issues/944). Once all tasks are completed, we'll release 3.0. + + +## Release Date + +That leaves the big question... When is the release then? + +Honestly, we tried to stick with a release date, and more specifically, we thought the July release period (yes, next month). However as you can probably guess with the remaining work, that's most likely not going to happen. As we are learning, major changes take time, and schedules in open source are, hard, to say the least. :smile: + +While all the specification changes are most likely done by July, my best guess, right now, is for everything to be released in September. + +The more people help out, the faster it will get done. :wink: + +The next time you will hear from me will be the release blog post for 3.0. :wave: + +> Photo by Tim Marshall on Unsplash + diff --git a/pages/docs/community/_section.md b/pages/docs/community/_section.md new file mode 100644 index 000000000000..6874743a00fe --- /dev/null +++ b/pages/docs/community/_section.md @@ -0,0 +1,4 @@ +--- +title: 'Community' +weight: 6 +--- \ No newline at end of file diff --git a/pages/docs/community/index.md b/pages/docs/community/index.md new file mode 100644 index 000000000000..57d4906396b2 --- /dev/null +++ b/pages/docs/community/index.md @@ -0,0 +1,25 @@ +--- +title: Overview +weight: 2 +--- + +## Community: Guidelines and resources around community. + +Welcome to AsyncAPI **Community**! Our Community section documents the community guidelines and resources. + + + +## Contribute to the AsyncAPI Community section +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 [AsyncAPI Docs Board](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! + +### Docs contributor questions +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) 🐙. + diff --git a/pages/docs/tools/cli/installation.md b/pages/docs/tools/cli/installation.md index 80d0b52d4832..c3bdf6aba64e 100644 --- a/pages/docs/tools/cli/installation.md +++ b/pages/docs/tools/cli/installation.md @@ -25,6 +25,30 @@ After installing Node.js and NPM, run the following command to install the Async ```sh npm install -g @asyncapi/cli ``` +## Docker + +Install [Docker](https://docs.docker.com/get-docker/) first, then use docker to build the image using the following command : +``` +docker build -t asyncapi/cli:latest . +``` +and run the image using the following command : + +```bash +docker run --rm -it \ +--user=root \ +-v [ASYNCAPI SPEC FILE LOCATION]:/app/asyncapi.yml \ +-v [GENERATED FILES LOCATION]:/app/output \ +asyncapi/cli [COMMAND HERE] + +# Example that you can run inside the cli directory after cloning this repository. First, you specify the mount in the location of your AsyncAPI specification file and then you mount it in the directory where the generation result should be saved. +docker run --rm -it \ + --user=root \ + -v ${PWD}/test/fixtures/asyncapi_v1.yml:/app/asyncapi.yml \ + -v ${PWD}/output:/app/output \ + asyncapi/cli generate fromTemplate -o /app/output /app/asyncapi.yml @asyncapi/html-template --force-write +``` +Note: Use ``` ` ``` instead of `\` for Windows. + ## Mac There are two ways to install the AsyncAPI CLI on your macOS: using the `brew` package manager or `pkg` files. diff --git a/pages/docs/tools/cli/usage.md b/pages/docs/tools/cli/usage.md index 2bc42daf1a8e..8129f2055b95 100644 --- a/pages/docs/tools/cli/usage.md +++ b/pages/docs/tools/cli/usage.md @@ -3,45 +3,556 @@ title: 'Usage' weight: 40 --- + + The AsyncAPI CLI makes it easier to work with AsyncAPI documents. -To get **help**, run this command in your terminal: -```sh -asyncapi --help +# Usage + + +```sh-session +$ npm install -g @asyncapi/cli +$ asyncapi COMMAND +running command... +$ asyncapi (--version) +@asyncapi/cli/0.48.7 linux-x64 node-v18.16.0 +$ asyncapi --help [COMMAND] +USAGE + $ asyncapi COMMAND +... +``` + + +# Commands + + +* [`asyncapi bundle`](#asyncapi-bundle) +* [`asyncapi config`](#asyncapi-config) +* [`asyncapi config context`](#asyncapi-config-context) +* [`asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH`](#asyncapi-config-context-add-context-name-spec-file-path) +* [`asyncapi config context current`](#asyncapi-config-context-current) +* [`asyncapi config context list`](#asyncapi-config-context-list) +* [`asyncapi config context remove CONTEXT-NAME`](#asyncapi-config-context-remove-context-name) +* [`asyncapi config context use CONTEXT-NAME`](#asyncapi-config-context-use-context-name) +* [`asyncapi config versions`](#asyncapi-config-versions) +* [`asyncapi convert [SPEC-FILE]`](#asyncapi-convert-spec-file) +* [`asyncapi diff OLD NEW`](#asyncapi-diff-old-new) +* [`asyncapi generate`](#asyncapi-generate) +* [`asyncapi generate fromTemplate ASYNCAPI TEMPLATE`](#asyncapi-generate-fromtemplate-asyncapi-template) +* [`asyncapi generate models LANGUAGE FILE`](#asyncapi-generate-models-language-file) +* [`asyncapi new`](#asyncapi-new) +* [`asyncapi new file`](#asyncapi-new-file) +* [`asyncapi new glee`](#asyncapi-new-glee) +* [`asyncapi new project`](#asyncapi-new-project) +* [`asyncapi optimize [SPEC-FILE]`](#asyncapi-optimize-spec-file) +* [`asyncapi start`](#asyncapi-start) +* [`asyncapi start studio`](#asyncapi-start-studio) +* [`asyncapi validate [SPEC-FILE]`](#asyncapi-validate-spec-file) + +## `asyncapi bundle` + +bundle one or multiple asyncapi documents and their references together. + +``` +USAGE + $ asyncapi bundle [-h] [-o ] [-r] [-b ] + +FLAGS + -b, --base= Path to the file which will act as a base. This is required when some properties are + to needed to be overwritten. + -h, --help Show CLI help. + -o, --output= The output file name. Omitting this flag the result will be printed in the console. + -r, --reference-into-components Bundle the message $refs into components object. + +DESCRIPTION + bundle one or multiple asyncapi documents and their references together. + +EXAMPLES + $ asyncapi bundle ./asyncapi.yaml > final-asyncapi.yaml + + $ asyncapi bundle ./asyncapi.yaml --output final-asyncapi.yaml + + $ asyncapi bundle ./asyncapi.yaml ./features.yaml --reference-into-components + + $ 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)_ + +## `asyncapi config` + +CLI config settings + +``` +USAGE + $ asyncapi config + +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)_ + +## `asyncapi config context` + +``` +USAGE + $ asyncapi config context +``` + +## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH` + +Add or modify a context in the store + +``` +USAGE + $ asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH [-h] + +ARGUMENTS + CONTEXT-NAME context name + SPEC-FILE-PATH file path of the spec file + +FLAGS + -h, --help Show CLI help. + +DESCRIPTION + Add or modify a context in the store +``` + +## `asyncapi config context current` + +Shows the current context that is being used + +``` +USAGE + $ asyncapi config context current [-h] + +FLAGS + -h, --help Show CLI help. + +DESCRIPTION + Shows the current context that is being used +``` + +## `asyncapi config context list` + +List all the stored context in the store + +``` +USAGE + $ asyncapi config context list [-h] + +FLAGS + -h, --help Show CLI help. + +DESCRIPTION + List all the stored context in the store +``` + +## `asyncapi config context remove CONTEXT-NAME` + +Delete a context from the store + +``` +USAGE + $ asyncapi config context remove CONTEXT-NAME [-h] + +ARGUMENTS + CONTEXT-NAME Name of the context to delete + +FLAGS + -h, --help Show CLI help. + +DESCRIPTION + Delete a context from the store +``` + +## `asyncapi config context use CONTEXT-NAME` + +Set a context as current + +``` +USAGE + $ asyncapi config context use CONTEXT-NAME [-h] + +ARGUMENTS + CONTEXT-NAME name of the saved context + +FLAGS + -h, --help Show CLI help. + +DESCRIPTION + Set a context as current +``` + +## `asyncapi config versions` + +Show versions of AsyncAPI tools used + +``` +USAGE + $ asyncapi config versions [-h] + +FLAGS + -h, --help Show CLI help. + +DESCRIPTION + Show versions of AsyncAPI tools used +``` + +## `asyncapi convert [SPEC-FILE]` + +Convert asyncapi documents older to newer versions + +``` +USAGE + $ asyncapi convert [SPEC-FILE] [-h] [-o ] [-t ] + +ARGUMENTS + SPEC-FILE spec path, url, or context-name + +FLAGS + -h, --help Show CLI help. + -o, --output= path to the file where the result is saved + -t, --target-version= [default: 2.6.0] asyncapi version to convert to + +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)_ + +## `asyncapi diff OLD NEW` + +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] + +ARGUMENTS + OLD old spec path, URL or context-name + NEW new spec path, URL or context-name + +FLAGS + -f, --format=