-
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 hashCode functions
-
- >
- ),
- (
- <>
-
Include toString functions
-
- >
- ),
- (
- <>
-
Include descriptions
-
- >
- ),
- (
- <>
-
Include constraints
-
- >
- ),
- (
- <>
-
Include Jackson annotation
-
- >
- )
- ];
-
- return (
-
- {options.map((option, id) => (
-
-
- {option}
-
-
- ))}
-
- )
- }
-}
\ 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 (
-
- );
- }
-}
\ 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= [default: yaml] format of the output
+
+ -h, --help Show CLI help.
+ -o, --overrides= path to JSON file containing the override
+ properties
+ -t, --type= [default: all] type of the output
+
+ -w, --watch Enable watch mode
+ --diagnostics-format=(json|stylish|junit|html|text|teamcity|pretty) [default: stylish] format to use for validation
+ diagnostics
+ --fail-severity=(error|warn|info|hint) [default: error] diagnostics of this level or
+ above will trigger a failure exit code
+ --[no-]log-diagnostics log validation diagnostics or not
+ --no-error don't show error on breaking changes
+
+DESCRIPTION
+ Find diff between two asyncapi files
+```
+
+_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/diff.ts)_
+
+## `asyncapi generate`
+
+Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates.
+
+```
+USAGE
+ $ asyncapi generate
+
+DESCRIPTION
+ Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates.
+```
+
+_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/generate/index.ts)_
+
+## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE`
+
+Generates whatever you want using templates compatible with AsyncAPI Generator.
+
+```
+USAGE
+ $ asyncapi generate fromTemplate ASYNCAPI TEMPLATE [-h] [-d ] [-i] [--debug] [-n ] [-o ]
+ [--force-write] [-w] [-p ] [--map-base-url ]
+
+ARGUMENTS
+ ASYNCAPI - Local path, url or context-name pointing to AsyncAPI file
+ TEMPLATE - Name of the generator template like for example @asyncapi/html-template or
+ https://github.com/asyncapi/html-template
+
+FLAGS
+ -d, --disable-hook=... Disable a specific hook type or hooks from a given hook type
+ -h, --help Show CLI help.
+ -i, --install Installs the template and its dependencies (defaults to false)
+ -n, --no-overwrite=... Glob or path of the file(s) to skip when regenerating
+ -o, --output= Directory where to put the generated files (defaults to current directory)
+ -p, --param=... Additional param to pass to templates
+ -w, --watch Watches the template directory and the AsyncAPI document, and re-generate the files
+ when changes occur. Ignores the output directory.
+ --debug Enable more specific errors in the console
+ --force-write Force writing of the generated files to given directory even if it is a git repo with
+ unstaged files or not empty dir (defaults to false)
+ --map-base-url= Maps all schema references from base url to local folder
+
+DESCRIPTION
+ Generates whatever you want using templates compatible with AsyncAPI Generator.
+
+EXAMPLES
+ $ asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template --param version=1.0.0 singleFile=true --output ./docs --force-write
+```
+
+## `asyncapi generate models LANGUAGE FILE`
-It should print something similar to this:
+Generates typed models
-```sh
-All in one CLI for all AsyncAPI tools
+```
+USAGE
+ $ asyncapi generate models LANGUAGE FILE [-h] [-o ] [--tsModelType class|interface] [--tsEnumType
+ enum|union] [--tsModuleSystem ESM|CJS] [--tsIncludeComments] [--tsExportType default|named] [--tsJsonBinPack]
+ [--packageName ] [--namespace ] [--csharpAutoImplement] [--csharpNewtonsoft] [--csharpArrayType
+ Array|List] [--csharpHashcode] [--csharpEqual] [--csharpSystemJson] [--log-diagnostics] [--diagnostics-format
+ json|stylish|junit|html|text|teamcity|pretty] [--fail-severity error|warn|info|hint]
+
+ARGUMENTS
+ LANGUAGE (typescript|csharp|golang|java|javascript|dart|python|rust|kotlin|php|cplusplus) The language you want the
+ typed models generated for.
+ FILE Path or URL to the AsyncAPI document, or context-name
+
+FLAGS
+ -h, --help Show CLI help.
+ -o, --output= The output directory where the models should be
+ written to. Omitting this flag will write the
+ models to `stdout`.
+ --csharpArrayType= [default: Array] C# specific, define which type
+ of array needs to be generated.
+
+ --csharpAutoImplement C# specific, define whether to generate
+ auto-implemented properties or not.
+ --csharpEqual C# specific, generate the models with the Equal
+ method overwritten
+ --csharpHashcode C# specific, generate the models with the
+ GetHashCode method overwritten
+ --csharpNewtonsoft C# specific, generate the models with newtonsoft
+ serialization support
+ --csharpSystemJson C# specific, generate the models with
+ System.Text.Json serialization support
+ --diagnostics-format=(json|stylish|junit|html|text|teamcity|pretty) [default: stylish] format to use for validation
+ diagnostics
+ --fail-severity=(error|warn|info|hint) [default: error] diagnostics of this level or
+ above will trigger a failure exit code
+ --[no-]log-diagnostics log validation diagnostics or not
+ --namespace= C#, C++ and PHP specific, define the namespace to
+ use for the generated models. This is required
+ when language is `csharp`,`c++` or `php`.
+ --packageName= Go, Java and Kotlin specific, define the package
+ to use for the generated models. This is required
+ when language is `go`, `java` or `kotlin`.
+ --tsEnumType= [default: enum] TypeScript specific, define which
+ type of enums needs to be generated.
+
+ --tsExportType= [default: default] TypeScript specific, define
+ which type of export needs to be generated.
+
+ --tsIncludeComments TypeScript specific, if enabled add comments
+ while generating models.
+ --tsJsonBinPack TypeScript specific, define basic support for
+ serializing to and from binary with jsonbinpack.
+ --tsModelType= [default: class] TypeScript specific, define
+ which type of model needs to be generated.
+
+ --tsModuleSystem= [default: ESM] TypeScript specific, define the
+ module system to be used.
+
+
+DESCRIPTION
+ Generates typed models
+```
+
+## `asyncapi new`
+Creates a new asyncapi file
+
+```
USAGE
- $ asyncapi [COMMAND]
+ $ asyncapi new [-h] [-n ] [-e ] [-s] [-p ] [--no-tty]
-TOPICS
- config CLI config settings
- generate Generate models and template
- start Start AsyncAPI studio
+FLAGS
+ -e, --example= name of the example to use
+ -h, --help Show CLI help.
+ -n, --file-name= name of the file
+ -p, --port= port in which to start Studio
+ -s, --studio open in Studio
+ --no-tty do not use an interactive terminal
-COMMANDS
- config access configs
- diff find diff between two AsyncAPI files
- optimize optimizes your AsyncAPI file by removing unused components, re-using duplicates etc.
- new creates a new AsyncAPI file
- start starts a new local instance of Studio
- validate validate an AsyncAPI file
- generate generate all kinds of stuff
- models generate all the typed models for the message payloads defined in the AsyncAPI file
- typescript generate the models for TypeScript
- csharp generate the models for C#
- golang generate the models for Go
- java generate the models for Java
- javascript generate the models for JavaScript
- dart generate the models for Dart
- rust generate the models for Rust
- kotlin generate the models for Kotlin
- php generate the models for PHP
- cplusplus generate the models for C++
- fromTemplate generate whatever you want using templates compatible with AsyncAPI Generator
+DESCRIPTION
+ Creates a new asyncapi file
```
+
+_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/new/index.ts)_
+
+## `asyncapi new file`
+
+Creates a new asyncapi file
+
+```
+USAGE
+ $ asyncapi new file [-h] [-n ] [-e ] [-s] [-p ] [--no-tty]
+
+FLAGS
+ -e, --example= name of the example to use
+ -h, --help Show CLI help.
+ -n, --file-name= name of the file
+ -p, --port= port in which to start Studio
+ -s, --studio open in Studio
+ --no-tty do not use an interactive terminal
+
+DESCRIPTION
+ Creates a new asyncapi file
+```
+
+## `asyncapi new glee`
+
+Creates a new Glee project
+
+```
+USAGE
+ $ asyncapi new glee [-h] [-n ]
+
+FLAGS
+ -h, --help Show CLI help.
+ -n, --name= [default: project] name of the project
+
+DESCRIPTION
+ Creates a new Glee project
+```
+
+## `asyncapi new project`
+
+Creates a new Glee project
+
+```
+USAGE
+ $ asyncapi new project [-h] [-n ]
+
+FLAGS
+ -h, --help Show CLI help.
+ -n, --name= [default: project] name of the project
+
+DESCRIPTION
+ Creates a new Glee project
+```
+
+## `asyncapi optimize [SPEC-FILE]`
+
+optimize asyncapi specification file
+
+```
+USAGE
+ $ asyncapi optimize [SPEC-FILE] [-h] [-p remove-components|reuse-components|move-to-components] [-o
+ terminal|new-file|overwrite] [--no-tty]
+
+ARGUMENTS
+ SPEC-FILE spec path, url, or context-name
+
+FLAGS
+ -h, --help Show CLI help.
+ -o, --output= [default: terminal] select where you want the output.
+
+ -p, --optimization=... [default: remove-components,reuse-components,move-to-components] select the type of
+ optimizations that you want to apply.
+
+ --no-tty do not use an interactive terminal
+
+DESCRIPTION
+ optimize asyncapi specification file
+
+EXAMPLES
+ $ asyncapi optimize ./asyncapi.yaml
+
+ $ asyncapi optimize ./asyncapi.yaml --no-tty
+
+ $ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --no-tty
+
+ $ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --output=terminal --no-tty
+```
+
+_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/optimize.ts)_
+
+## `asyncapi start`
+
+Start asyncapi studio
+
+```
+USAGE
+ $ asyncapi start
+
+DESCRIPTION
+ Start asyncapi studio
+```
+
+_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/start/index.ts)_
+
+## `asyncapi start studio`
+
+starts a new local instance of Studio
+
+```
+USAGE
+ $ asyncapi start studio [-h] [-f ] [-p ]
+
+FLAGS
+ -f, --file= path to the AsyncAPI file to link with Studio
+ -h, --help Show CLI help.
+ -p, --port= port in which to start Studio
+
+DESCRIPTION
+ starts a new local instance of Studio
+```
+
+## `asyncapi validate [SPEC-FILE]`
+
+validate asyncapi file
+
+```
+USAGE
+ $ asyncapi validate [SPEC-FILE] [-h] [-w] [--log-diagnostics] [--diagnostics-format
+ json|stylish|junit|html|text|teamcity|pretty] [--fail-severity error|warn|info|hint]
+
+ARGUMENTS
+ SPEC-FILE spec path, url, or context-name
+
+FLAGS
+ -h, --help Show CLI help.
+ -w, --watch Enable watch mode
+ --diagnostics-format=(json|stylish|junit|html|text|teamcity|pretty) [default: stylish] format to use for validation
+ diagnostics
+ --fail-severity=(error|warn|info|hint) [default: error] diagnostics of this level or
+ above will trigger a failure exit code
+ --[no-]log-diagnostics log validation diagnostics or not
+
+DESCRIPTION
+ validate asyncapi file
+```
+
+_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.48.7/src/commands/validate.ts)_
+
diff --git a/pages/docs/tools/generator/asyncapi-document.md b/pages/docs/tools/generator/asyncapi-document.md
index 8e487ab74e2c..82d1a7d717c3 100644
--- a/pages/docs/tools/generator/asyncapi-document.md
+++ b/pages/docs/tools/generator/asyncapi-document.md
@@ -5,24 +5,25 @@ weight: 40
The **AsyncAPI document** defines a standard, protocol-agnostic interface that describes message-based or event-driven APIs. The AsyncAPI document allows people or machines communicating with one another, to understand the capabilities of an event-driven API without requiring access to the source code, documentation, or inspecting the network traffic.
-This document allows you to define your API structures and formats, including channels the end user can subscribe to and the message formats they receive.
+This document allows you to define your API structures and formats, including channels the end user can subscribe to and the message formats they receive.
The documents describing the message-driven API under the AsyncAPI specification are represented as JSON objects and conform to JSON standards. YAML, a superset of JSON, can also be used to represent an API.
-> - To learn how to create an AsyncAPI document or refresh your knowledge about the syntax and structure of the AsyncAPI document, check out our [latest specification documentation](https://www.asyncapi.com/docs/reference/specification/latest).
+> - To learn how to create an AsyncAPI document or refresh your knowledge about the syntax and structure of the AsyncAPI document, check out our [latest specification documentation](https://www.asyncapi.com/docs/reference/specification/latest).
> - You can develop, validate, and convert the AsyncAPI document to the latest version or preview your AsyncAPI document in a more readable way using the [AsyncAPI Studio](https://studio.asyncapi.com/).
In the following sections, you'll learn about the inner working of the generator, what happens once the AsyncAPI document is fed to the generator, and how you can access the content of the document in your template.
## AsyncAPI document generation process
-1. The **Generator** receives the **AsyncAPI Document** as input.
+
+1. The **Generator** receives the **AsyncAPI Document** as input.
2. The **Generator** sends to the **[Parser](parser)** the **asyncapiString** is a stringified version of the original **AsyncAPI Document** to validate and parse it.
-3. The **Parser** validates the **AsyncAPI Document** using additional schema-related plugins, either the OpenAPI schema, RAML data types, or Avro schema.
-4. If the **Parser** determines that the **AsyncAPI Document** is valid, it manipulates the original JSON/YAML document and provides a set of helper functions in return, bundling them together into an **asyncapi** variable that is an instance of [**AsyncAPIDocument**](https://github.com/asyncapi/parser-js/blob/master/API.md#module_@asyncapi/parser+AsyncAPIDocument).
-5. At this point, the **Generator** passes the **originalAsyncAPI** and the **asyncapi** which make up part of the **[Template Context](asyncapi-context)** to the **Render Engine**.
+3. The **Parser** validates the **AsyncAPI Document** using additional schema-related plugins, either the OpenAPI schema, RAML data types, or Avro schema.
+4. If the **Parser** determines that the **AsyncAPI Document** is valid, it manipulates the original JSON/YAML document and provides a set of helper functions in return, bundling them together into an **asyncapi** variable that is an instance of [**AsyncAPIDocument**](https://github.com/asyncapi/parser-js/blob/master/API.md#module_@asyncapi/parser+AsyncAPIDocument).
+5. At this point, the **Generator** passes the **originalAsyncAPI** and the **asyncapi** which make up part of the **[Template Context](template-context)** to the **Render Engine**.
6. The **Template Context** is accessible to the template files that are passed to either the [react](react-render-engine) or [nunjucks](nunjucks-render-engine) **Render Engines**.
-
-``` mermaid
+
+```mermaid
graph LR
A[Template Context]
B{Generator}
@@ -35,14 +36,17 @@ graph LR
B--> | originalAsyncAPI -> Stringified document | A
A --> D
end
- ```
+```
+
The AsyncAPI document's content is accessible to you while writing your template in two distinct ways:
-* The `originalAsyncAPI`, which is a stringified version of the AsyncAPI document provided as input, without any modifications.
-* The `asyncapi` (`AsyncAPIDocument`) which is an object with a set of helper functions, that comes as a result of the `Parser` manipulating the `originalAyncAPI` .The `asyncapi` functions make it easier to access the contents of AsyncAPI documents in your templates.
+
+- The `originalAsyncAPI`, which is a stringified version of the AsyncAPI document provided as input, without any modifications.
+- The `asyncapi` (`AsyncAPIDocument`) which is an object with a set of helper functions, that comes as a result of the `Parser` manipulating the `originalAyncAPI` .The `asyncapi` functions make it easier to access the contents of AsyncAPI documents in your templates.
In the following sections, you will learn how to use either the **originalAsyncAPI** or the **asyncapi** in your template.
-### Method 1: `originalAsyncAPI` and template
+### Method 1: `originalAsyncAPI` and template
+
One way of using the contents of the AsyncAPI document inside your template files is by using its stringified version that reflects the same contents as the AsyncAPI document provided as input to the generator. You can access it directly in your templates using the `originalAsyncAPI` variable. You also access it via the [hooks](hooks) `generator.originalAsyncAPI` because `originalAsyncAPI` is also a part of the generator instance that is passed to hooks.
```js
@@ -54,7 +58,7 @@ const path = require('path');
function createAsyncapiFile(generator) {
const asyncapi = generator.originalAsyncAPI;
let extension;
-
+
try {
JSON.parse(asyncapi);
extension = 'json';
@@ -69,9 +73,9 @@ function createAsyncapiFile(generator) {
fs.writeFileSync(asyncapiOutputLocation, asyncapi);
```
-
### Method 2: `asyncapi` and template
-A major advantage of using `asyncapi` (which is an instance of `AsyncAPIDocument`) is that it enables the developer to easily access the AsyncAPI documents' content by simply invoking a function.
+
+A major advantage of using `asyncapi` (which is an instance of `AsyncAPIDocument`) is that it enables the developer to easily access the AsyncAPI documents' content by simply invoking a function.
Once the specification YAML or JSON document is passed as input to the generator, it is passed on to the [Parser](parser) library, which then manipulates the asyncAPI document to a more structured document called the `AsyncAPIDocument`. Once the parser returns the document to the generator, the generator passes it to the render engine. The render engine makes the `AsyncAPIDocument` object accessible to your template through the `asyncapi` variable.
@@ -80,8 +84,8 @@ For example, if you want to extract the version of your API from AsyncAPI docume
In the sample code snippet below, notice how you can access the contents of the AsyncAPI document in your template using `asyncapi` variable from the context:
```js
- const apiName = asyncapi.info().title();
- const channels = asyncapi.channels();
+const apiName = asyncapi.info().title();
+const channels = asyncapi.channels();
```
> To learn about the various instances you can use to access the documents' content, look at the API of the AsyncAPI JavaScript Parser and the structure of [AsyncAPIDocument](https://github.com/asyncapi/parser-js/blob/master/API.md#module_@asyncapi/parser+AsyncAPIDocument)
diff --git a/pages/docs/tools/generator/parser.md b/pages/docs/tools/generator/parser.md
index 2ff57070adeb..1e9a060fde57 100644
--- a/pages/docs/tools/generator/parser.md
+++ b/pages/docs/tools/generator/parser.md
@@ -5,9 +5,9 @@ weight: 60
## Parser
-The AsyncAPI Parser is a package used to parse and validate the [AsyncAPI documents](asyncapi-document.md) in your Node.js or browser application. These documents can be either in YAML or JSON format.
+The AsyncAPI Parser is a package used to parse and validate the [AsyncAPI documents](asyncapi-document) in your Node.js or browser application. These documents can be either in YAML or JSON format.
-The Parser validates these documents using dedicated schema-supported plugins.
+The Parser validates these documents using dedicated schema-supported plugins.
Supported schemas:
@@ -19,15 +19,15 @@ Supported schemas:
The Parser allows the template developer to easily access schemas provided in the above supported formats. This is because the JavaScript parser converts all of them into JSON schema.
-If the document is valid, the Parser returns an `AsyncAPIDocument instance` with a set of helper functions that enable easier access to the contents of the AsyncAPI document. The parser provides dereferenced output. During the dereference process, the AsyncAPI parser substitutes a reference with a full definition. The dereferenced output is always in JSON format. The parser provides a message listing all errors if a document is invalid. The original AsyncAPI document is part of the [Template Context](template-context.md) as the generator also passes the original AsyncAPI document to the template context.
+If the document is valid, the Parser returns an `AsyncAPIDocument instance` with a set of helper functions that enable easier access to the contents of the AsyncAPI document. The parser provides dereferenced output. During the dereference process, the AsyncAPI parser substitutes a reference with a full definition. The dereferenced output is always in JSON format. The parser provides a message listing all errors if a document is invalid. The original AsyncAPI document is part of the [Template Context](template-context) as the generator also passes the original AsyncAPI document to the template context.
The following AsyncAPI document example has two channels: `channelOne` and `channelTwo`. Each channel has one operation and a single message:
```yaml
-asyncapi: '2.5.0'
+asyncapi: "2.5.0"
info:
title: Demo API
- version: '1.0.0'
+ version: "1.0.0"
channels:
channelOne:
publish:
@@ -36,14 +36,14 @@ channels:
message:
name: FirstMessage
payload:
- id:
- type: integer
- minimum: 0
- description: Id of the channel
- sentAt:
- type: string
- format: date-time
- description: Date and time when the message was sent.
+ id:
+ type: integer
+ minimum: 0
+ description: Id of the channel
+ sentAt:
+ type: string
+ format: date-time
+ description: Date and time when the message was sent.
channelTwo:
publish:
summary: This is the second sample channel
@@ -51,36 +51,37 @@ channels:
message:
name: SecondMessage
payload:
- id:
- type: integer
- minimum: 0
- description: Id of the channel
- sentAt:
- type: string
- format: date-time
- description: Date and time when the message was sent.
+ id:
+ type: integer
+ minimum: 0
+ description: Id of the channel
+ sentAt:
+ type: string
+ format: date-time
+ description: Date and time when the message was sent.
```
+
We can use helper functions provided by the Parser to operate on the above JSON file. For example, we can use the helper method `asyncAPIDocument.channelNames()`, which returns an array of all channel names currently present in the AsyncAPI document. Another example where you can use a helper function is to list out messages present in your JSON file. Instead of fetching a single message one at a time, you can use the function `asyncAPIDocument.allMessages()` that returns the map of all messages in your AsyncAPI document.
```js
- const channelNames = asyncAPIDocument.channelNames();
- const messages = asyncAPIDocument.allMessages();
+const channelNames = asyncAPIDocument.channelNames();
+const messages = asyncAPIDocument.allMessages();
```
-> The Parser gives you access to a number of these [helper functions](https://github.com/asyncapi/parser-js/blob/master/API.md) that you can implement to access the contents of your AsyncAPI document.
+> The Parser gives you access to a number of these [helper functions](https://github.com/asyncapi/parser-js/blob/master/API.md) that you can implement to access the contents of your AsyncAPI document.
## AsyncAPI document validation process
1. **AsyncAPI document** is fed as an input to the Generator.
1. Generator sends the AsyncAPI document to the Parser as **asyncapiString**; the stringified version of the original AsyncAPI document.
1. The Parser uses additional plugins such as the OpenAPI, RAML, or Avro schemas to validate custom schemas of message payloads defined in the AsyncAPI document.
-1. If the AsyncAPI document is invalid, it throws an error based on the encountered failure type. For example, if the AsyncAPI document is not a string nor a JavaScript object, the Parser throws an `invalid-document-type` error.
+1. If the AsyncAPI document is invalid, it throws an error based on the encountered failure type. For example, if the AsyncAPI document is not a string nor a JavaScript object, the Parser throws an `invalid-document-type` error.
Similarly, you may encounter errors such as:
- - `invalid-json`
- - `invalid-yaml`
- - `impossible-to-convert-to-json`
+ - `invalid-json`
+ - `invalid-yaml`
+ - `impossible-to-convert-to-json`
1. If the document is valid, the Parser modifies the AsyncAPI document, returns a set of helper functions, and bundles them together into the **asyncapi** variable. These helper functions in the form of an **asyncapi** variable are passed to the **Template Context**.
-1. The Template Context passes all of these values to the [**Render Engine**](react-render-engine.md) of your choice. Finally, the Render Engine generates whatever output you may have specified in your template. (i.e. code, documentation, diagrams, pdfs, applications, etc.)
+1. The Template Context passes all of these values to the [**Render Engine**](react-render-engine) of your choice. Finally, the Render Engine generates whatever output you may have specified in your template. (i.e. code, documentation, diagrams, pdfs, applications, etc.)
```mermaid
graph TD
@@ -93,4 +94,3 @@ graph TD
```
> To learn more about the Parser and access all of its features, check out the AsyncAPI [Parser’s GitHub repository](https://github.com/asyncapi/parser-js).
-
diff --git a/pages/docs/tutorials/create-asyncapi-document.md b/pages/docs/tutorials/create-asyncapi-document.md
index e5201cb49b5c..946bb016aed4 100644
--- a/pages/docs/tutorials/create-asyncapi-document.md
+++ b/pages/docs/tutorials/create-asyncapi-document.md
@@ -8,7 +8,7 @@ weight: 80
In this tutorial, you'll learn how to create an AsyncAPI document based on a sample real-world use case. Additionally, you will learn about event-driven architecture, message brokers, pub/sub pattern.
-Let's pretend you have a company called Smarty Lighting, and you install smart-city streetlight lighting systems. This smart lighting system is a use case of the Internet of things (IoT).You will create a Smartylighting Streetlights API using Node.js and Mosquitto (MQTT) as the message broker. This API will allow you to manage city lights remotely.
+Let's pretend you have a company called Smarty Lighting, and you install smart-city streetlight lighting systems. This smart lighting system is a use case of the Internet of Things (IoT). You will create a Smarty Lighting Streetlights API using Node.js and Mosquitto (MQTT) as the message broker. This API will allow you to manage city lights remotely.
You want to build a system that can turn streetlights on and off based on their environmental conditions:
@@ -29,7 +29,7 @@ Event-driven architecture (EDA) is a design pattern built around the production,
[Message brokers](/docs/tutorials/getting-started/event-driven-architectures#message-broker) enables asynchronous communications between services so that the sending service need not wait for the receiving service’s reply. This allows interdependent services to “talk” with one another directly, even if they were written in different languages or implemented on different platforms.
-Futhermore, the [Pub/sub](/docs/tutorials/getting-started/event-driven-architectures#publishersubscriber) is appealing for IoT use cases due to two key features: support for flexible coupling between publishers/subscribers and inherent support for point-to-multipoint transmission.
+Furthermore, the [Pub/sub](/docs/tutorials/getting-started/event-driven-architectures#publishersubscriber) is appealing for IoT use cases due to two key features: support for flexible coupling between publishers/subscribers and inherent support for point-to-multipoint transmission.
[MQTT](https://mqtt.org/), is a well-known protocol that is widely used in IoT applications because it was created particularly to address machine-to-machine (M2M) communication.
@@ -37,7 +37,7 @@ Futhermore, the [Pub/sub](/docs/tutorials/getting-started/event-driven-architect
In this step, you will create an AsyncAPI document to describe the Streelights API. It will help you generate the code and the documentation later on.
-To create one, you can either use the [AsyncAPI Studio](https://studio.asyncapi.com) or the [AsyncAPI CLI](https://github.com/asyncapi/cli), depending on your project need.
+To create one, you can either use the [AsyncAPI Studio](https://studio.asyncapi.com) or the [AsyncAPI CLI](https://github.com/asyncapi/cli), depending on your project's needs..
@@ -156,7 +156,7 @@ The `payload` property defines the content of the event using AsyncAPI schemas.
In this tutorial, you learned how to create an AsyncAPI specification document via a real-life example with an IoT use case.
-This tutorial is only a bootstrap; you'll need to add your own business logic into it. Take some time to play with it. There are still lots of things to be covered, but the intent of this tutorial is to make it simple for you to get an idea of the potential.
+This tutorial is just a starting point; you'll need to add your own business logic to it. Take some time to play with it. There are still lots of things to be covered, but the intent of this tutorial is to make it simple for you to get an idea of the potential.
## Next steps
-Now that you've completed this tutorial, go ahead to learn how to [validate your AsyncAPI document with Studio](https://www.asyncapi.com/docs/tutorials/studio-document-validation).
+Now that you've completed this tutorial, proceed to learn how to [validate your AsyncAPI document with AsyncAPI Studio](https://www.asyncapi.com/docs/tutorials/studio-document-validation).
diff --git a/pages/docs/tutorials/generate-code.md b/pages/docs/tutorials/generate-code.md
index 826d23f03696..0ddf35bd8184 100644
--- a/pages/docs/tutorials/generate-code.md
+++ b/pages/docs/tutorials/generate-code.md
@@ -96,4 +96,4 @@ In this tutorial, you learned how to generate your code from the [Streetlights A
Additionally, you've learned how to run your code by installing the generated code's dependencies and sending several test messages to the Streelights application using the MQTT client.
## Next steps
-Now that you've completed this tutorial, go ahead and learn how to [validate your AsyncAPI messages (events)](https://asyncapi.com/docs/tutorials/message-validation.md) through the message validation techniques supported by AsyncAPI.
+Now that you've completed this tutorial, go ahead and learn how to [validate your AsyncAPI messages (events)](https://asyncapi.com/docs/tutorials/message-validation) through the message validation techniques supported by AsyncAPI.
diff --git a/pages/docs/tutorials/message-validation.md b/pages/docs/tutorials/message-validation.md
index 842f66933c44..e06d226b291f 100644
--- a/pages/docs/tutorials/message-validation.md
+++ b/pages/docs/tutorials/message-validation.md
@@ -88,6 +88,6 @@ This indicates that your message is valid and the application recieved it correc
In this tutorial, you learned how to connect your generated application to an MQTT broker, send messages through it, identify when an invalid message is sent to your application, and how to correct an invalid message.
## Next steps
-Now that you've completed this tutorial, enjoy our [AsyncAPI message validation guide](pages/docs/guides/message-validation).
+Now that you've completed this tutorial, enjoy our [AsyncAPI message validation guide](https://www.asyncapi.com/docs/guides/message-validation).
---
diff --git a/public/img/posts/2023-may-docs-report.webp b/public/img/posts/2023-may-docs-report.webp
new file mode 100644
index 000000000000..ff3ff7e7df01
Binary files /dev/null and b/public/img/posts/2023-may-docs-report.webp differ
diff --git a/public/img/posts/2023-summary/blog-banner-may.webp b/public/img/posts/2023-summary/blog-banner-may.webp
new file mode 100644
index 000000000000..ce024e327129
Binary files /dev/null and b/public/img/posts/2023-summary/blog-banner-may.webp differ
diff --git a/public/img/posts/the-new-era-approaches.webp b/public/img/posts/the-new-era-approaches.webp
new file mode 100644
index 000000000000..b7dac59f05ae
Binary files /dev/null and b/public/img/posts/the-new-era-approaches.webp differ